Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Schedule applications to a hybrid node pool

Última actualización: Sep 04, 2026

Los node pools de nube híbrida permiten registrar nodos de su centro de datos (IDC) en un clúster de ACK. Esto facilita la gestión unificada y la programación coordinada entre los recursos locales y los de la nube. Este tema describe cómo programar aplicaciones en un node pool de nube híbrida para cumplir con requisitos de ubicación de recursos, normativas de localización de datos o hardware específico.

Funcionamiento

Al crear un node pool de nube híbrida, ACK agrega automáticamente un taint y una etiqueta a cada nodo del pool:

  • Taint: nodepool-type=hybridcloud:NoSchedule — impide que los componentes del sistema y las cargas de trabajo generales se asignen a los nodos de nube híbrida de forma predeterminada.

  • Etiqueta: alibabacloud.com/nodepool-type: hybridcloud — identifica el tipo de nodo para que las políticas de programación puedan seleccionarlo.

Una toleration elimina la restricción de programación y hace que un pod sea elegible para los nodos de nube híbrida, aunque no garantiza su asignación en ellos. Para garantizar la ubicación, combine la toleration con una regla de nodeSelector o nodeAffinity.

Elegir un enfoque

Enfoque

Cuándo utilizarlo

Configuración clave

Permitir (Solución 1)

Para ampliar la capacidad total sin restricciones estrictas de ubicación. Los pods aún pueden asignarse en otros node pools.

Solo tolerations

Dirigir a un node pool específico (Solución 2a)

Cuando se requiere hardware específico, topología de red o residencia de datos para un solo pool.

tolerations + nodeSelector (ID del node pool)

Dirigir a cualquier node pool de nube híbrida (Solución 2b)

Para cargas de trabajo que deben ejecutarse en las instalaciones, pero en cualquier node pool del IDC.

tolerations + nodeAffinity

Basado en prioridad entre pools (Solución 3)

Para preferir un node pool de nube híbrida de menor costo en la expansión; libera primero los nodos ECS de la nube durante la reducción.

ResourcePolicy + tolerations

Solución 1: Permitir la programación en nodos de nube híbrida

Cuándo utilizarla: Su clúster necesita mayor capacidad total y su carga de trabajo no tiene restricciones estrictas de ubicación. Con esta configuración, el programador considera el node pool de nube híbrida como un candidato válido, pero los pods aún pueden ejecutarse en otros node pools activos.

Configuración principal: Agregue una entrada de tolerations en spec.template.spec:

spec:
  template:
    spec:
      # Allow this pod to run on hybrid cloud nodes.
      tolerations:
        - key: "nodepool-type"
          operator: "Equal"
          value: "hybridcloud"
          effect: "NoSchedule"

Expand to view

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-allowed-on-hybrid
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      # Allow this pod to run on hybrid cloud nodes.
      tolerations:
        - key: "nodepool-type"
          operator: "Equal"
          value: "hybridcloud"
          effect: "NoSchedule"
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "200m"
              memory: "256Mi"

Solución 2: Forzar la programación en nodos de nube híbrida

Estas dos sub-soluciones garantizan que los pods se asignen en nodos de nube híbrida. Elija una según la precisión con la que necesite dirigirlos a un node pool.

Dirigir a un node pool específico

Cuándo utilizarla: Su carga de trabajo requiere un node pool de nube híbrida en particular; por ejemplo, uno con hardware específico, una topología de red dedicada o requisitos estrictos de residencia de datos. Utilice nodeSelector para fijar los pods a un solo node pool mediante su ID.

Configuración principal: Agregue tanto tolerations como nodeSelector en spec.template.spec:

spec:
  template:
    spec:
      # Core configuration 1: Lift the hybrid cloud scheduling restriction.
      tolerations:
        - key: "nodepool-type"
          operator: "Equal"
          value: "hybridcloud"
          effect: "NoSchedule"
      # Core configuration 2: Pin to a specific node pool by ID.
      nodeSelector:
        alibabacloud.com/nodepool-id: npxxxxxxxxxxxx
Obtenga el ID del node pool desde la página Node Management > Node Pools de su clúster.

Expand to view

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-to-nodepool
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      # Core configuration 1: Lift the hybrid cloud scheduling restriction.
      tolerations:
        - key: "nodepool-type"
          operator: "Equal"
          value: "hybridcloud"
          effect: "NoSchedule"
      # Core configuration 2: Pin to a specific node pool by ID.
      nodeSelector:
        alibabacloud.com/nodepool-id: npxxxxxxxxxxxx
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "200m"
              memory: "256Mi"

Dirigir a cualquier node pool de nube híbrida

Cuándo utilizarla: Su carga de trabajo debe ejecutarse en las instalaciones, pero puede hacerlo en cualquier node pool de nube híbrida. nodeAffinity selecciona todos los nodos con la etiqueta hybridcloud, por lo que los pods se distribuyen entre todos los node pools del IDC en lugar de fijarse a uno solo.

