Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Allocate resources between ECS and ECI

Dernière mise à jour :Sep 17, 2026

Utilisez les tolérances et l'affinité de nœud pour planifier les pods sur Elastic Compute Service (ECS), ECI ou les deux, avec un basculement basé sur les priorités.

Concepts clés

  • Taint : règle appliquée à un nœud qui empêche la planification de certains pods sur celui-ci.

  • Toleration : paramètre configuré sur un pod lui permettant d'ignorer les taints d'un nœud.

  • Node affinity : propriété d'un pod qui favorise sa planification sur des nœuds portant des libellés spécifiques. Il existe deux types :

    • requiredDuringSchedulingIgnoredDuringExecution : exigence stricte. Le planificateur ne place les pods que sur les nœuds correspondants.

    • preferredDuringSchedulingIgnoredDuringExecution : préférence souple. Le planificateur tente de respecter la règle, mais planifie le pod ailleurs si aucune correspondance n'est trouvée.

Consultez les pages Taints and Tolerations et Node affinity.

Prérequis

  • Un cluster géré ACK Pro exécutant Kubernetes v1.22 ou une version ultérieure.

  • La version 2.10.0 ou ultérieure du module complémentaire ack-virtual-node (voir Virtual nodes).

  • La version 5.9 ou ultérieure du composant kube-scheduler, avec la stratégie de planification des nœuds virtuels activée.

    Sur la page Add-ons, recherchez Kube Scheduler, cliquez sur Configuration et vérifiez que l'option Enable Virtual Node-based Pod Scheduling est sélectionnée.

Exemples de configuration

Les nœuds virtuels dans les clusters ACK portent par défaut le taint virtual-kubelet.io/provider=alibabacloud:NoSchedule. Pour planifier des pods sur des nœuds virtuels (ECI), ajoutez une tolérance pour ce taint.

Exemple :
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule

Combinez les tolérances et l'affinité de nœud pour créer des stratégies de planification adaptées à différents besoins en ressources.

  • Préférer ECS : utilisez ECS par défaut ; basculez sur ECI lorsque la capacité ECS est insuffisante.

  • Utiliser uniquement ECI : utilisez exclusivement des ressources ECI.

  • Utiliser uniquement ECS : utilisez exclusivement des ressources ECS existantes.

Préférer ECS

Ajoutez une tolérance pour le taint par défaut, puis utilisez preferredDuringSchedulingIgnoredDuringExecution pour privilégier les nœuds ne portant pas le libellé type: virtual-kubelet (nœuds ECS).

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-prefer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: NotIn
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
Remarque

À propos de l'affinité de nœud :

  • Plusieurs éléments nodeSelectorTerms sont combinés avec un OU logique : un pod est planifié si au moins une expression matchExpressions correspond. Plusieurs expressions au sein d'un même bloc matchExpressions sont combinées avec un ET logique : toutes doivent correspondre.

  • L'utilisation de preferredDuringSchedulingIgnoredDuringExecution ne garantit pas un basculement exclusif vers ECI : les pods peuvent toujours être planifiés sur ECI même si la capacité ECS est suffisante. Pour un contrôle plus strict, combinez cette option avec requiredDuringSchedulingIgnoredDuringExecution.

Le fichier YAML suivant privilégie les nœuds ECS portant un libellé spécifique (par exemple label_1=key_1) et bascule sur les nœuds virtuels lorsque la capacité supplémentaire est nécessaire.

Afficher les détails du fichier YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-ecs-prefer
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
    # The pod must be scheduled to a node with the label_1:key_1 or type:virtual-kubelet label.
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
    # The pod is preferentially scheduled to a node with the label_1:key_1 label, and secondarily to a node with the type:virtual-kubelet label.
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            preference:
              matchExpressions:
              - key: label_1
                operator: In
                values:
                - key_1
          - weight: 1
            preference:
              matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

Utiliser uniquement ECI

Ajoutez une tolérance pour le taint par défaut des nœuds virtuels, puis utilisez requiredDuringSchedulingIgnoredDuringExecution pour exiger des nœuds portant le libellé type: virtual-kubelet.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-only
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      - key: virtual-kubelet.io/provider
        operator: Equal
        value: alibabacloud
        effect: NoSchedule
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: type
                operator: In
                values:
                - virtual-kubelet
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            

Utiliser uniquement ECS

Par défaut, les pods sont planifiés uniquement sur les nœuds ECS car les nœuds virtuels possèdent un taint. Aucune configuration supplémentaire n'est requise.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ecs-only
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6