全部產品
Search
文件中心

Container Service for Kubernetes:節點池部署集最佳實務

更新時間:Sep 16, 2026

部署集是控制ECS執行個體分布的策略,該策略將ECS執行個體分散部署在不同的物理伺服器上,提升業務的高可用性和底層容災能力。通過為節點池指定部署集,能夠保證節點池彈出的ECS執行個體不會分佈於同一物理機上,並通過親和性配置,使您的應用對底層的節點拓撲進行感知,使其均勻地分布在不同節點上,保證應用的容災能力和高可用性。

前提條件

已建立部署集。具體操作,請參見建立部署集。

背景資訊

在同一個可用性區域下,為了保證高可用性,您通常會選擇跨主機部署服務。但當一台物理機出現問題時,會影響到應用的所有副本。為瞭解決這個問題,ECS提供了部署集功能。部署集內的所有ECS執行個體會在指定地區內嚴格分散在不同的物理伺服器上,滿足服務相互隔離的應用架構,大幅降低服務停用幾率。關於部署集的更多資訊,請參見部署集。

使用限制

叢集中功能使用須知

  • 部署集僅支援ACK託管叢集和ACK專有叢集。

  • 部署集僅在建立節點池時支援指定,不支援為已有節點池開啟。每個節點池僅支援綁定一個部署集。

  • 部署集不支援手動添加或移除節點。您可以通過擴縮容節點池的操作,調整部署集中的節點數。具體操作,請參見建立和管理節點池。

  • 開啟部署集功能後,不支援建立搶佔式執行個體。

部署集配額與規格限制

  • 部署集配額限制:

    • 節點池部署集預設基於高可用策略實現。高可用策略下,在部署集內建立ECS執行個體時,一個可用性區域內最多能建立20台ECS執行個體,一個阿里雲地區下能建立的ECS執行個體數量為20*可用性區域數量。請確保部署集內ECS執行個體配額充足,且所需機型庫存充足。更多資訊,請參見部署集。

      一個部署集內能容納的執行個體數量不支援提升。但如果您需要提高當前賬戶可擁有的部署集最大數量,請前往配額平台申請。關於部署集使用限制及配額的更多資訊,請參見部署集使用限制。

    • 在部署集內建立ECS執行個體失敗,或重啟隨用隨付ECS執行個體(節省停機模式)失敗,可能是因為地區內執行個體資產庫存不足,您可以等待一段時間後重試建立執行個體或重啟執行個體。

  • 執行個體規格類型系列限制:大部分6代及以上執行個體支援高可用、部署集組高可用及網路低時延策略部署集。

    不同部署策略僅支援建立特定的執行個體規格類型系列

    具體支援的規格類型系列,以DescribeDeploymentSetSupportedInstanceTypeFamily介面返回結果為準。

    部署策略

    支援的執行個體規格類型系列

    高可用策略和部署集組高可用策略

    • g9a、g9ae、g9i、g8a、g8i、g8ine、g8ise、g8y、g7、g7a、g7h、g7ne、g7nex、g7se、g7t、g6、g6a、g6e、g6h、g5、g5ne

    • c9a、c9ae、c9i、c8a、c8i、c8ine、c8y、c7、c7a、c7nex、c7se、c7t、c6、c6a、c6e、c5

    • r9a、r9ae、r9i、r8a、r8i、r8y、r7、r7a、r7se、r7t、r6、r6a、r6e、r5

    • hfc9i、hfg9i、hfr9i、hfc8i、hfg8i、hfr8i、hfc7、hfg7、hfr7、hfc6、hfg6、hfr6、hfc5、hfg5

    • ebmc9i、ebmg9a、ebmg9i、ebmr9i、ebmc8a、ebmc8i、ebmc8y、ebmg8a、ebmg8i、ebmg8y、ebmr8a、ebmr8y、ebmc7、ebmc7a、ebmg7、ebmg7a、ebmg7se、ebmhfc7、ebmhfg7、ebmhfr7、ebmr7、ebmr7a、ebmg5

    • i5、i5g、i5ge、ic5、i4、i4g、i4r、i3、i3g、i2、i2g、i2gne、i2ne

    • gn6i

    • d3c、d3s、d2c、d2s、d1ne

    • re6、re6p、s6、t6、e4、mn4、n4、re4、xn4、sn2ne、u2a、u2i、se1、se1ne、sn1ne、u1、e

    網路低時延策略

    • g9a、g9ae、g9i、g8a、g8ae、g8i、g8ise、g8y、g7、g5ne

    • c9a、c9ae、c9i、c8a、c8ae、c8i、c8ine、c8y、c7、c7nex

    • r9a、r9ae、r9i、r8a、r8ae、r8i、r8y、r7

    • hfc9i、hfg9i、hfr9i、hfc8i、hfg8i、hfr8i

    • ebmc9i、ebmg9a、ebmg9i、ebmr9i、ebmc8a、ebmc8i、ebmc8y、ebmg8a、ebmg8i、ebmg8y、ebmgn8v、ebmr8a、ebmr8y、ebmc7、ebmc7a、ebmg7、ebmg7a、ebmg7se、ebmgn7ex、ebmhfc7、ebmhfg7、ebmhfr7、ebmr7、ebmr7a

    • i5、i5g、i5ge、i4

    • gn8v

    • hpc8ae、hpc8i、hpc7ip、hpc6id、u2a、u2i

