Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Allocate resources between ECS and ECI

Última atualização: Sep 16, 2026

Use tolerâncias e afinidade de nó para agendar pods no Elastic Compute Service (ECS), no ECI ou em ambos, com fallback baseado em prioridade.

Conceitos principais

  • Taint: regra aplicada a um nó que impede o agendamento de determinados pods nele.

  • Toleration: configuração no pod que permite ignorar as taints de um nó.

  • Afinidade de nó: propriedade do pod que o atrai para nós com rótulos específicos. Existem dois tipos:

    • requiredDuringSchedulingIgnoredDuringExecution: requisito obrigatório. Os pods são agendados apenas em nós correspondentes.

    • preferredDuringSchedulingIgnoredDuringExecution: preferência opcional. O agendador tenta atender à regra, mas agenda o pod em outro local caso não encontre correspondência.

Consulte Taints e Tolerations e Afinidade de nó.

Pré-requisitos

  • Um cluster ACK gerenciado Pro executando Kubernetes v1.22 ou superior.

  • Versão 2.10.0 ou superior do add-on ack-virtual-node (consulte Virtual nodes).

  • Versão 5,9 ou superior do componente kube-scheduler, com a política de agendamento de nó virtual ativada.

    Na página Add-ons, localize Kube Scheduler, clique em Configuration e confirme se Enable Virtual Node-based Pod Scheduling está selecionado.

Exemplos de configuração

Os nós virtuais em clusters ACK têm a taint virtual-kubelet.io/provider=alibabacloud:NoSchedule por padrão. Para agendar pods em nós virtuais (ECI), adicione uma tolerância para essa taint.

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

Combine tolerâncias e afinidade de nó para criar políticas de agendamento adequadas a diferentes necessidades de recursos.

  • Preferir ECS: usa ECS por padrão e recorre ao ECI quando a capacidade do ECS for insuficiente.

  • Usar apenas ECI: restringe o uso exclusivamente a recursos ECI.

  • Usar apenas ECS: limita a execução aos recursos ECS existentes.

Preferir ECS

Adicione uma tolerância para a taint padrão e use preferredDuringSchedulingIgnoredDuringExecution para dar preferência a nós sem o rótulo type: virtual-kubelet (nós 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
Nota

Sobre afinidade de nó:

  • Múltiplos nodeSelectorTerms são combinados com OR — o pod é agendado se qualquer matchExpressions corresponder. Várias expressões dentro de um único matchExpressions usam AND — todas devem corresponder.

  • O uso de preferredDuringSchedulingIgnoredDuringExecution não garante fallback exclusivo para ECI — os pods ainda podem ser alocados no ECI mesmo com capacidade suficiente no ECS. Para um controle mais rigoroso, combine com requiredDuringSchedulingIgnoredDuringExecution.

O YAML abaixo dá preferência a nós ECS com um rótulo específico (como label_1=key_1) e recorre a nós virtuais quando houver necessidade de capacidade adicional.

Visualize detalhes do 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

Usar apenas ECI

Adicione uma tolerância para a taint padrão do nó virtual e use requiredDuringSchedulingIgnoredDuringExecution para exigir nós com o rótulo 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
            

Usar apenas ECS

Por padrão, os pods são agendados apenas em nós ECS, pois os nós virtuais têm uma taint. Nenhuma configuração adicional é necessária.

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