文档首页/ 云容器引擎 CCE/ 最佳实践/ Terraform/ 使用Terraform开启节点池自动伸缩
更新时间:2026-08-20 GMT+08:00

使用Terraform开启节点池自动伸缩

在业务运行中,流量上涨可能导致集群计算资源紧张,手动扩容节点响应慢且容易遗漏。CCE具备集群节点自动扩缩容能力,结合节点池可以实现节点的自动扩缩容,在资源不足时自动扩容节点,在资源空闲时自动缩容节点,提高资源利用率并降低运维成本。

本文介绍如何通过Terraform在CCE集群中创建节点池并开启自动扩缩容能力,同时配置扩展伸缩组以支持多规格节点弹性伸缩,提高扩容成功率。

前提条件

操作步骤

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

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

步骤二:创建配置文件

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

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

  2. 创建节点池并开启自动扩缩容。

    创建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。
  3. 配置资源参数。

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

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

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

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

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

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

步骤四:清理资源

此操作将永久删除通过Terraform创建的节点池和节点,请确认资源中无重要业务数据后再执行。清理节点池前需先释放节点池中的节点。

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

terraform destroy

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

相关文档