Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Allocate resources between ECS and ECI

Última actualización: Sep 18, 2026

Utilice tolerancias y afinidad de nodos para programar pods en Elastic Compute Service (ECS), en ECI o en ambos. También puede configurar un respaldo basado en prioridades.

Conceptos clave

  • Taint: regla de un nodo que impide la programación de ciertos pods en él.

  • Toleration: configuración de un pod que le permite ignorar los taints de un nodo.

  • Afinidad de nodos: propiedad de un pod que lo atrae hacia nodos con etiquetas específicas. Existen dos tipos:

    • requiredDuringSchedulingIgnoredDuringExecution: requisito obligatorio. Los pods se programan únicamente en nodos que cumplen la condición.

    • preferredDuringSchedulingIgnoredDuringExecution: preferencia opcional. El programador intenta cumplir la regla, pero programa el pod en otro lugar si no encuentra coincidencias.

Consulte Taints and Tolerations y Node affinity.

Requisitos previos

  • Un clúster administrado Pro de ACK que ejecute Kubernetes v1.22 o una versión posterior.

  • La versión 2.10.0 o posterior del complemento ack-virtual-node (consulte Virtual nodes).

  • La versión 5.9 o posterior del componente kube-scheduler, con la política de programación de nodos virtuales habilitada.

    En la página Add-ons, busque Kube Scheduler, haga clic en Configuration y confirme que Enable Virtual Node-based Pod Scheduling esté seleccionado.

Ejemplos de configuración

Los nodos virtuales de los clústeres de ACK tienen el taint virtual-kubelet.io/provider=alibabacloud:NoSchedule de forma predeterminada. Para programar pods en nodos virtuales (ECI), agregue una tolerancia para este taint.

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

Combine tolerancias y afinidad de nodos para crear políticas de programación según sus necesidades de recursos.

  • Preferir ECS: usa ECS de forma predeterminada y recurre a ECI cuando la capacidad de ECS es insuficiente.

  • Usar solo ECI: utiliza exclusivamente recursos de ECI.

  • Usar solo ECS: emplea únicamente los recursos de ECS existentes.

Preferir ECS

Agregue una tolerancia para el taint predeterminado. Después, utilice preferredDuringSchedulingIgnoredDuringExecution para dar prioridad a los nodos sin la etiqueta type: virtual-kubelet (nodos de 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

Consideraciones sobre la afinidad de nodos:

  • Varios elementos nodeSelectorTerms se combinan con OR. Un pod se programa si coincide alguna expresión de matchExpressions. Las expresiones dentro de un mismo bloque matchExpressions se combinan con AND, por lo que todas deben coincidir.

  • preferredDuringSchedulingIgnoredDuringExecution no garantiza que el respaldo sea exclusivo para ECI. Los pods podrían programarse en ECI incluso si hay capacidad suficiente en ECS. Para un control más estricto, combine esta opción con requiredDuringSchedulingIgnoredDuringExecution.

El siguiente archivo YAML da prioridad a los nodos de ECS con una etiqueta específica (como label_1=key_1). Si se requiere más capacidad, recurre a los nodos virtuales.

Ver detalles del 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 solo ECI

Agregue una tolerancia para el taint predeterminado de los nodos virtuales. Luego, use requiredDuringSchedulingIgnoredDuringExecution para exigir nodos con la etiqueta 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 solo ECS

De forma predeterminada, los pods se programan únicamente en nodos de ECS porque los nodos virtuales tienen un taint. No se requiere configuración adicional.

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