文档首页/ 云容器引擎 CCE/ 最佳实践/ Terraform/ 使用Terraform安装AutoScaler插件
更新时间:2026-08-20 GMT+08:00

使用Terraform安装AutoScaler插件

CCE集群弹性引擎插件(AutoScaler)是实现节点自动扩缩容的核心组件,配合节点池可以在业务流量上涨时自动扩容节点,在资源空闲时自动缩容节点。通过Terraform自动化部署插件,可以将插件安装纳入基础设施即代码的管理体系,实现多环境批量部署和版本统一管控。

本文以安装AutoScaler插件为例,介绍如何使用Terraform在CCE集群中自动化安装部署插件。

前提条件

操作步骤

步骤一:创建项目目录并初始化配置

  1. 创建插件管理目录(目录名可自定义)。
    mkdir terraform_cce_addon
    cd ./terraform_cce_addon
  2. 将已准备好的Provider配置文件复制到当前目录。init.tf已在“安装Terraform并配置华为云Provider”章节的terraform_hw_demo目录中创建。
    cp ../terraform_hw_demo/init.tf .

步骤二:创建配置文件

以下所有配置文件均在项目目录下创建:

  1. 查询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表示仅查询可用状态的集群。

  2. 查询项目信息。

    创建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

    局点名称。

  3. 获取插件模板。

    创建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控制台插件中心页面查询可用版本号。

  4. 配置插件参数。

    创建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变量的值,若未配置则自动从项目查询结果中获取。

  5. 创建插件安装资源。

    创建addon.tf文件,声明CCE插件安装资源。

    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

    插件的规格配置,从插件模板中获取。

  6. 配置资源参数。

    创建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

    节点所在可用区,请替换为实际局点的可用区。

  7. (可选)如需自定义endpoint,创建endpoints.tf。
    provider "huaweicloud" {
      region     = "cn-north-**"
      insecure  = true  # 跳过SSL证书验证
      endpoints = {
        cce = "https://cce.{region}.myhuaweicloud.com"
      }
    }

    将{region}替换为实际Region(如cn-north-7c)。

步骤三:初始化并应用Terraform配置

  1. 初始化环境。
    terraform init
  2. 查看执行计划,确认资源变更是否符合预期。
    terraform plan
  3. 计划确认无误后,创建资源。执行时Terraform会向用户确认,输入yes确认执行。
    terraform apply
  4. 查看已创建的资源。
    terraform show

步骤四:清理资源

此操作将卸载CCE集群中的AutoScaler插件,卸载后集群将失去节点自动扩缩容能力,请确认不再需要后再执行。

当不再需要通过Terraform创建的资源时,可以执行以下命令释放资源。

terraform destroy

执行时Terraform会向用户确认,输入yes确认执行。

相关文档