部署集是控制ECS執行個體分布的策略,該策略將ECS執行個體分散部署在不同的物理伺服器上,提升業務的高可用性和底層容災能力。通過為節點池指定部署集,能夠保證節點池彈出的ECS執行個體不會分佈於同一物理機上,並通過親和性配置,使您的應用對底層的節點拓撲進行感知,使其均勻地分布在不同節點上,保證應用的容災能力和高可用性。本文介紹如何通過Terraform為節點池指定部署集。
前提條件
已安裝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託管叢集。
部署集僅在建立節點池時支援指定。
每個節點池僅支援綁定一個部署集,且不支援更換部署集。
目前部署集不支援手動添加或移除節點。您可以通過擴縮容節點池的操作,調整部署集中的節點數。具體操作,請參見建立節點池。
選擇開啟部署集功能後,不支援建立搶佔式執行個體和Dedicated Host。
選擇開啟部署集功能後,一個可用性區域內最多能建立20台ECS執行個體(該數值根據您使用Elastic Compute Service的情況而變化),一個阿里雲地區下能建立的ECS執行個體數量為20×可用性區域數量(可用性區域數量由節點池選擇的交換器決定)。目前部署集暫不支援配額申請,如有需求,請前往配額平台申請。
部署集支援的執行個體規格類型系列資訊:
說明部分規格類型系列只支援特定的部署集策略,您可以調用DescribeDeploymentSetSupportedInstanceTypeFamily擷取各種部署集策略支援的執行個體規格類型系列資訊。
部署策略
支援的執行個體規格類型系列
高可用策略和部署集組高可用策略
g8i、g8y、g7se、g7a、g7、g7t、g7ne、g7nex、g6、g6e、g6a、g5、g5ne、sn2ne、sn2、sn1
c8i、c8y、c7se、c7、c7t、c7nex、c7a、c6、c6a、c6e、c5、ic5、sn1ne
r8y、r7、r7se、r7t、r7a、r6、r6e、r6a、re6、re6p、r5、re4、se1ne、se1
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" "test" { 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_id = "sg-bp1ewlqw7ajyaqaz****" install_cloud_monitor = true platform = "AliyunLinux" image_id = "aliyun_2_1903_x64_20G_alibase_20210726.vhd" password = "Hello1234" node_count = 3 }
如果未建立叢集,建立節點池的配置樣本如下。需要先建立叢集,然後才能建立節點池。
provider "alicloud" { } variable "name" { default = "tf-test" } data "alicloud_zones" default { available_resource_creation = "VSwitch" } data "alicloud_instance_types" "default" { availability_zone = data.alicloud_zones.default.zones.0.id cpu_core_count = 2 memory_size = 4 kubernetes_node_role = "Worker" } resource "alicloud_vpc" "default" { name = var.name cidr_block = "10.1.0.0/21" } resource "alicloud_vswitch" "default" { name = var.name vpc_id = alicloud_vpc.default.id cidr_block = "10.1.1.0/24" availability_zone = "data.alicloud_zones.default.zones.0.id } resource "alicloud_key_pair" "default" { key_name = var.name } # 建立託管版叢集。 resource "alicloud_cs_managed_kubernetes" "default" { name = var.name count = 1 cluster_spec = "ack.pro.small" is_enterprise_security_group = true worker_number = 2 password = "Hello1234" pod_cidr = "172.20.0.0/16" service_cidr = "172.21.0.0/20" worker_vswitch_ids = [alicloud_vswitch.default.id] worker_instance_types = [data.alicloud_instance_types.default.instance_types.0.id] } # 為叢集建立一個開啟部署集功能的節點池。 resource "alicloud_cs_kubernetes_node_pool" "test" { 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_id = "sg-bp1ewlqw7ajyaqaz****" install_cloud_monitor = true platform = "AliyunLinux" image_id = "aliyun_2_1903_x64_20G_alibase_20210726.vhd" password = "Hello1234" node_count = 3 }
執行以下命令完成建立。
terraform apply -target=alicloud_cs_kubernetes_node_pool.test
執行結果
建立成功後,您可以通過以下任意方式查看結果。
您可以在Container Service管理主控台的節點池頁面查看到建立的節點池。單擊操作列的編輯,可以查看到指定的部署集。
您可以在terraform.tfstate檔案中,查看到節點池資源套件含
deployment_set_id
欄位。"deployment_set_id": "ds-bp1e19mmbsv3jf64****"