部署集是控制ECS執行個體分布的策略,該策略將ECS執行個體分散部署在不同的物理伺服器上,提升業務的高可用性和底層容災能力。通過為節點池指定部署集,能夠保證節點池彈出的ECS執行個體不會分佈於同一物理機上,並通過親和性配置,使您的應用對底層的節點拓撲進行感知,使其均勻地分布在不同節點上,保證應用的容災能力和高可用性。
前提條件
背景資訊
在同一個可用性區域下,為了保證高可用性,您通常會選擇跨主機部署服務。但當一台物理機出現問題時,會影響到應用的所有副本。為瞭解決這個問題,ECS提供了部署集功能。部署集內的所有ECS執行個體會在指定地區內嚴格分散在不同的物理伺服器上,滿足服務相互隔離的應用架構,大幅降低服務停用幾率。關於部署集的更多資訊,請參見部署集。
使用限制
叢集中功能使用須知
部署集僅支援ACK專有叢集和ACK託管叢集。
部署集僅在建立節點池時支援指定,不支援為已有節點池開啟。每個節點池僅支援綁定一個部署集,且不支援更換。
部署集不支援手動添加或移除節點。您可以通過擴縮容節點池的操作,調整部署集中的節點數。具體操作,請參見建立節點池。
開啟部署集功能後,不支援建立搶佔式執行個體。
部署集配額與規格限制
節點池部署集預設基於高可用策略實現。高可用策略下,在部署集內建立ECS執行個體時,一個可用性區域內最多能建立20台ECS執行個體,一個阿里雲地區下能建立的ECS執行個體數量為
20*可用性區域數量
。更多資訊,請參見部署集。一個部署集內能容納的執行個體數量不支援提升。但如果您需要提高當前賬戶可擁有的部署集最大數量,請前往配額平台申請。關於部署集使用限制及配額的更多資訊,請參見部署集使用限制。
支援的執行個體規格類型系列限制:
不同部署策略僅支援建立特定的執行個體規格類型系列,具體資訊如下。
說明您也可以調DescribeDeploymentSetSupportedInstanceTypeFamily指定部署集策略來擷取各部署集策略支援的執行個體規格類型系列。
部署策略
支援的執行個體規格類型系列
高可用策略和部署集組高可用策略
g8a、g8i、g8y、g7se、g7a、g7、g7h、g7t、g7ne、g7nex、g6、g6e、g6a、g5、g5ne、sn2ne、sn2、sn1
c8a、c8i、c8y、c7se、c7、c7t、c7nex、c7a、c6、c6a、c6e、c5、ic5、sn1ne
r8a、r8i、r8y、r7、r7se、r7t、r7a、r6、r6e、r6a、re6、re6p、r5、re4、se1ne、se1
hfc8i、hfg8i、hfr8i、hfc7、hfg7、hfr7、hfc6、hfg6、hfr6、hfc5、hfg5
d3c、d2s、d2c、d1、d1ne、d1-c14d3、d1-c8d3
i3g、i3、i2、i2g、i2ne、i2gne、i1
ebmg5、ebmc7、ebmg7、ebmr7、sccgn6、scch5、scch5s、sccg5、sccg5s
e、t6、xn4、mn4、n4、e4、n2、n1、
gn6i
網路低時延策略
g8a、g8i、g8ae、g8y
c8a、c8i、c8ae、c8y
r8a、r8i、r8ae、r8y
ebmc7、ebmg7、ebmr7
在部署集內建立ECS執行個體失敗,或重啟隨用隨付ECS執行個體(節省停機模式)失敗,可能是因為地區內執行個體資產庫存不足,您可以等待一段時間後重試建立執行個體或重啟執行個體。
通過控制台為節點池指定部署集
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在節點池頁面右上方,單擊建立節點池,然後在建立節點池對話方塊,配置參數,選擇部署集,然後單擊確認配置。
有關節點池配置項的詳細說明,請參見建立節點池。
使用案例
服務在同一個節點池中,同一個應用的Pod之間反親和,一個節點只能調度一個Pod
本樣本介紹如何將Deployment中的三個Pod副本調度到三個不同節點上,操作步驟如下。
建立節點池包含三個節點,並為節點池指定部署集ID。具體操作,請參見通過控制台為節點池指定部署集。
建立節點池完成後,在節點池頁面,單擊目標節點,在節點管理頁簽,可以查看到成功建立的三個節點。
登入ECS控制台,在左側導覽列選擇 ,在部署集頁面,可以查看到節點池中的三個節點均屬於所選的部署集。
使用以下樣本內容,配置應用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: nginx resources: limits: cpu: 1 requests: cpu: 1
執行結果
在無狀態頁面,單擊目標Deployment,在容器組頁簽,可以看到三個不同的Pod調度到節點池不同節點上。
服務在同一個節點池中,同一個應用的Pod之間按照可用性區域和節點均勻調度打散
建立節點池包含四個節點,為節點池指定部署集ID,並選擇多可用性區域的VSwitch。具體操作,請參見通過控制台為節點池指定部署集。
建立完成後,在節點頁面,可以查看到四個節點,並選擇了四個可用性區域。根據ESS的均勻分布策略,彈出的ECS執行個體將分布在不同的四個可用性區域,且均加入了部署集。
登入ECS控制台,在左側導覽列選擇 ,在部署集頁面,可以查看到節點池中的四個節點均屬於所選的部署集。
使用以下樣本內容,配置應用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: nginx resources: limits: cpu: 1 requests: cpu: 1
執行結果
在無狀態頁面,單擊目標Deployment,在容器組頁簽,可以看到同一個應用的Pod之間按照可用性區域和節點已均勻調度打散。
相關文檔
您也可以使用Terraform為節點池指定部署集。
關於更多叢集高可用架構的推薦配置,請參見叢集高可用架構推薦配置。