通过Terraform为舰队添加关联集群

更新时间:2025-03-13 05:09:30

本文介绍如何使用Terraform为舰队添加关联集群。

前提条件

  • 由于阿里云账号(主账号)具有资源的所有权限,一旦发生泄露将面临重大风险。建议您使用RAM用户,并为该RAM用户创建AccessKey,具体操作方式请参见创建RAM用户创建AccessKey

  • 为运行Terraform命令的RAM用户绑定以下最小权限策略,以获取管理本示例所涉及资源的权限。更多信息,请参见RAM用户授权

    该权限策略允许RAM用户创建、查看和删除RAM角色,并支持对RAM角色权限策略的管理。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ram:GetRole",
            "ram:ListRoles",
            "ram:AttachPolicyToRole",
            "ram:ListPoliciesForRole",
            "ram:CreateRole",
            "ram:DetachPolicyFromRole",
            "ram:DeleteRole"
          ],
          "Resource": "*"
        }
      ]
    }
  • 准备Terraform运行环境,您可以选择以下任一方式来使用Terraform。

    • Terraform Explorer中使用Terraform:阿里云提供了Terraform的在线运行环境,您无需安装Terraform,登录后即可在线使用和体验Terraform。适用于零成本、快速、便捷地体验和调试Terraform的场景。

    • Cloud Shell:阿里云Cloud Shell中预装了Terraform的组件,并已配置好身份凭证,您可直接在Cloud Shell中运行Terraform的命令。适用于低成本、快速、便捷地访问和使用Terraform的场景。

    • 在本地安装和配置Terraform:适用于网络连接较差或需要自定义开发环境的场景。

  • 该账户下必须存在ACK集群,才能创建舰队。

使用的资源

使用Terraform关联ACK托管集群ACK One舰队实例

说明

本示例将创建一个ACK托管集群及一个ACK One舰队实例,然后将ACK托管集群关联到ACK One舰队实例。

  1. 创建一个工作目录,并在该工作目录中创建名为main.tf的配置文件,然后将以下代码复制到main.tf中。

    provider "alicloud" {
      region = "cn-hangzhou"
    }
    # 指定可用区。
    variable "name" {
      default = "terraform-example"
    }
    
    variable "key_name" {
      default = "%s"
    }
    
    data "alicloud_enhanced_nat_available_zones" "enhanced" {
    }
    # 根据条件查询符合要求的ECS实例类型。
    data "alicloud_instance_types" "cloud_efficiency" {
      availability_zone    = data.alicloud_enhanced_nat_available_zones.enhanced.zones.0.zone_id
      cpu_core_count       = 4
      memory_size          = 8
      kubernetes_node_role = "Worker"
      system_disk_category = "cloud_efficiency"
    }
    # 创建专有网络VPC。
    resource "alicloud_vpc" "default" {
      cidr_block = "10.4.0.0/16"
    }
    # 创建虚拟交换机。
    resource "alicloud_vswitch" "default" {
      cidr_block = "10.4.0.0/24"
      vpc_id     = alicloud_vpc.default.id
      zone_id    = data.alicloud_enhanced_nat_available_zones.enhanced.zones.0.zone_id
    }
    # 创建ACK托管集群。
    resource "alicloud_cs_managed_kubernetes" "default" {
      cluster_spec         = "ack.pro.small"
      vswitch_ids          = [alicloud_vswitch.default.id]
      new_nat_gateway      = true
      pod_cidr             = cidrsubnet("10.0.0.0/8", 8, 36)
      service_cidr         = cidrsubnet("172.16.0.0/16", 4, 7)
      slb_internet_enabled = true
    
      is_enterprise_security_group = true
    }
    
    resource "alicloud_key_pair" "default" {
      key_pair_name = var.key_name
    }
    # 为ACK托管集群创建节点池。
    resource "alicloud_cs_kubernetes_node_pool" "default" {
      node_pool_name       = var.name
      cluster_id           = alicloud_cs_managed_kubernetes.default.id
      vswitch_ids          = [alicloud_vswitch.default.id]
      instance_types       = [data.alicloud_instance_types.cloud_efficiency.instance_types.0.id]
      system_disk_category = "cloud_efficiency"
      system_disk_size     = 40
      key_name             = alicloud_key_pair.default.key_pair_name
      desired_size         = 1
    }
    # 创建ACK One Fleet实例。
    resource "alicloud_ack_one_cluster" "default" {
      depends_on = [alicloud_cs_managed_kubernetes.default]
      network {
        vpc_id    = alicloud_vpc.default.id
        vswitches = [alicloud_vswitch.default.id]
      }
      argocd_enabled = false
    }
    # 创建Fleet实例和ACK托管集群的关联关系。
    resource "alicloud_ack_one_membership_attachment" "default" {
      cluster_id     = alicloud_ack_one_cluster.default.id
      sub_cluster_id = alicloud_cs_managed_kubernetes.default.id
    }
  2. 执行以下命令,初始化Terraform运行环境。

    terraform init
  3. 执行以下命令,创建执行计划并预览变更。

    terraform plan
  4. 执行以下命令,创建集群。

    terraform apply

    在执行过程中,根据提示输入yes并按下Enter键,等待命令执行完成,若出现以下信息,则表示创建成功。

    Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
  5. 执行以下命令,验证结果。也可登录ACK One控制台查看已创建的舰队信息。

    terraform show

清理资源

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

重要

舰队中的argocd_enabled属性必须为false才可以释放资源。

terraform destroy
  • 本页导读 (1)
  • 前提条件
  • 使用的资源
  • 使用Terraform关联ACK托管集群到ACK One舰队实例
  • 清理资源
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等