通過控制台為節點池指定部署集

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表。

  2. 在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池。

  3. 在節點池頁面,單擊建立節點池,然後在建立節點池對話方塊,配置參數,選擇部署集,然後單擊確認配置。

    有關節點池配置項的詳細說明,請參見建立和管理節點池。選擇部署集後,節點池內最大節點數會受限,請謹慎選擇。部署集預設支援節點上限為 20 × 可用性區域數量,請確保部署集內配額充足,避免節點彈出失敗。

使用案例

在同一個節點池中,同一個工作負載的Pod之間反親和,一個節點只能調度一個Pod

本樣本介紹如何將Deployment中的三個Pod副本調度到三個不同節點上,操作步驟如下。

  1. 建立節點池包含三個節點,並為節點池指定部署集ID。具體操作,請參見通過控制台為節點池指定部署集。

    建立節點池完成後,在節點池頁面,單擊目標節點池,然後在節點管理頁簽,可以查看到成功建立的三個節點。建立完成後,在叢集節點管理頁簽可確認三個節點均處於就緒狀態,且分布在不同可用性區域(可用性區域I、可用性區域J),符合部署集的分散策略。

    登入ECS控制台,在左側導覽列選擇部署與彈性 > 部署集,在部署集頁面,可以查看到節點池中的三個節點均屬於所選的部署集。在部署集詳情頁的執行個體列表中,可以看到三個執行個體分布在可用性區域 I 和可用性區域 J,狀態均為運行中。

  2. 使用以下樣本內容,配置應用YAML。

    通過反親和性配置三個應用Pod,將不同的Pod調度到節點池不同節點上。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:  # 設定調度策略。
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - nginx
                topologyKey: kubernetes.io/hostname
          nodeSelector:
              alibabacloud.com/nodepool-id: <nodepool-id>  # 指定節點池ID。
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              limits:
                cpu: 1
              requests:
                cpu: 1

    執行結果

    在無狀態頁面,單擊目標Deployment,在容器組頁簽,可以看到三個不同的Pod調度到節點池不同節點上。三個 nginx Pod 均已成功建立並處於 Running 狀態,分別被調度到不同節點(cn-hangzhou.10.16.0.6、cn-hangzhou.10.240.56.81、cn-hangzhou.10.240.56.82),驗證了反親和性調度策略生效。

在同一個節點池中,同一個工作負載的Pod之間按照可用性區域和節點均勻調度打散

  1. 建立節點池包含四個節點,為節點池指定部署集ID,並選擇多可用性區域的VSwitch。具體操作,請參見通過控制台為節點池指定部署集。

    建立完成後,在節點池頁面,單擊目標節點池,然後在節點管理頁簽可以查看到四個節點,並選擇了四個可用性區域。根據ESS的均勻分布策略,彈出的ECS執行個體將分布在不同的四個可用性區域,且均加入了部署集。在節點管理頁簽下,可查看節點分別分布在可用性區域K、H、I、J,狀態均為就緒,規格為 ecs.g5ne.xlarge(4 vCPU 16 GiB,隨用隨付)。

    登入ECS控制台,在左側導覽列選擇部署與彈性 > 部署集,在部署集頁面,可以查看到節點池中的四個節點均屬於所選的部署集。

  2. 使用以下樣本內容,配置應用YAML。

    通過Pod拓撲分布約束,將同一個應用的Pod之間按照可用性區域和節點均勻調度打散。更多資訊,請參見Pod 拓撲分布約束。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          name: nginx
          labels:
            app: nginx
        spec:
          topologySpreadConstraints:
            - maxSkew: 1
              topologyKey: kubernetes.io/hostname
              whenUnsatisfiable: DoNotSchedule
              labelSelector:
                matchLabels:
                  app: nginx
            - maxSkew: 1
              topologyKey: topology.kubernetes.io/zone
              whenUnsatisfiable: DoNotSchedule
              labelSelector:
                matchLabels:
                  app: nginx
          nodeSelector:
            alibabacloud.com/nodepool-id: <nodepool-id>  #指定節點池ID。
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              limits:
                cpu: 1
              requests:
                cpu: 1

    執行結果

    在無狀態頁面,單擊目標Deployment,在容器組頁簽,可以看到同一個應用的Pod之間按照可用性區域和節點已均勻調度打散。部署完成後,在容器組頁簽下,4個nginx Pod均處於Running狀態,重啟次數為0,分布在不同節點上,說明Pod拓撲分布約束配置已生效。

相關文檔