使用Terraform创建节点池并加入服务器组
云服务器组通过反亲和策略将同一组内的云服务器调度到不同的物理机上,避免单点故障导致多台服务器同时不可用,从而提高业务可用性。CCE集群中的节点实际就是云服务器,将同一节点池下的节点加入同一个云服务器组,可以实现节点级别的容灾,增强集群稳定性。
本文介绍如何通过Terraform在CCE集群中创建节点池并开启云服务器组能力,使同一节点池下的节点自动加入同一云服务器组,提升集群的容灾能力。
前提条件
- 已准备一台可以连接公网的机器。
- 已获取华为云账号AK/SK,且账号具有创建并修改CCE集群的权限,详情请参见访问密钥。
- 已安装Terraform,详情请参见安装Terraform并配置华为云Provider。
- 已创建CCE集群。
操作步骤
步骤一:创建项目目录并初始化配置
- 创建节点池管理目录(目录名可自定义)。
mkdir terraform_cce_nodepool cd ./terraform_cce_nodepool
- 将已准备好的Provider配置文件复制到当前目录。init.tf已在“安装Terraform并配置华为云Provider”章节的terraform_hw_demo目录中创建。
cp ../terraform_hw_demo/init.tf .
步骤二:创建配置文件
以下所有配置文件均在项目目录下创建。
- 查询CCE集群ID。
创建data_cce_cluster.tf文件,通过集群名称查询集群ID,用于后续创建节点池时指定所属集群。
variable "cluster_name" { description = "CCE集群名称" type = string } data "huaweicloud_cce_cluster" "cluster" { name = var.cluster_name status = "Available" }涉及参数说明如下表所示。
参数
说明
name
CCE集群名称,需与已创建的集群名称一致。
status
集群状态,Available表示仅查询可用状态的集群。
- 创建云服务器组。
创建server_group.tf文件,创建云服务器组并配置反亲和策略,使组内的云服务器调度到不同物理机。
variable "ecs_group_name" { description = "云服务器组名称" type = string } variable "ecs_group_policies" { description = "云服务器组策略" type = list(string) default = ["anti-affinity"] } resource "huaweicloud_compute_servergroup" "test-sg" { name = var.ecs_group_name policies = var.ecs_group_policies }涉及参数说明如下表所示。
参数
说明
name
云服务器组名称。
policies
服务器组策略。取值:anti-affinity(反亲和,组内云服务器调度到不同物理机)、affinity(亲和,组内云服务器调度到同一物理机)。
- 创建节点池并加入服务器组。
创建node_pool_with_sg.tf文件,创建CCE节点池并关联步骤2中创建的云服务器组,同时开启自动扩缩容。
variable "node_pool_name" { description = "节点池的名称" type = string } variable "node_pool_os_type" { description = "节点池的操作系统" type = string default = "Huawei Cloud EulerOS 2.0" } variable "node_pool_password" { description = "节点池中节点的登录密码" type = string } variable "node_pool_initial_node_count" { description = "节点池的初始节点数量" type = number default = 2 } variable "availability_zone" { description = "节点使用的可用区" type = string default = "cn-north-4a" } variable "root_volume_type" { description = "根卷的类型" type = string default = "SSD" } variable "root_volume_size" { description = "根卷的大小" type = number default = 50 } variable "data_volume_type" { description = "数据盘的类型" type = string default = "SSD" } variable "data_volume_size" { description = "数据盘的大小" type = number default = 100 } resource "huaweicloud_cce_node_pool" "node_pool" { cluster_id = data.huaweicloud_cce_cluster.cluster.id name = var.node_pool_name os = var.node_pool_os_type initial_node_count = var.node_pool_initial_node_count flavor_id = "c9.large.2" availability_zone = var.availability_zone password = var.node_pool_password ecs_group_id = huaweicloud_compute_servergroup.test-sg.id scall_enable = true scale_down_cooldown_time = 100 priority = 1 type = "vm" root_volume { size = var.root_volume_size volumetype = var.root_volume_type } data_volumes { size = var.data_volume_size volumetype = var.data_volume_type } }涉及参数说明如下表所示。具体值请根据实际局点和业务需求替换。
参数
说明
cluster_id
CCE集群ID,从步骤1的查询结果中获取。
name
节点池名称。
os
节点操作系统,默认为Huawei Cloud EulerOS 2.0。
initial_node_count
节点池初始节点数量,默认为2。
flavor_id
节点规格,示例为c9.large.2。
availability_zone
节点所在可用区,请替换为实际局点的可用区。
password
节点登录密码。
ecs_group_id
云服务器组ID,即步骤2中创建的云服务器组ID。
scale_enable
是否开启自动扩缩容,true表示开启。
scale_down_cooldown_time
缩容冷却时间,单位秒。
priority
节点池优先级,数值越小优先级越高。
type
节点类型,vm表示虚拟机。
root_volume.size
系统盘大小,单位GB。
root_volume.volumetype
系统盘类型。取值:SSD、GPSSD、ESSD等。
data_volumes.size
数据盘大小,单位GB。
data_volumes.volumetype
数据盘类型。
- 配置资源参数。
创建terraform.tfvars文件,预设资源所需的入参。以下为示例配置,请根据实际业务需求修改。
cluster_name = "cluster-xxx" ecs_group_name = "ecs-group-xxx" node_pool_name = "tf-node-pool" node_pool_password = "*******" availability_zone = "cn-north-7c" # 请替换为实际可用区
涉及参数说明如下表所示。
参数
说明
cluster_name
已创建的CCE集群名称。
ecs_group_name
云服务器组名称,用于创建反亲和服务器组。
node_pool_name
节点池名称。
node_pool_password
节点登录密码,请设置为符合复杂度要求的密码。
availability_zone
节点所在可用区,请替换为实际局点的可用区。
- (可选)如需自定义endpoint,创建endpoints.tf。
provider "huaweicloud" { insecure = true # 跳过SSL证书验证 endpoints = { ecs = "https://ecs.{region}.myhuaweicloud.com" cce = "https://cce.{region}.myhuaweicloud.com" } }将{region}替换为实际Region(如cn-north-7c)。
步骤三:初始化并应用Terraform配置
- 初始化环境。
terraform init
- 查看执行计划,确认资源变更是否符合预期。
terraform plan
- 计划确认无误后,创建资源。执行时Terraform会向用户确认,输入yes确认执行。
terraform apply

- 查看已创建的资源。
terraform show
步骤四:清理资源
此操作将永久删除通过Terraform创建的节点池、节点和云服务器组,请确认资源中无重要业务数据后再执行。清理节点池前需先释放节点池中的节点。
当不再需要通过Terraform创建的资源时,可以执行以下命令释放资源。
terraform destroy
执行时Terraform会向用户确认,输入yes确认执行。

相关文档
- 如需了解云服务器组的更多信息,请参见云服务器组。
- 如需了解CCE节点池的更多信息,请参见节点池概述。
- 如需了解CCE节点规格,请参见节点规格说明。
- 如需通过Terraform开启节点池自动伸缩,请参见使用Terraform开启节点池自动伸缩。