文档首页/ 云容器引擎 CCE/ 最佳实践/ Terraform/ 使用Terraform创建CCE集群
更新时间:2026-08-17 GMT+08:00

使用Terraform创建CCE集群

在容器化业务快速迭代的场景下,运维工程师需要频繁创建CCE集群以部署和管理容器化应用。手动通过控制台创建集群需要依次配置VPC、子网、集群参数等多个环节,操作繁琐且容易出错,尤其在多环境(开发、测试、生产)需要重复创建时效率较低。

通过Terraform可以将集群创建过程定义为代码,实现一键自动化创建CCE集群及其依赖的网络资源,支持版本管理和可重复执行,适用于以下场景:

  • CI/CD流水线中自动化创建和销毁测试集群
  • 多环境批量创建配置一致的CCE集群
  • 集群创建流程标准化,减少人工操作差异

前提条件

操作步骤

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

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

步骤二:创建配置文件

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

  1. 查询可用区。

    创建az.tf文件,查询指定region下所有的可用区信息,用于后续创建CCE Turbo集群相关资源。

    # 获取指定region(region参数缺省时默认继承当前provider块中所指定的region)下所有的可用区信息,用于创建Turbo集群相关资源
    data "huaweicloud_availability_zones" "test" {}
  2. (可选)如需自定义endpoint,创建endpoints.tf。
    provider "huaweicloud" {
      insecure  = true  # 跳过SSL证书验证
      endpoints = {
        ecs = "https://ecs.{region}.myhuaweicloud.com"
        cce = "https://cce.{region}.myhuaweicloud.com"
        vpc = "https://vpc.{region}.myhuaweicloud.com"
      }
    }

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

  3. 创建VPC(可选)。

    如已有VPC,可跳过此步骤,在后续步骤中通过vpc_id变量指定已有VPC。创建vpc.tf文件:

    variable "vpc_id" {
      description = "VPC的ID"
      type        = string
      default     = ""
    }
    
    variable "vpc_name" {
      description = "VPC的名称"
      type        = string
      default     = ""
    
      validation {
        condition     = var.vpc_id != "" || var.vpc_name != ""
        error_message = "如果未提供vpc_id,则必须提供vpc_name"
      }
    }
    
    variable "vpc_cidr" {
      description = "VPC的CIDR块"
      type        = string
      default     = "192.168.0.0/16"
    }
    
    # 在指定region(region参数缺省时默认继承当前provider块中所指定的region)下创建VPC资源,用于为Turbo集群提供网络环境
    resource "huaweicloud_vpc" "test" {
      count = var.vpc_id == "" && var.subnet_id == "" ? 1 : 0
    
      name = var.vpc_name
      cidr = var.vpc_cidr
    }

    涉及参数说明如下表所示。

    参数

    说明

    count

    创建资源数量。如果提供了vpc_id则不再创建VPC资源。

    name

    VPC名称。

    cidr

    VPC网段,默认为192.168.0.0/16。

  4. 创建VPC子网。

    如已执行步骤2创建VPC,则必须执行此步骤;如已有子网,可跳过此步骤,通过subnet_id变量指定已有子网。创建vpc_subnet.tf文件:

    variable "subnet_id" {
      description = "子网的ID"
      type        = string
      default     = ""
    }
    
    variable "subnet_name" {
      description = "子网的名称"
      type        = string
      default     = ""
    
      validation {
        condition     = var.subnet_id == "" || var.subnet_name == ""
        error_message = "如果未提供subnet_id,则必须提供subnet_name"
      }
    }
    
    variable "subnet_cidr" {
      description = "子网的CIDR块"
      type        = string
      default     = ""
    }
    
    variable "subnet_gateway_ip" {
      description = "子网的网关IP"
      type        = string
      default     = ""
    }
    
    variable "availability_zone" {
      description = "创建CCE集群的可用区"
      type        = string
      default     = ""
    }
    
    # 在指定region(region参数缺省时默认继承当前provider块中所指定的region)下创建VPC子网资源,用于为Turbo集群提供网络环境
    resource "huaweicloud_vpc_subnet" "test" {
      count = var.subnet_id == "" ? 1 : 0
    
      vpc_id            = var.vpc_id != "" ? var.vpc_id : huaweicloud_vpc.test[0].id
      name              = var.subnet_name
      cidr              = var.subnet_cidr != "" ? var.subnet_cidr : cidrsubnet(huaweicloud_vpc.test[0].cidr, 4, 0)
      gateway_ip        = var.subnet_cidr != "" ? cidrhost(var.subnet_cidr, 1) : cidrhost(cidrsubnet(huaweicloud_vpc.test[0].cidr, 4, 0), 1)
      availability_zone = var.availability_zone != "" ? var.availability_zone : try(data.huaweicloud_availability_zones.test.names[0], null)
    }

    涉及参数说明如下表所示。

    参数

    说明

    count

    创建资源数量。如果提供了subnet_id则不再创建子网。

    vpc_id

    需要在其下创建子网的VPC ID。

    name

    子网名称。

    cidr

    子网网段。未提供时自动从VPC网段中分割一个子网。

    gateway_ip

    子网网关IP地址。未提供时使用子网网段的第一个IP地址。

    availability_zone

    子网可用区。未提供时使用查询到的第一个可用区。

  5. 创建ENI子网。

    CCE Turbo集群使用云原生网络2.0(eni),需要额外创建ENI子网为容器提供网络环境。如已有ENI子网,可通过eni_ipv4_subnet_id变量指定。

    创建eni_subnet.tf文件:

    variable "eni_ipv4_subnet_id" {
      description = "ENI子网的ID"
      type        = string
      default     = ""
    }
    
    variable "eni_subnet_name" {
      description = "ENI子网的名称"
      type        = string
      default     = ""
    
      validation {
        condition     = var.eni_ipv4_subnet_id == "" || var.eni_subnet_name == ""
        error_message = "如果未提供eni_ipv4_subnet_id,则必须提供eni_subnet_name"
      }
    }
    
    variable "eni_subnet_cidr" {
      description = "ENI子网的CIDR块"
      type        = string
      default     = ""
    }
    
    # 在指定region(region参数缺省时默认继承当前provider块中所指定的region)下创建ENI子网资源,用于为Turbo集群提供ENI网络环境
    resource "huaweicloud_vpc_subnet" "eni" {
      count = var.eni_ipv4_subnet_id == "" ? 1 : 0
    
      vpc_id            = var.vpc_id != "" ? var.vpc_id : huaweicloud_vpc.test[0].id
      name              = var.eni_subnet_name
      cidr              = var.eni_subnet_cidr != "" ? var.eni_subnet_cidr : cidrsubnet(huaweicloud_vpc.test[0].cidr, 4, 1)
      gateway_ip        = var.eni_subnet_cidr != "" ? cidrhost(var.eni_subnet_cidr, 1) : cidrhost(cidrsubnet(huaweicloud_vpc.test[0].cidr, 4, 1), 1)
      availability_zone = var.availability_zone != "" ? var.availability_zone : try(data.huaweicloud_availability_zones.test.names[0], null)
    }

    涉及参数说明如下表所示。

    参数

    说明

    count

    创建资源数量。如果提供了eni_ipv4_subnet_id则不再创建ENI子网。

    vpc_id

    需要在其下创建子网的VPC ID。

    name

    ENI子网名称。

    cidr

    ENI子网网段。未提供时自动从VPC网段中分割一个子网。

    gateway_ip

    子网网关IP。未提供时使用子网网段的第一个IP。

    availability_zone

    子网可用区。未提供时使用查询到的第一个可用区。

    ENI子网与普通VPC子网属于同一VPC下的不同子网,网段不能重叠。

  6. 创建cce_cluster.tf文件,以创建CCE集群。
    variable "cluster_name" {
      description = "CCE集群的名称"
      type        = string
      default     = ""
    }
    
    variable "cluster_flavor_id" {
      description = "CCE集群的规格ID"
      type        = string
      default     = "cce.s1.small"
    }
    
    variable "cluster_version" {
      description = "CCE集群的版本"
      type        = string
      default     = null
      nullable    = true
    }
    
    variable "cluster_type" {
      description = "CCE集群的类型"
      type        = string
      default     = "VirtualMachine"
    }
    
    variable "container_network_type" {
      description = "容器网络类型"
      type        = string
      default     = "eni"
    }
    
    variable "cluster_description" {
      description = "CCE集群的描述"
      type        = string
      default     = ""
    }
    
    variable "cluster_tags" {
      description = "CCE集群的标签"
      type        = map(string)
      default     = {}
    }
    
    # 在指定region(region参数缺省时默认继承当前provider块中所指定的region)下创建CCE集群资源,用于部署和管理高性能容器化应用
    resource "huaweicloud_cce_cluster" "test" {
      name                   = var.cluster_name
      flavor_id              = var.cluster_flavor_id
      cluster_version        = var.cluster_version
      cluster_type           = var.cluster_type
      container_network_type = var.container_network_type
      vpc_id                 = var.vpc_id != "" ? var.vpc_id : huaweicloud_vpc.test[0].id
      subnet_id              = var.subnet_id != "" ? var.subnet_id : huaweicloud_vpc_subnet.test[0].id
      eni_subnet_id          = var.eni_ipv4_subnet_id != "" ? var.eni_ipv4_subnet_id : huaweicloud_vpc_subnet.eni[0].ipv4_subnet_id
      description            = var.cluster_description
      tags                   = var.cluster_tags
    }

    涉及参数说明如下表所示。

    参数

    说明

    name

    集群名称。

    flavor_id

    集群规格ID,默认为cce.s1.small。

    cluster_version

    集群版本,为null时使用当前默认版本。

    cluster_type

    集群Master节点架构。取值:VirtualMachine(X86)、ARM64(鲲鹏)。

    container_network_type

    容器网络类型。取值:overlay_l2(容器隧道网络,创建CCE Standard集群)、vpc-router(VPC网络,创建CCE Standard集群)、eni(云原生网络2.0,创建CCE Turbo集群)。

    vpc_id

    集群使用的VPC ID。

    subnet_id

    集群节点使用的子网ID。

    eni_subnet_id

    容器使用的ENI子网的IPv4子网ID。

    description

    集群描述信息。

    tags

    集群标签。

    container_network_type参数决定了创建的集群类型和所需的网络资源。选择eni时需创建ENI子网,选择overlay_l2或vpc-router时无需创建ENI子网。

  7. 配置资源参数。以下为示例配置,请根据实际业务需求修改参数值。

    创建terraform.tfvars文件,预设资源所需的入参:

    vpc_name            = "tf_test_vpc"
    subnet_name         = "tf_test_subnet"
    eni_subnet_name     = "tf_test_eni_subnet"
    cluster_name        = "tf-test-cluster"
    cluster_description = "Created by terraform script"
    availability_zone   = "cn-north-7c"           # 请替换为实际可用区
    cluster_tags        = {
      owner = "terraform"
    }

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

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

步骤四:清理资源

此操作将永久删除通过Terraform创建的所有资源(包括VPC、子网和CCE集群),请确认资源中无重要业务数据后再执行。

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

terraform destroy

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

相关文档