3.8. Contrôle du placement des pods à l'aide de contraintes d'étalement de la topologie des pods
Vous pouvez utiliser les contraintes d'étalement de la topologie des pods pour contrôler le placement de vos pods sur des nœuds, des zones, des régions ou d'autres domaines topologiques définis par l'utilisateur.
3.8.1. A propos des contraintes d'étalement de la topologie des pods
L'utilisation de pod topology spread constraint permet de contrôler finement la distribution des pods dans les domaines de défaillance afin d'obtenir une haute disponibilité et une utilisation plus efficace des ressources.
Les administrateurs d'OpenShift Container Platform peuvent étiqueter les nœuds pour fournir des informations topologiques, telles que des régions, des zones, des nœuds ou d'autres domaines définis par l'utilisateur. Une fois ces étiquettes définies sur les nœuds, les utilisateurs peuvent alors définir des contraintes d'étalement de la topologie des pods pour contrôler le placement des pods dans ces domaines topologiques.
Vous spécifiez les pods à regrouper, les domaines topologiques dans lesquels ils sont répartis et l'inclinaison acceptable. Seuls les pods situés dans le même espace de noms sont mis en correspondance et regroupés lorsqu'ils sont répartis en raison d'une contrainte.
3.8.2. Configuration des contraintes d'étalement de la topologie des pods
Les étapes suivantes montrent comment configurer les contraintes d'étalement de la topologie des pods pour distribuer les pods qui correspondent aux étiquettes spécifiées en fonction de leur zone.
Vous pouvez spécifier plusieurs contraintes d'étalement de la topologie des pods, mais vous devez vous assurer qu'elles n'entrent pas en conflit les unes avec les autres. Toutes les contraintes d'étalement de la topologie du pod doivent être satisfaites pour qu'un pod soit placé.
Conditions préalables
- Un administrateur de cluster a ajouté les étiquettes requises aux nœuds.
Procédure
Créez une spécification
Pod
et spécifiez une contrainte d'étalement de la topologie du pod :Exemple de fichier
pod-spec.yaml
apiVersion: v1 kind: Pod metadata: name: my-pod labels: foo: bar spec: topologySpreadConstraints: - maxSkew: 1 1 topologyKey: topology.kubernetes.io/zone 2 whenUnsatisfiable: DoNotSchedule 3 labelSelector: 4 matchLabels: foo: bar 5 containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod
- 1
- La différence maximale en nombre de pods entre deux domaines topologiques. La valeur par défaut est
1
, et vous ne pouvez pas spécifier une valeur de0
. - 2
- Clé de l'étiquette d'un nœud. Les nœuds ayant cette clé et une valeur identique sont considérés comme faisant partie de la même topologie.
- 3
- Comment traiter un pod s'il ne satisfait pas à la contrainte d'étalement. La valeur par défaut est
DoNotSchedule
, ce qui indique au planificateur de ne pas planifier le module. La valeurScheduleAnyway
permet de planifier le module, mais l'ordonnanceur donne la priorité au respect de la contrainte de dispersion afin de ne pas aggraver le déséquilibre de la grappe. - 4
- Les gousses qui correspondent à ce sélecteur d'étiquette sont comptées et reconnues comme un groupe lorsqu'elles sont étalées pour satisfaire à la contrainte. Veillez à spécifier un sélecteur d'étiquette, sinon aucune cosse ne pourra être prise en compte.
- 5
- Veillez à ce que cette spécification
Pod
définisse également ses étiquettes en fonction de ce sélecteur d'étiquettes si vous voulez qu'elle soit comptée correctement à l'avenir.
Créer la capsule :
$ oc create -f pod-spec.yaml
3.8.3. Exemple de contraintes de répartition de la topologie des pods
Les exemples suivants illustrent les configurations de contraintes de propagation de la topologie des pods.
3.8.3.1. Exemple de contrainte de diffusion d'une topologie de pod unique
Cet exemple de spécification Pod
définit une contrainte d'étalement de la topologie du pod. Elle s'applique aux pods étiquetés foo:bar
, se répartit entre les zones, spécifie une inclinaison de 1
et ne planifie pas le pod s'il ne répond pas à ces exigences.
kind: Pod apiVersion: v1 metadata: name: my-pod labels: foo: bar spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: foo: bar containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod
3.8.3.2. Exemple de contraintes d'étalement de la topologie des pods multiples
Cet exemple de spécification Pod
définit deux contraintes d'étalement de la topologie des pods. Les deux correspondent aux pods étiquetés foo:bar
, spécifient une inclinaison de 1
, et ne planifient pas le pod s'il ne répond pas à ces exigences.
La première contrainte distribue les nacelles en fonction d'une étiquette définie par l'utilisateur node
et la deuxième contrainte distribue les nacelles en fonction d'une étiquette définie par l'utilisateur rack
. Les deux contraintes doivent être respectées pour que le module soit programmé.
kind: Pod apiVersion: v1 metadata: name: my-pod-2 labels: foo: bar spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: node whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: foo: bar - maxSkew: 1 topologyKey: rack whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: foo: bar containers: - image: "docker.io/ocpqe/hello-pod" name: hello-pod