la planification du déploiement
déploiement du régulateur RC ou leurs règles d'ordonnancement sont programmées automatiquement par le système, leur course finale respective sur laquelle les noeuds complètement à travers une série d'algorithmes calculés par le noeud maître du planificateur, l'utilisateur ne peut pas intervenir processus de programmation et les résultats, voici pas la démo! !
calendrier d'orientation NodeSelector
Dans l'environnement de production réel, il est possible que nous avons besoin de fonctionner dans une nacelle sous un nœud particulier, nous devons calendrier d'orientation, de sorte qu'un pod de fonctionner à un node2 de nœud spécifique, les étapes suivantes:
La première étape, une récompense à l'étiquette du noeud node2 de
[Root @ maître] # ~ kubectl étiquettes nœud application node2 = version
peut voir l'étiquette kubectl get nœuds --show-étiquettes
En second lieu, définir le fichier pod.yaml, définir le sélecteur de laisser trois points dans l'application de l'étiquette pod: sur la libération de noeud
[root @ maître ~ ] # vim deploy.yaml apiVersion: apps / v1 genre: Déploiement des métadonnées: nom: myapp espace de noms: default spécifications: répliques: 3 sélecteur: matchLabels: app: sortie modèle: métadonnées: Nom: MyPOD Espace de noms: par défaut des étiquettes : application: version spec: nodeSelector: application: libération des conteneurs: - nom: mycontainer Image: liwang7314 / myapp: v1 imagePullPolicy: IfNotPresent ports: -Nom: http containerPort: 80
La troisième étape consiste à créer des fichiers exécutables pod et pod marche noeud observé, nous avons constaté que tous les trois pod en cours d'exécution sur le noeud node2
[root @ maître ~] # kubectl créer - f deploy.yaml deployment.apps / myapp créé [root @ maître ~] # kubectl get dosettes - o large NOM STATUT DE PRÊT REDEMARRAGES AGE IP NODE NODE NOMME GATES EN ÉTAT monapp -95ff9459c-8g6tc 1 / 1 Exécution 0 4s 10.244 . 2.8 node2 <none> <aucun> monapp -95ff9459c-ghxxx 1 / 1 Exécution 0 4s 10.244 . 2.7 node2 <none> <aucun> monapp -95ff9459c-s5pt9 1 / 1 Exécution 0 4s 10.244 . 2.6 node2 <none> <aucun>
NodeAffinity: planification d'affinité Node
NodeAffinity signifie la politique d'ordonnancement d'affinité Node est utilisé pour remplacer toute la lettre NodeSelector stratégie de planification, il existe deux types de noeuds d'affinité Expression
- requiredDuringSchedulingIgnoredDuringExecution: doit respecter les règles spécifiées peuvent planifier Pod au nœud (NodeSelector fonction similaire, mais nulle part la syntaxe), ce qui correspond à la limite dure
- preferredDuringSchedulingIgnoredDuringExecution: priorité souligné répondre à des critères spécifiés, les tentatives de planificateur pour planifier l'arbre Pod, mais ne force pas, ce qui équivaut à une limite douce, la pluralité de règles de priorité sont également fournies des poids des valeurs (en poids), pour définir la séquence d'exécution
Nous définissons un fichier affinity.yaml, qui définit trois pod, le calendrier de pod pour permettre la définition de requiredDuringSchedulingIgnoredDuringExecution sur node2, par définition laissez pod preferredDuringSchedulingIgnoredDuringExecution prévue au noeud node2, comme suit:
La première étape, des fichiers de définitions yaml
[root @ maître ~] # cat affinity.yaml apiVersion: apps / v1 genre: Déploiement des métadonnées: nom: myapp espace de noms: default spec: répliques: 3 sélecteur: matchLabels: application: sortie modèle: métadonnées: nom: MyPOD espace de noms: par défaut des étiquettes : application: libération spec: affinité: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - clé: application opérateur: Dans valeurs: - libération preferredDuringSchedulingIgnoredDuringExecution: - poids: 1 préférence matchExpressions: - clé: application exploitant: NOTIN valeurs: - libération des conteneurs: - nom: mycontainer l' image: liwang7314 / myapp: v1 imagePullPolicy: IfNotPresent ports: - Nom: http containerPort: 80
Ensuite, créez pod, puis observer le nœud où la nacelle, se trouve sur tous devrait node2
[root @ maître ~] # kubectl get dosettes - o large NOM STATUT DE PRÊT REDEMARRAGES AGE IP NODE NODE NOMME GATES EN ÉTAT monapp -6fcfb98879-566z5 1 / 1 Exécution 0 3m24s 10,244 . 2.10 node2 <none> <aucun> monapp -6fcfb98879-5r6cm 1 / 1 Exécution 0 3m24s 10,244 . 2.11 node2 <none> <aucun> monapp -6fcfb98879-7kwwq 1 / 1 Course à pied 0 3m24s 10,244 . 2.9 node2 <none> <aucun>
Si l'on requiredDuringSchedulingIgnoredDuringExecution enlevé, la vue peut être trouvé déjà prévue node1, node2, mais il y aura un pod, parce que le champ preferredDuringSchedulingIgnoredDuringExecution autant que possible, non nécessaire, et donc les résultats suivants
[root @ maître ~] # kubectl get dosettes - o large NOM STATUT DE PRÊT REDEMARRAGES AGE IP NODE NODE NOMME GATES EN ÉTAT monapp -55679db465-h5ftb 1 / 1 Exécution 0 11s 10,244 . 1,76 node1 <none> <aucun> monapp -55679db465-kj58w 1 / 1 Exécution 0 11s 10,244 . 1,75 node1 <none> <aucun> monapp -55679db465-mwfjq 1 / 1 Exécution 0 11s 10.244 . 2.12 node2 <none> <aucun>
Remarque NodeAffinity ensemble de règles:
- Si les deux sont définis nodeSelector et nodeAffinity, vous devez les deux conditions sont réunies, Pod peut éventuellement courir au noeud spécifié
- Si nodeAffinity formulé plus de nodeSelectorTerms, alors on peut être en mesure d'égaler le succès de la planification
- S'il y a plusieurs matchExpressions dans nodeSelectorTerms, puis un nœud doit répondre à tous matchExpressions pour exécuter le Pod