本文介绍如何使用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集群,才能创建舰队。
使用的资源
alicloud_zones:查询可用区。
alicloud_instance_types:根据条件查询符合要求的ECS实例类型。
alicloud_vpc:创建专有网络VPC。
alicloud_vswitch:创建虚拟交换机(vSwitch)为VPC划分一个或多个子网。
alicloud_cs_managed_kubernetes:创建ACK托管集群。
alicloud_cs_kubernetes_node_pool:为ACK托管集群创建节点池。
alicloud_ack_one_cluster:创建ACK One Fleet实例。
alicloud_ack_one_membership_attachment:创建Fleet实例和ACK托管集群的关联关系。
使用Terraform关联ACK托管集群到ACK One舰队实例
本示例将创建一个ACK托管集群及一个ACK One舰队实例,然后将ACK托管集群关联到ACK One舰队实例。
创建一个工作目录,并在该工作目录中创建名为
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 }
执行以下命令,初始化Terraform运行环境。
terraform init
执行以下命令,创建执行计划并预览变更。
terraform plan
执行以下命令,创建集群。
terraform apply
在执行过程中,根据提示输入
yes
并按下Enter键,等待命令执行完成,若出现以下信息,则表示创建成功。Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
执行以下命令,验证结果。也可登录ACK One控制台查看已创建的舰队信息。
terraform show
清理资源
当您不再需要上述通过Terraform创建的资源时,请执行以下命令释放资源。
舰队中的argocd_enabled
属性必须为false
才可以释放资源。
terraform destroy
- 本页导读 (1)
- 前提条件
- 使用的资源
- 使用Terraform关联ACK托管集群到ACK One舰队实例
- 清理资源