部署集是控制ECS執行個體分布的策略,該策略將ECS執行個體分散部署在不同的物理伺服器上,提升業務的高可用性和底層容災能力。通過為節點池指定部署集,能夠保證節點池彈出的ECS執行個體不會分佈於同一物理機上,並通過親和性配置,使您的應用對底層的節點拓撲進行感知,使其均勻地分布在不同節點上,保證應用的容災能力和高可用性。本文介紹如何通過Terraform為節點池指定部署集。
前提條件
已安裝Terraform。
說明請確認Terraform版本不低於v0.12.28,可通過terraform --version命令查看Terraform版本。
Cloud Shell預設安裝配置了Terraform和阿里雲帳號資訊,無需任何額外配置。
如果您不使用Cloud Shell,關於安裝Terraform的方式,請參見在本地安裝和配置Terraform。
啟動節點自動調整前,您需要開通Auto Scaling服務,並完成預設角色授權。具體操作,請參見開通Auto Scaling服務。
已建立部署集。具體操作,請參見建立部署集。
請確保部署集內ECS執行個體配額充足,預設為20台;所需機型庫存充足。具體資訊,請參見查看和提升資源配額。
配置阿里雲帳號資訊。
執行如下命令,建立環境變數,用於存放身份認證資訊。
Linux 環境
export ALICLOUD_ACCESS_KEY="************" #替換為阿里雲帳號的AK資訊。 export ALICLOUD_SECRET_KEY="************" #替換為阿里雲帳號的SK資訊。 export ALICLOUD_REGION="cn-beijing" #替換為您叢集所在的地區。
Windows 環境
set ALICLOUD_ACCESS_KEY="************" #替換為阿里雲帳號的AK資訊。 set ALICLOUD_SECRET_KEY="************" #替換為阿里雲帳號的SK資訊。 set ALICLOUD_REGION="cn-beijing" #替換為您叢集所在的地區。
背景資訊
在同一個可用性區域下,為了保證高可用性,您通常會選擇跨主機部署服務。但當一台物理機出現問題時,會影響到應用的所有副本。為瞭解決這個問題,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執行個體(節省停機模式)失敗,可能是因為地區內執行個體資產庫存不足,您可以等待一段時間後重試建立執行個體或重啟執行個體。
通過Terraform建立指定部署集的節點池
使用以下樣本內容,建立指定部署集的節點池。
provider "alicloud" { } resource "alicloud_cs_kubernetes_node_pool" "default" { name = "tf-deploymentset" cluster_id = "c51a1ae4fcd754d4f9bc3b1****" vswitch_ids = ["vsw-bp1kh6qfb83vt****","vsw-bp13d9ojhwiimya****","vsw-bp1eyw8wt9k1d1l****","vsw-bp1nftkf9sk3fz****"] #多可用性區域VSwitch,保證ESS彈出節點能夠均勻分布在不同可用性區域。 instance_types = ["ecs.c6.xlarge","ecs.c5.2xlarge","ecs.g5.2xlarge","ecs.i2g.2xlarge"] #可用機型。 system_disk_category = "cloud_ssd" system_disk_size = 120 # 指定部署集ID。 deployment_set_id = "ds-bp1e19mmbsv3jf64****" instance_charge_type = "PostPaid" security_group_ids = ["sg-bp1ewlqw7ajyaqaz****"] install_cloud_monitor = true image_type = "AliyunLinux3" image_id = "aliyun_3_x64_20G_alibase_20240528.vhd" password = "Hello1234" desired_size = 3 }
執行以下命令完成建立。
terraform apply
返回資訊如下,部署集指定成功
alicloud_cs_kubernetes_node_pool.default: Refreshing state... [id=c51a1ae4fcd754d4f9bc3b1****:np651662dfc3e4440d9979360b24b1****] alicloud_cs_managed_kubernetes.default: Refreshing state... [id=c51a1ae4fcd754d4f9bc3b1****] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place Terraform will perform the following actions: ............ alicloud_cs_kubernetes_node_pool.default: Still creating... [50s elapsed] alicloud_cs_kubernetes_node_pool.default: Still creating... [1m0s elapsed] alicloud_cs_kubernetes_node_pool.default: Creation complete after 1m1s [id=c51a1ae4fcd754d4f9bc3b1****:np651662dfc3e4440d9979360b24b1****] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
執行結果
建立成功後,您可以通過以下任意方式查看結果。
您可以在Container Service管理主控台的節點池頁面查看到建立的節點池。單擊操作列的編輯,可以查看到指定的部署集。
您可以在terraform.tfstate檔案中,查看到節點池資源套件含
deployment_set_id
欄位。"deployment_set_id": "ds-bp1e19mmbsv3jf64****"