使用Terraform安装AutoScaler插件
CCE集群弹性引擎插件(AutoScaler)是实现节点自动扩缩容的核心组件,配合节点池可以在业务流量上涨时自动扩容节点,在资源空闲时自动缩容节点。通过Terraform自动化部署插件,可以将插件安装纳入基础设施即代码的管理体系,实现多环境批量部署和版本统一管控。
本文以安装AutoScaler插件为例,介绍如何使用Terraform在CCE集群中自动化安装部署插件。
前提条件
- 已准备一台可以连接公网的机器。
- 已获取华为云账号AK/SK,且账号具有创建并修改CCE集群的权限,详情请参见访问密钥。
- 已安装Terraform,详情请参见安装Terraform并配置华为云Provider。
- 已创建CCE集群。
操作步骤
步骤一:创建项目目录并初始化配置
- 创建插件管理目录(目录名可自定义)。
mkdir terraform_cce_addon cd ./terraform_cce_addon
- 将已准备好的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表示仅查询可用状态的集群。
- 查询项目信息。
创建data_project.tf文件,查询指定区域下的IAM项目信息,用于插件配置中的tenant_id参数。
variable "project_id" { description = "项目ID" type = string default = "" } variable "region_name" { description = "区域名称" type = string } # 获取指定region(region参数缺省时默认继承当前provider块中所指定的region)下符合条件的IAM项目信息,用于创建插件相关资源 data "huaweicloud_identity_projects" "test" { name = var.region_name }涉及参数说明如下表所示。
参数
说明
name
局点名称。
- 获取插件模板。
创建data_addon.tf文件,查询CCE插件模板信息,获取插件的默认配置参数。
variable "addon_template_name" { description = "CCE插件模板的名称" type = string default = "autoscaler" } variable "addon_version" { description = "CCE插件模板的版本" type = string } # 获取指定region(region参数缺省时默认继承当前provider块中所指定的region)下符合条件的CCE插件模板信息,用于创建插件相关资源 data "huaweicloud_cce_addon_template" "test" { cluster_id = data.huaweicloud_cce_cluster.cluster.id name = var.addon_template_name version = var.addon_version }涉及参数说明如下表所示。
参数
说明
cluster_id
CCE集群ID,从步骤1的查询结果中获取。
name
待安装的插件名称,默认为autoscaler。
version
待安装的插件版本,可在CCE控制台插件中心页面查询可用版本号。
- 配置插件参数。
创建addon_config.tf文件,解析插件模板的默认配置,并补充cluster_id和tenant_id字段。
# 本地变量,用于解析和合并插件模板的配置 locals { # 解析插件模板中的custom配置 original_custom = jsondecode(data.huaweicloud_cce_addon_template.test.spec).cluster.custom # 合并custom配置,添加cluster_id和tenant_id字段,保留其他字段 merged_custom = jsonencode({ # 与模板相比,需要在custom中添加的字段:cluster_id和tenant_id cluster_id = data.huaweicloud_cce_cluster.cluster.id tenant_id = var.project_id != "" ? var.project_id : try(data.huaweicloud_identity_projects.test.projects[0].id, "") # 其余custom字段的值全部保留 annotations = local.original_custom.annotations coresTotal = local.original_custom.coresTotal expander = local.original_custom.expander ignoreDaemonSetsUtilization = local.original_custom.ignoreDaemonSetsUtilization ignoreLocalVolumeNodeAffinity = local.original_custom.ignoreLocalVolumeNodeAffinity initialNodeGroupBackoffDuration = local.original_custom.initialNodeGroupBackoffDuration logLevel = local.original_custom.logLevel maxEmptyBulkDeleteFlag = local.original_custom.maxEmptyBulkDeleteFlag maxNodeGroupBackoffDuration = local.original_custom.maxNodeGroupBackoffDuration maxNodeGroupBinPackingDuration = local.original_custom.maxNodeGroupBinPackingDuration maxNodeProvisionTime = local.original_custom.maxNodeProvisionTime maxNodesTotal = local.original_custom.maxNodesTotal memoryTotal = local.original_custom.memoryTotal multiAZBalance = local.original_custom.multiAZBalance multiAZEnabled = local.original_custom.multiAZEnabled newEphemeralVolumesPodScaleUpDelay = local.original_custom.newEphemeralVolumesPodScaleUpDelay node_match_expressions = local.original_custom.node_match_expressions podDisruptionBudget = local.original_custom.podDisruptionBudget resetUnNeededWhenScaleUp = local.original_custom.resetUnNeededWhenScaleUp scaleDownDelayAfterAdd = local.original_custom.scaleDownDelayAfterAdd scaleDownDelayAfterDelete = local.original_custom.scaleDownDelayAfterDelete scaleDownDelayAfterFailure = local.original_custom.scaleDownDelayAfterFailure scaleDownEnabled = local.original_custom.scaleDownEnabled scaleDownUnneededTime = local.original_custom.scaleDownUnneededTime scaleDownUtilizationThreshold = local.original_custom.scaleDownUtilizationThreshold scaleUpCpuUtilizationThreshold = local.original_custom.scaleUpCpuUtilizationThreshold scaleUpMemUtilizationThreshold = local.original_custom.scaleUpMemUtilizationThreshold scaleUpUnscheduledPodEnabled = local.original_custom.scaleUpUnscheduledPodEnabled scaleUpUtilizationEnabled = local.original_custom.scaleUpUtilizationEnabled scanInterval = local.original_custom.scanInterval skipNodesWithCustomControllerPods = local.original_custom.skipNodesWithCustomControllerPods tolerations = local.original_custom.tolerations unremovableNodeRecheckTimeout = local.original_custom.unremovableNodeRecheckTimeout }) }涉及参数说明如下表所示。
参数
说明
original_custom
从插件模板中解析出的原始custom配置。
merged_custom
合并后的custom配置,在原始配置基础上补充了cluster_id和tenant_id。
tenant_id优先使用project_id变量的值,若未配置则自动从项目查询结果中获取。
- 创建插件安装资源。
resource "huaweicloud_cce_addon" "test" { cluster_id = data.huaweicloud_cce_cluster.cluster.id template_name = var.addon_template_name version = var.addon_version values { basic_json = jsonencode(jsondecode(data.huaweicloud_cce_addon_template.test.spec).parameters.custom) custom_json = local.merged_custom flavor_json = jsonencode(jsondecode(data.huaweicloud_cce_addon_template.test.spec).parameters.flavor1) } }涉及参数说明如下表所示。
参数
说明
cluster_id
待安装插件的CCE集群ID。
template_name
待安装的CCE插件名称。
version
待安装的CCE插件版本。
basic_json
插件的基础配置,从插件模板中获取。
custom_json
插件的自定义配置,即步骤4中合并后的配置。
flavor_json
插件的规格配置,从插件模板中获取。
- 配置资源参数。
创建terraform.tfvars文件,预设资源所需的入参。以下为示例配置,请根据实际业务需求修改。
cluster_name = "devops-turbo" addon_version = "1.25.200" region_name = "cn-north-4" availability_zone = "cn-north-7c" # 请替换为实际可用区
涉及参数说明如下表所示。
参数
说明
cluster_name
已创建的CCE集群名称。
addon_version
插件版本,可在CCE控制台插件中心页面查询可用版本号。
region_name
局点名称。
availability_zone
节点所在可用区,请替换为实际局点的可用区。
- (可选)如需自定义endpoint,创建endpoints.tf。
provider "huaweicloud" { region = "cn-north-**" insecure = true # 跳过SSL证书验证 endpoints = { cce = "https://cce.{region}.myhuaweicloud.com" } }将{region}替换为实际Region(如cn-north-7c)。
步骤三:初始化并应用Terraform配置
- 初始化环境。
terraform init
- 查看执行计划,确认资源变更是否符合预期。
terraform plan
- 计划确认无误后,创建资源。执行时Terraform会向用户确认,输入yes确认执行。
terraform apply
- 查看已创建的资源。
terraform show
步骤四:清理资源
此操作将卸载CCE集群中的AutoScaler插件,卸载后集群将失去节点自动扩缩容能力,请确认不再需要后再执行。
当不再需要通过Terraform创建的资源时,可以执行以下命令释放资源。
terraform destroy
执行时Terraform会向用户确认,输入yes确认执行。

相关文档
- 如需了解Terraform的安装和华为云Provider的配置,请参见安装Terraform并配置华为云Provider。
- 如需了解CCE集群弹性引擎插件的更多信息,请参见CCE集群弹性引擎。
- 如需通过Terraform创建CCE集群,请参见使用Terraform创建CCE集群。
- 如需通过Terraform开启节点池自动伸缩,请参见使用Terraform开启节点池自动伸缩。