Configuración principal: Agregue tanto tolerations como affinity en spec.template.spec:

spec:
  template:
    spec:
      # Core configuration 1: Lift the hybrid cloud scheduling restriction.
      tolerations:
        - key: "nodepool-type"
          operator: "Equal"
          value: "hybridcloud"
          effect: "NoSchedule"
      # Core configuration 2: Require a hybrid cloud node by label.
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: alibabacloud.com/nodepool-type
                    operator: In
                    values:
                      - hybridcloud

Expand to view

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-to-hybrid-type
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      # Core configuration 1: Lift the hybrid cloud scheduling restriction.
      tolerations:
        - key: "nodepool-type"
          operator: "Equal"
          value: "hybridcloud"
          effect: "NoSchedule"
      # Core configuration 2: Require a hybrid cloud node by label.
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: alibabacloud.com/nodepool-type
                    operator: In
                    values:
                      - hybridcloud
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          ports:
            - containerPort: 80
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "200m"
              memory: "256Mi"

Solución 3: Programación basada en prioridades con ResourcePolicy

Cuándo utilizarla: Cuando tiene varios node pools y desea una expansión ordenada y una reducción en orden inverso. Por ejemplo, utilice un node pool de nube híbrida de menor costo como pool principal y un node pool de ECS en la nube como desbordamiento:

  • Expansión: Los pods se programan primero en el node pool de nube híbrida. Si los recursos son insuficientes, se desbordan al pool de ECS.

  • Reducción: Los pods del pool de ECS se detienen primero, lo que preserva la estabilidad de los recursos en el node pool de nube híbrida.

Esta solución requiere dos recursos: un ResourcePolicy y una carga de trabajo que lo referencie.

Configuración de ResourcePolicy: Defina el orden de prioridad de programación en la lista units y asocie la política con los pods objetivo mediante un selector.

apiVersion: scheduling.alibabacloud.com/v1alpha1
kind: ResourcePolicy
metadata:
  name: nginx-priority-policy
spec:
  # Match pods with this label.
  selector:
    app: nginx-priority
  # The scheduler tries pools in order. First match wins.
  units:
    # Priority 1: hybrid cloud node pool (lower cost, preferred)
    - resource: ecs
      nodeSelector:
        alibabacloud.com/nodepool-id: np-pool-a-xxxxxxxxxx
    # Priority 2: ECS node pool (overflow)
    - resource: ecs
      nodeSelector:
        alibabacloud.com/nodepool-id: np-pool-b-xxxxxxxxxx
Obtenga los ID de los node pools desde la página Node Management > Node Pools de su clúster.

Configuración de la carga de trabajo: Agregue la etiqueta correspondiente y la toleration de nube híbrida a la plantilla del pod.

spec:
  template:
    metadata:
      # This label connects the pod to the ResourcePolicy above.
      labels:
        app: nginx-priority
    spec:
      # Allow scheduling to the hybrid cloud node pool.
      tolerations:
        - key: "nodepool-type"
          operator: "Equal"
          value: "hybridcloud"
          effect: "NoSchedule"
  • ResourcePolicy:

    Expand to view

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: nginx-priority-policy
      namespace: default
    spec:
      # Match pods with this label.
      selector:
        app: nginx-priority
      # The scheduler tries pools in order. First match wins.
      units:
        # Priority 1: hybrid cloud node pool (lower cost, preferred)
        - resource: ecs
          nodeSelector:
            alibabacloud.com/nodepool-id: npaxxxxxxxxxx
        # Priority 2: ECS node pool (overflow)
        - resource: ecs
          nodeSelector:
            alibabacloud.com/nodepool-id: npbxxxxxxxxxx
  • Deployment:

    Expand to view

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-with-priority
      namespace: default
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx-priority
      template:
        metadata:
          # This label connects the pod to the ResourcePolicy above.
          labels:
            app: nginx-priority
        spec:
          # Allow scheduling to the hybrid cloud node pool.
          tolerations:
            - key: "nodepool-type"
              operator: "Equal"
              value: "hybridcloud"
              effect: "NoSchedule"
          containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
                - containerPort: 80
              resources:
                requests:
                  cpu: "100m"
                  memory: "128Mi"
                limits:
                  cpu: "200m"
                  memory: "256Mi"

Aplicar en producción

  • No elimine el taint predeterminado nodepool-type=hybridcloud:NoSchedule del node pool de nube híbrida. Este taint evita que los componentes del sistema se programen accidentalmente en nodos de nube híbrida.

  • No elimine ni modifique la etiqueta predeterminada alibabacloud.com/nodepool-type: hybridcloud en los nodos de nube híbrida. Modificar o eliminar esta etiqueta puede afectar el funcionamiento normal del node pool.