4.3. Contrôle du placement de la gousse sur les nœuds en utilisant les règles d’affinité des nœuds
Affinité est une propriété de pods qui contrôle les nœuds sur lesquels ils préfèrent être programmés.
Dans Red Hat OpenShift Service sur AWS Node affinity est un ensemble de règles utilisées par le programmeur pour déterminer où un pod peut être placé. Les règles sont définies à l’aide d’étiquettes personnalisées sur les nœuds et les sélecteurs d’étiquettes spécifiés dans les pods.
4.3.1. Comprendre l’affinité des nœuds Copier lienLien copié sur presse-papiers!
L’affinité des nœuds permet à un pod de spécifier une affinité vers un groupe de nœuds sur lequel il peut être placé. Le nœud n’a pas de contrôle sur le placement.
À titre d’exemple, vous pouvez configurer un pod pour fonctionner uniquement sur un nœud avec un CPU spécifique ou dans une zone de disponibilité spécifique.
Il existe deux types de règles d’affinité des nœuds : requises et préférées.
Les règles requises doivent être respectées avant qu’un pod puisse être programmé sur un nœud. Les règles préférées précisent que, si la règle est respectée, le programmeur tente d’appliquer les règles, mais ne garantit pas l’exécution.
Lorsque les étiquettes sur un nœud changent au moment de l’exécution, ce qui entraîne une règle d’affinité des nœuds sur une gousse n’est plus respectée, la gousse continue de fonctionner sur le nœud.
Configurez l’affinité des nœuds via le fichier Pod spec. Il est possible de spécifier une règle requise, une règle préférée ou les deux. Lorsque vous spécifiez les deux, le nœud doit d’abord respecter la règle requise, puis tente de respecter la règle préférée.
L’exemple suivant est un Pod spec avec une règle qui exige que le pod soit placé sur un nœud avec une étiquette dont la clé est e2e-az-NorthSouth et dont la valeur est e2e-az-North ou e2e-az-South:
Exemple de fichier de configuration de pod avec une règle d’affinité de nœud requise
- 1
- La strophe pour configurer l’affinité des nœuds.
- 2
- Définit une règle requise.
- 3 5 6
- La paire clé/valeur (étiquette) qui doit être assortie pour appliquer la règle.
- 4
- L’opérateur représente la relation entre l’étiquette sur le nœud et l’ensemble de valeurs dans les paramètres de correspondanceExpression dans la spécification Pod. Cette valeur peut être In, NotIn, Exist ou NeesNotExist, Lt, ou Gt.
L’exemple suivant est une spécification de nœud avec une règle préférée selon laquelle un nœud avec une étiquette dont la clé est e2e-az-East et dont la valeur est e2e-az-East ou e2e-az-West est préféré pour le pod:
Exemple de fichier de configuration de pod avec une règle d’affinité préférée des nœuds
- 1
- La strophe pour configurer l’affinité des nœuds.
- 2
- Définit une règle préférée.
- 3
- Indique un poids pour une règle préférée. Le nœud avec le poids le plus élevé est préféré.
- 4 6 7
- La paire clé/valeur (étiquette) qui doit être assortie pour appliquer la règle.
- 5
- L’opérateur représente la relation entre l’étiquette sur le nœud et l’ensemble de valeurs dans les paramètres de correspondanceExpression dans la spécification Pod. Cette valeur peut être In, NotIn, Exist ou NeesNotExist, Lt, ou Gt.
Il n’y a pas de concept explicite d’anti-affinité de nœud, mais l’utilisation de l’opérateur NotIn ou DoesNotExist reproduit ce comportement.
Lorsque vous utilisez des sélecteurs d’affinité des nœuds et de nœuds dans la même configuration, notez ce qui suit:
- Lorsque vous configurez à la fois nodeSelector et nodeAffinity, les deux conditions doivent être remplies pour que la gousse soit programmée sur un nœud candidat.
- Lorsque vous spécifiez plusieurs nodeSelectorTerms associés aux types nodeAffinity, le pod peut être programmé sur un nœud si l’un des nodeSelectorTerms est satisfait.
- Lorsque vous spécifiez plusieurs correspondancesExpressions associées à nodeSelectorTerms, le pod ne peut être programmé sur un nœud que si toutes les correspondancesExpressions sont satisfaites.
4.3.2. Configuration d’une règle d’affinité de nœud requise Copier lienLien copié sur presse-papiers!
Les règles requises doivent être respectées avant qu’un pod puisse être programmé sur un nœud.
Procédure
Les étapes suivantes démontrent une configuration simple qui crée un nœud et un pod que le programmeur est tenu de placer sur le nœud.
Créer un pod avec une étiquette spécifique dans le pod spec:
Créez un fichier YAML avec le contenu suivant:
NoteIl est impossible d’ajouter une affinité directement à un pod programmé.
Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Ajoute une affinité de gousse.
- 2
- Configure le paramètre requisDuringSchedulingIgnoredDuringExecution.
- 3
- Indique la clé et les valeurs qui doivent être remplies. Lorsque vous souhaitez que le nouveau pod soit programmé sur le nœud que vous avez modifié, utilisez les mêmes paramètres de clé et de valeurs que l’étiquette dans le nœud.
- 4
- Indique un opérateur. L’opérateur peut être dans, NotIn, existant ou ne pas exister. À titre d’exemple, utilisez l’opérateur In pour exiger que l’étiquette soit dans le nœud.
Créer le pod:
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.3. Configuration d’une règle d’affinité des nœuds préféré Copier lienLien copié sur presse-papiers!
Les règles préférées précisent que, si la règle est respectée, le programmeur tente d’appliquer les règles, mais ne garantit pas l’exécution.
Procédure
Les étapes suivantes démontrent une configuration simple qui crée un nœud et un pod que le planificateur essaie de placer sur le nœud.
Créer un pod avec une étiquette spécifique:
Créez un fichier YAML avec le contenu suivant:
NoteIl est impossible d’ajouter une affinité directement à un pod programmé.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Ajoute une affinité de gousse.
- 2
- Configure le paramètre préféréDuringSchedulingIgnoredDuringExecution.
- 3
- Indique un poids pour le nœud, en tant que numéro 1-100. Le nœud avec le poids le plus élevé est préféré.
- 4
- Indique la clé et les valeurs qui doivent être remplies. Lorsque vous souhaitez que le nouveau pod soit programmé sur le nœud que vous avez modifié, utilisez les mêmes paramètres de clé et de valeurs que l’étiquette dans le nœud.
- 5
- Indique un opérateur. L’opérateur peut être dans, NotIn, existant ou ne pas exister. À titre d’exemple, utilisez l’opérateur In pour exiger que l’étiquette soit dans le nœud.
Créez le pod.
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.4. Exemple de règles d’affinité des nœuds Copier lienLien copié sur presse-papiers!
Les exemples suivants démontrent l’affinité des nœuds.
4.3.4.1. Affinité des nœuds avec les étiquettes correspondantes Copier lienLien copié sur presse-papiers!
L’exemple suivant démontre l’affinité des nœuds pour un nœud et un pod avec des étiquettes assorties:
Le nœud Node1 a la zone d’étiquette:us:
oc label node node1 zone=us
$ oc label node node1 zone=us
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceAlternativement, vous pouvez appliquer le YAML suivant pour ajouter l’étiquette:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le pod-s1 pod a la zone et nous avons la paire clé/valeur en vertu d’une règle d’affinité de nœud requise:
cat pod-s1.yaml
$ cat pod-s1.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le pod-s1 peut être programmé sur Node1:
oc get pod -o wide
$ oc get pod -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME READY STATUS RESTARTS AGE IP NODE pod-s1 1/1 Running 0 4m IP1 node1
NAME READY STATUS RESTARTS AGE IP NODE pod-s1 1/1 Running 0 4m IP1 node1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.4.2. Affinité des nœuds sans étiquettes correspondantes Copier lienLien copié sur presse-papiers!
L’exemple suivant démontre l’affinité des nœuds pour un nœud et un pod sans étiquettes correspondantes:
Le nœud Node1 a la zone d’étiquette:emea:
oc label node node1 zone=emea
$ oc label node node1 zone=emea
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceAlternativement, vous pouvez appliquer le YAML suivant pour ajouter l’étiquette:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le pod-s1 pod a la zone et nous avons la paire clé/valeur en vertu d’une règle d’affinité de nœud requise:
cat pod-s1.yaml
$ cat pod-s1.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le pod-s1 ne peut pas être programmé sur Node1:
oc describe pod pod-s1
$ oc describe pod pod-s1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow