部署集是控制ECS实例分布的策略,该策略将ECS实例分散部署在不同的物理服务器上,提升业务的高可用性和底层容灾能力。通过为节点池指定部署集,能够保证节点池弹出的ECS实例不会分布于同一物理机上,并通过亲和性配置,使您的应用对底层的节点拓扑进行感知,使其均匀地分布在不同节点上,保证应用的容灾能力和高可用性。本文介绍如何通过Terraform为节点池指定部署集。
背景信息
在同可用区下,为了保证高可用,您通常会选择跨主机部署服务,但是当一台物理机出问题时,会影响到应用的所有副本。为了解决这个问题,ECS提供了部署集功能。部署集内所有ECS实例会在指定地域内严格分散在不同的物理服务器上,满足服务相互隔离的应用架构,大幅降低服务不可用的几率。关于部署集的更多信息,请参见部署集概述。
使用限制
- 每个节点池仅支持绑定一个部署集,且不支持更换部署集。
- 目前部署集不支持手动添加或移除节点,您可以通过扩缩容节点池的操作,调整部署集中的节点数。具体操作,请参见调整期望节点数。
- 选择开启部署集功能后,不支持创建抢占式实例和专有宿主机。
- 选择开启部署集功能后,一个可用区内最多能创建20台ECS实例(该数值根据您使用云服务器ECS的情况而变化),一个阿里云地域下能创建的ECS实例数量为20×可用区数量(可用区数量由节点池选择的交换机决定)。目前部署集暂不支持配额申请,如有需求,请提交工单。
- 部署集支持的实例规格族信息如下:
- c7、g7、r7、c6、g6、r6、c5、g5、r5、c6e、g6e、r6e、c7se、g7se、r7se、g6se、r6se、c7t、g7t、r7t、c7a、g7a、r7a、c6a、g6a、r6a、g5ne、re6、re4、ic5
- hfc7、hfg7、hfr7、hfc6、hfg6、hfr6、hfc5、hfg5
- d2s、d2c、d1、d1ne、d1-c14d3、d1-c8d3
- i3、i3g、i2、i2g、i2ne、i2gne、i1
- se1ne、sn1ne、sn2ne、se1
- ebmg5、sccgn6、scch5、sccg5、scch5s、sccg5s
- s6、t6、xn4、mn4、n4
- gn6i
您也可以调用DescribeDeploymentSetSupportedInstanceTypeFamily获取部署集最新支持的实例规格族信息。
- 在部署集内创建ECS实例,或重启按量付费ECS实例(节省停机模式)时,供货紧缺依然会导致请求失败。请提交工单,确保配额充足,节点池节点能够正确弹出。
更多有关部署集的使用限制及配额,请参见使用限制。
通过Terraform为节点池指定部署集
- 使用以下示例内容,创建节点池并指定部署集。
- 在已有集群中,创建节点池并指定部署集的配置示例如下。
provider "alicloud" {
access_key = "*****"
secret_key = "*****"
region = "cn-hangzhou"
}
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" {
access_key = "*****"
secret_key = "*****"
region = "cn-hangzhou"
}
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