使用Terraform开启节点池自动伸缩
在业务运行中,流量上涨可能导致集群计算资源紧张,手动扩容节点响应慢且容易遗漏。CCE具备集群节点自动扩缩容能力,结合节点池可以实现节点的自动扩缩容,在资源不足时自动扩容节点,在资源空闲时自动缩容节点,提高资源利用率并降低运维成本。
本文介绍如何通过Terraform在CCE集群中创建节点池并开启自动扩缩容能力,同时配置扩展伸缩组以支持多规格节点弹性伸缩,提高扩容成功率。
前提条件
- 已准备一台可以连接公网的机器。
- 已获取华为云账号AK/SK,且账号具有创建并修改CCE集群的权限,详情请参见访问密钥。
- 已安装Terraform,详情请参见安装Terraform并配置华为云Provider。
- 已创建CCE集群。
操作步骤
步骤一:创建项目目录并初始化配置
- 创建弹性伸缩管理目录(目录名可自定义)。
mkdir terraform_cce_autoscale cd ./terraform_cce_autoscale
- 将已准备好的Provider配置文件复制到当前目录。init.tf已在“安装Terraform并配置华为云Provider”章节的terraform_hw_demo目录中创建。
cp ../terraform_hw_demo/init.tf .
步骤二:创建配置文件
以下所有配置文件均在项目目录下创建:
- 查询CCE集群信息。
创建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表示仅查询可用状态的集群。
- 创建节点池并开启自动扩缩容。
创建node_pool_with_scale.tf文件,创建CCE节点池并开启自动扩缩容,同时配置扩展伸缩组以支持多规格节点弹性伸缩。
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 "scale_down_cooldown_time" { description = "缩容冷却时间,单位分钟" type = number default = 10 } variable "node_pool_priority" { description = "节点池优先级" type = number default = 1 } variable "root_volume_type" { description = "系统盘类型" type = string default = "SSD" } variable "root_volume_size" { description = "系统盘大小,单位GB" type = number default = 50 } variable "data_volume_type" { description = "数据盘类型" type = string default = "SSD" } variable "data_volume_size" { description = "数据盘大小,单位GB" 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 scale_enable = true scale_down_cooldown_time = var.scale_down_cooldown_time priority = var.node_pool_priority 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 } extension_scale_groups { metadata { name = "group1" } spec { flavor = "c9.xlarge.2" az = var.availability_zone autoscaling { extension_priority = 1 enable = true } } } extension_scale_groups { metadata { name = "group2" } spec { flavor = "c9.2xlarge.2" az = var.availability_zone autoscaling { extension_priority = 1 enable = true } } } }涉及参数说明如下表所示。
参数
说明
cluster_id
CCE集群ID,从步骤1的查询结果中获取。
name
节点池名称。
os
节点操作系统,默认为Huawei Cloud EulerOS 2.0。
initial_node_count
节点池初始节点数量,默认为2。
flavor_id
节点规格,示例为c9.large.2。
availability_zone
节点所在可用区,请替换为实际局点的可用区。
password
节点登录密码。
scale_enable
是否开启自动扩缩容,true表示开启。
scale_down_cooldown_time
缩容冷却时间,单位分钟,默认10分钟。
priority
节点池优先级,数值越小优先级越高。
type
节点类型,vm表示虚拟机。
root_volume.size
系统盘大小,单位GB。
root_volume.volumetype
系统盘类型。取值:SSD、GPSSD、ESSD等。
data_volumes.size
数据盘大小,单位GB。
data_volumes.volumetype
数据盘类型。
extension_scale_groups
扩展伸缩组,支持配置多规格节点。
- flavor_id和availability_zone为示例值,请根据实际局点和业务需求替换。创建节点将产生ECS费用,请根据业务需求选择合适的节点规格。
- 扩展伸缩组(extension_scale_groups):支持在同一节点池中配置多种规格的节点,当某一规格资源不足时自动使用下一规格创建节点,提高扩容成功率。示例中配置了3种规格:默认规格c9.large.2、扩展规格c9.xlarge.2和c9.2xlarge.2。
- 配置资源参数。
创建terraform.tfvars文件,预设资源所需的入参。以下为示例配置,请根据实际业务需求修改。
cluster_name = "cluster-xxx" node_pool_name = "tf-node-pool" node_pool_password = "*******" availability_zone = "cn-north-7c" # 请替换为实际可用区
涉及参数说明如下表所示。
参数
说明
cluster_name
已创建的CCE集群名称。
node_pool_name
节点池名称。
node_pool_password
节点登录密码,请设置为符合复杂度要求的密码。
availability_zone
节点所在可用区,请替换为实际局点的可用区。
- (可选)如需自定义endpoint,创建endpoints.tf。
provider "huaweicloud" { insecure = true # 跳过SSL证书验证 endpoints = { cce = "https://cce.{region}.myhuaweicloud.com" } }将{region}替换为实际Region(如cn-north-7c)。
步骤三:初始化并应用Terraform配置
- 初始化环境,下载所需的Provider插件。
terraform init
- 查看执行计划,确认资源变更是否符合预期。
terraform plan
- 计划确认无误后,创建资源。执行时Terraform会向用户确认,输入yes确认执行。
terraform apply
- 查看已创建的资源。
terraform show
步骤四:清理资源
此操作将永久删除通过Terraform创建的节点池和节点,请确认资源中无重要业务数据后再执行。清理节点池前需先释放节点池中的节点。
当不再需要通过Terraform创建的资源时,可以执行以下命令释放资源。
terraform destroy
执行时Terraform会向用户确认,输入yes确认执行。

相关文档
- 如需了解Terraform的安装和华为云Provider的配置,请参见安装Terraform并配置华为云Provider。
- 如需了解CCE节点池自动伸缩的更多信息,请参见 节点伸缩原理。
- 如需通过Terraform安装AutoScaler插件,请参见使用Terraform安装AutoScaler插件。
- 如需通过Terraform创建节点池并加入服务器组,请参见使用Terraform创建节点池并加入服务器组。