文档首页/ 云容器引擎 CCE/ 最佳实践/ Terraform/ 使用Terraform创建节点池并加入服务器组
更新时间:2026-08-20 GMT+08:00

使用Terraform创建节点池并加入服务器组

云服务器组通过反亲和策略将同一组内的云服务器调度到不同的物理机上,避免单点故障导致多台服务器同时不可用,从而提高业务可用性。CCE集群中的节点实际就是云服务器,将同一节点池下的节点加入同一个云服务器组,可以实现节点级别的容灾,增强集群稳定性。

本文介绍如何通过Terraform在CCE集群中创建节点池并开启云服务器组能力,使同一节点池下的节点自动加入同一云服务器组,提升集群的容灾能力。

前提条件

操作步骤

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

  1. 创建节点池管理目录(目录名可自定义)。
    mkdir terraform_cce_nodepool
    cd ./terraform_cce_nodepool
  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. 创建云服务器组。

    创建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(亲和,组内云服务器调度到同一物理机)。

  3. 创建节点池并加入服务器组。

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

    数据盘类型。

  4. 配置资源参数。

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

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

  5. (可选)如需自定义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配置

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

  4. 查看已创建的资源。
    terraform show

步骤四:清理资源

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

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

terraform destroy

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

相关文档