全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:将应用调度到混合云节点池

更新时间:Mar 23, 2026

混合云节点池支持将本地数据中心(IDC)的节点注册到ACK集群,实现云上云下资源的统一纳管与协同调度。本文介绍如何将应用调度到混合云节点池,以满足资源地理位置约束、数据本地化合规要求或特定硬件依赖等部署场景。

工作原理

为保障集群稳定性与资源隔离性,ACK在创建混合云节点池时,自动为其节点添加专用污点(Taint)和标签(Label):

  • 污点:nodepool-type=hybridcloud:NoSchedule——避免系统组件或通用工作负载调度至混合云环境。

  • 标签:alibabacloud.com/nodepool-type: hybridcloud—— 提供可被调度策略识别的节点类型标识。

如需将Pod调度到混合云节点,需解决以下问题:

能否调度

使用容忍tolerations解除调度限制

Pod必须声明对上述污点的容忍,以忽略该污点的调度限制,从而获得被调度至混合云节点的资格。

方案一场景,即允许Pod被调度到混合云节点,但不作强制。

如何调度

结合节点选择策略定位混合云节点

仅配置容忍并不保证Pod一定会被调度到混合云节点。如需将 Pod 定向部署到混合云节点上,还需结合使用节点选择器(nodeSelector)或节点亲和性(nodeAffinity),通过匹配节点标签来精确指定。

方案二场景,实现Pod指定调度至指定混合云节点池或所有混合云节点。

调度优先级

基于ResourcePolicy机制实现顺序扩容、逆序缩容。

针对多节点池间的优先级调度与逆序缩容需求(例如:扩容时优先使用成本更低的混合云节点池,缩容时优先释放云上ECS节点池资源),ACK提供ResourcePolicy机制。

方案三场景。

方案一:允许应用调度到混合云节点池

适用场景

适用于需要扩展集群整体资源容量,且对工作负载运行位置无严格地理或合规约束的场景。启用后,调度器将混合云节点池纳入候选范围,但Pod仍可能被调度至其他可用节点池。

核心配置

在工作负载的spec.template.spec中,添加对混合云污点的容忍tolerations

spec:
  template:
    spec:
      # 核心配置:添加对混合云节点污点的容忍
      tolerations:
      - key: "nodepool-type"
        operator: "Equal"
        value: "hybridcloud"
        effect: "NoSchedule"
      ...

YAML示例

展开查看

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:
      # 核心配置:添加对混合云节点污点的容忍
      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"

方案二:强制应用仅调度到混合云节点池

调度到指定的单个混合云节点池

适用场景

通过nodeSelector指定节点池ID,实现精确、定向调度。适用于需绑定特定硬件配置、网络拓扑或数据驻留要求的混合云节点池。

核心配置

spec.template.spec中,同时配置tolerationsnodeSelector

spec:
  template:
    spec:
      # 核心配置 1:添加容忍
      tolerations:
      - key: "nodepool-type"
        operator: "Equal"
        value: "hybridcloud"
        effect: "NoSchedule"
      # 核心配置 2:通过 nodeSelector 指定节点池 ID
      nodeSelector:
        alibabacloud.com/nodepool-id: npxxxxxxxxxxxx
      ...
节点池ID可从所在集群的节点管理 > 节点池页面获取。

YAML示例

展开查看

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:
      # 核心配置 1:添加容忍
      tolerations:
      - key: "nodepool-type"
        operator: "Equal"
        value: "hybridcloud"
        effect: "NoSchedule"
      # 核心配置 2:通过 nodeSelector 指定节点池 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"

调度到任意混合云节点池

适用场景

通过nodeAffinity匹配节点池类型,实现Pod指定调度至任意混合云节点池。相比nodeSelector,该方式更为灵活。

核心配置

spec.template.spec中,同时配置tolerationsaffinity

spec:
  template:
    spec:
      # 核心配置 1:添加容忍
      tolerations:
      - key: "nodepool-type"
        operator: "Equal"
        value: "hybridcloud"
        effect: "NoSchedule"
      # 核心配置 2:通过 nodeAffinity 指定节点类型
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: alibabacloud.com/nodepool-type
                operator: In
                values:
                - hybridcloud
      ...

YAML示例

展开查看

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:
      # 核心配置 1:添加容忍
      tolerations:
      - key: "nodepool-type"
        operator: "Equal"
        value: "hybridcloud"
        effect: "NoSchedule"
      # 核心配置 2:通过 nodeAffinity 指定节点类型
      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"

方案三:基于 ResourcePolicy 配置复杂的调度优先级

适用场景

适用于多节点池协同调度场景。例如,将成本较低的混合云节点池设为首选资源池,将弹性较强的云上ECS节点池设为备用资源池。

  • 扩容时:优先将Pod调度至混合云节点池,当其资源不足时,再调度至ECS节点池。

  • 缩容时:优先终止位于ECS节点池的Pod,保障混合云节点池的资源稳定性。

核心配置

此方案需协同配置两类资源:ResourcePolicy和工作负载。

  • ResourcePolicy核心配置

    创建ResourcePolicy资源,通过units列表定义优先级,并通过selector与目标应用关联。

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: nginx-priority-policy
    spec:
      # 通过标签选择器,将此策略应用到匹配的 Pod 上
      selector:
        app: nginx-priority
      # 定义资源调度优先级,调度器将按列表顺序尝试
      units:
        # 优先级 1:节点池 A
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id: np-pool-a-xxxxxxxxxx
        # 优先级 2:节点池 B
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id: np-pool-b-xxxxxxxxxx
    节点池ID可从所在集群的节点管理 > 节点池页面获取。
  • 工作负载核心配置

    在工作负载中,添加与ResourcePolicyselector匹配的标签,并配置对混合云节点的容忍。

    spec:
      template:
        metadata:
          # 核心配置 1:此标签与 ResourcePolicy 的 selector 匹配
          labels:
            app: nginx-priority
        spec:
          # 核心配置 2:确保 Pod 可以被调度到混合云节点池
          tolerations:
          - key: "nodepool-type"
            operator: "Equal"
            value: "hybridcloud"
            effect: "NoSchedule"
          ...

YAML示例

  • ResourcePolicy

    展开查看

    apiVersion: scheduling.alibabacloud.com/v1alpha1
    kind: ResourcePolicy
    metadata:
      name: nginx-priority-policy
      namespace: default
    spec:
      # 通过标签选择器,将此策略应用到匹配的 Pod 上
      selector:
        app: nginx-priority
      # 定义资源调度优先级,调度器将按列表顺序尝试
      units:
      # 优先级 1:节点池 A
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id: npaxxxxxxxxxx
      # 优先级 2:节点池 B
      - resource: ecs
        nodeSelector:
          alibabacloud.com/nodepool-id: npbxxxxxxxxxx
  • Deployment

    展开查看

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment-with-priority
      namespace: default
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx-priority
      template:
        metadata:
          # 核心配置 1:此标签与 ResourcePolicy 的 selector 匹配
          labels:
            app: nginx-priority
        spec:
          # 核心配置 2:确保 Pod 可以被调度到混合云节点池
          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"

生产环境使用建议

  • 为确保集群的稳定性和资源隔离,请勿删除混合云节点池的默认污点nodepool-type=hybridcloud:NoSchedule,以免部分系统组件被意外调度到混合云节点上。

  • 请勿删除或修改混合云节点的默认标签alibabacloud.com/nodepool-type: hybridcloud,以免影响节点池正常运行。