2.11. Placer des pods sur des nœuds spécifiques en utilisant des sélecteurs de nœuds
Un site node selector spécifie une carte de paires clé-valeur. Les règles sont définies à l'aide d'étiquettes personnalisées sur les nœuds et de sélecteurs spécifiés dans les pods.
Pour qu'un module puisse être exécuté sur un nœud, les paires clé-valeur indiquées doivent figurer sur l'étiquette du nœud.
Si vous utilisez l'affinité de nœuds et les sélecteurs de nœuds dans la même configuration de pods, consultez les considérations importantes ci-dessous.
2.11.1. Utilisation de sélecteurs de nœuds pour contrôler le placement des pods
Vous pouvez utiliser des sélecteurs de nœuds sur les pods et des étiquettes sur les nœuds pour contrôler l'endroit où le pod est planifié. Avec les sélecteurs de nœuds, OpenShift Container Platform planifie les pods sur les nœuds qui contiennent les étiquettes correspondantes.
Vous ajoutez des étiquettes à un nœud, à un ensemble de machines de calcul ou à une configuration de machine. L'ajout de l'étiquette à l'ensemble de machines de calcul garantit que si le nœud ou la machine tombe en panne, les nouveaux nœuds disposent de l'étiquette. Les étiquettes ajoutées à un nœud ou à une configuration de machine ne persistent pas si le nœud ou la machine tombe en panne.
Pour ajouter des sélecteurs de nœuds à un module existant, ajoutez un sélecteur de nœuds à l'objet de contrôle de ce module, tel que l'objet ReplicaSet
, l'objet DaemonSet
, l'objet StatefulSet
, l'objet Deployment
ou l'objet DeploymentConfig
. Tous les modules existants sous cet objet de contrôle sont recréés sur un nœud avec une étiquette correspondante. Si vous créez un nouveau module, vous pouvez ajouter le sélecteur de nœud directement à la spécification Pod
.
Vous ne pouvez pas ajouter un sélecteur de nœud directement à un module planifié existant.
Conditions préalables
Pour ajouter un sélecteur de nœud à des modules existants, déterminez l'objet de contrôle de ce module. Par exemple, le module router-default-66d5cf9464-m2g75
est contrôlé par l'ensemble de répliques router-default-66d5cf9464
:
$ oc describe pod router-default-66d5cf9464-7pwkc Name: router-default-66d5cf9464-7pwkc Namespace: openshift-ingress .... Controlled By: ReplicaSet/router-default-66d5cf9464
La console web liste l'objet de contrôle sous ownerReferences
dans le pod YAML :
ownerReferences: - apiVersion: apps/v1 kind: ReplicaSet name: router-default-66d5cf9464 uid: d81dd094-da26-11e9-a48a-128e7edf0312 controller: true blockOwnerDeletion: true
Procédure
Ajoutez des étiquettes à un nœud en utilisant un ensemble de machines de calcul ou en éditant le nœud directement :
Utilisez un objet
MachineSet
pour ajouter des étiquettes aux nœuds gérés par l'ensemble de machines de calcul lors de la création d'un nœud :Exécutez la commande suivante pour ajouter des étiquettes à un objet
MachineSet
:$ oc patch MachineSet <name> --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"<key>"="<value>","<key>"="<value>"}}]' -n openshift-machine-api
Par exemple :
$ oc patch MachineSet abc612-msrtw-worker-us-east-1c --type='json' -p='[{"op":"add","path":"/spec/template/spec/metadata/labels", "value":{"type":"user-node","region":"east"}}]' -n openshift-machine-api
AstuceVous pouvez également appliquer le YAML suivant pour ajouter des étiquettes à un ensemble de machines de calcul :
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: <machineset> namespace: openshift-machine-api spec: template: spec: metadata: labels: region: "east" type: "user-node"
Vérifiez que les étiquettes sont ajoutées à l'objet
MachineSet
en utilisant la commandeoc edit
:Par exemple :
$ oc edit MachineSet abc612-msrtw-worker-us-east-1c -n openshift-machine-api
Exemple d'objet
MachineSet
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet .... spec: ... template: metadata: ... spec: metadata: labels: region: east type: user-node ....
Ajouter des étiquettes directement à un nœud :
Modifiez l'objet
Node
pour le nœud :$ oc label nodes <name> <key>=<value>
Par exemple, pour étiqueter un nœud :
$ oc label nodes ip-10-0-142-25.ec2.internal type=user-node region=east
AstuceVous pouvez également appliquer le langage YAML suivant pour ajouter des étiquettes à un nœud :
kind: Node apiVersion: v1 metadata: name: <node_name> labels: type: "user-node" region: "east"
Vérifiez que les étiquettes sont ajoutées au nœud :
$ oc get nodes -l type=user-node,region=east
Exemple de sortie
NAME STATUS ROLES AGE VERSION ip-10-0-142-25.ec2.internal Ready worker 17m v1.25.0
Ajouter le sélecteur de nœud correspondant à un pod :
Pour ajouter un sélecteur de nœud aux modules existants et futurs, ajoutez un sélecteur de nœud à l'objet de contrôle des modules :
Exemple
ReplicaSet
objet avec étiquetteskind: ReplicaSet .... spec: .... template: metadata: creationTimestamp: null labels: ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default pod-template-hash: 66d5cf9464 spec: nodeSelector: kubernetes.io/os: linux node-role.kubernetes.io/worker: '' type: user-node 1
- 1
- Ajouter le sélecteur de nœud.
Pour ajouter un sélecteur de nœud à un nouveau pod spécifique, ajoutez le sélecteur à l'objet
Pod
directement :Exemple d'objet
Pod
avec un sélecteur de nœudapiVersion: v1 kind: Pod .... spec: nodeSelector: region: east type: user-node
NoteVous ne pouvez pas ajouter un sélecteur de nœud directement à un module planifié existant.