Lorsqu'une zone devient indisponible, les charges de travail qui y sont concentrées tombent intégralement hors ligne. Les contraintes de répartition topologique distribuent uniformément les Pods sur les zones de disponibilité d'un cluster ACS. Ainsi, la défaillance d'une seule zone n'affecte que les Pods situés dans cette zone, tandis que le reste de votre charge de travail continue de fonctionner.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
-
kube-scheduler installé, avec une version répondant aux exigences suivantes :
Version du cluster ACS Version du composant Scheduler 1.31 v1.31.0-aliyun-1.2.0 et ultérieures 1.30 v1.30.3-aliyun-1.1.1 et ultérieures 1.28 v1.28.9-aliyun-1.1.0 et ultérieures acs-virtual-node installé en version v2.12.0-acs.4 ou ultérieure.
Limites
Les contraintes suivantes s'appliquent uniquement aux Pods remplissant toutes ces conditions :
Le Pod utilise le type de calcul GPU High-Performance Network (GPU-HPN).
La valeur
schedulerNamedu Pod estdefault-scheduler.L'option Enable Custom Tags And Scheduler For GPU-HPN Nodes n'est pas sélectionnée dans la configuration du composant scheduler.
Les versions récentes du composant kube-scheduler activent l'option Enable Custom Tags And Scheduler For GPU-HPN Nodes par défaut. Pour plus de détails, consultez kube-scheduler.
Pour les Pods satisfaisant ces trois conditions, les champs de contrainte de répartition topologique suivants se comportent différemment du standard Kubernetes :
| Champ | Description | Contrainte |
|---|---|---|
labelSelector |
Sélectionne les Pods à inclure lors du décompte des Pods dans chaque domaine topologique. | Les Pods d'autres types de calcul (usage général, optimisé pour le calcul, GPU) sont exclus du décompte. |
matchLabelKeys |
Liste de clés de libellé utilisée conjointement avec labelSelector pour identifier l'ensemble des Pods concernés par le calcul de distribution. |
Aucune contrainte. |
nodeAffinityPolicy |
Définit la manière dont nodeAffinity et nodeSelector sont pris en compte lors du calcul de l'asymétrie de distribution topologique. |
Non pris en charge. |
nodeTaintsPolicy |
Détermine comment les taints de nœud sont appliqués lors du calcul de l'asymétrie de distribution topologique. | Non pris en charge. |
Pour les types de calcul à usage général, optimisés pour le calcul et GPU, le comportement standard des contraintes de répartition topologique Kubernetes s'applique sans ces restrictions.
Distribuer les Pods entre les zones
-
Consultez les nœuds virtuels du cluster.
kubectl get nodeLa sortie liste les nœuds par zone. Exemple :
NAME STATUS ROLES AGE VERSION virtual-kubelet-cn-hangzhou-i Ready agent 5h42m v1.28.3-xx virtual-kubelet-cn-hangzhou-j Ready agent 5h42m v1.28.3-xx -
Créez le fichier
dep-spread-demo.yamlavec le contenu suivant.apiVersion: apps/v1 kind: Deployment metadata: name: dep-spread-demo labels: app: spread-demo spec: replicas: 4 selector: matchLabels: app: spread-demo template: metadata: labels: app: spread-demo spec: containers: - name: spread-demo image: registry-cn-beijing.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" # Spread Pods evenly across zones. # maxSkew: 1 means no zone can have more than one extra Pod compared to any other zone. topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: matchLabels: app: spread-demo -
Déployez la charge de travail.
kubectl apply -f dep-spread-demo.yaml -
Vérifiez la répartition des Pods entre les zones.
kubectl get pod -o wideLa sortie affiche 4 Pods répartis sur 2 zones, soit 2 Pods par zone :
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dep-spread-demo-7c656dbf5f-6twkc 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-i <none> <none> dep-spread-demo-7c656dbf5f-cgxr8 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-spread-demo-7c656dbf5f-f4fz9 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-spread-demo-7c656dbf5f-kc6xf 1/1 Running 0 2m29s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-i <none> <none>