全部產品
Search
文件中心

Container Service for Kubernetes:將應用調度到混合雲節點池

更新時間:Mar 24, 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,以免影響節點池正常運行。