Tous les produits
Search
Centre de documentation

Container Compute Service:Répartition topologique par zone

Dernière mise à jour :Aug 12, 2026

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 schedulerName du Pod est default-scheduler.

  • L'option Enable Custom Tags And Scheduler For GPU-HPN Nodes n'est pas sélectionnée dans la configuration du composant scheduler.

Remarque

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

  1. Consultez les nœuds virtuels du cluster.

    kubectl get node

    La 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
  2. Créez le fichier dep-spread-demo.yaml avec 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
  3. Déployez la charge de travail.

    kubectl apply -f dep-spread-demo.yaml
  4. Vérifiez la répartition des Pods entre les zones.

    kubectl get pod -o wide

    La 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>