このトピックでは、Terraform を使用して関連付けられたクラスターを Fleet インスタンスに追加する方法について説明します。
前提条件
AccessKey ペアが、ログインする Resource Access Management (RAM) ユーザーに対して作成されています。
説明デフォルトでは、Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対する完全な権限を持っています。資格情報が侵害された場合の潜在的なセキュリティリスクを最小限に抑えるために、リソース権限が制限された RAM アカウントを使用することをお勧めします。
Terraform でコマンドを実行するために使用する RAM ユーザーには、次のポリシーがアタッチされています。このポリシーには、Terraform でコマンドを実行するために必要な最小限の権限が含まれています。詳細については、「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 を使用する: Alibaba Cloud は、Terraform 用のオンラインランタイム環境を提供しています。環境にログインして、Terraform をインストールせずに使用できます。低コスト、効率的、かつ便利な方法で Terraform を使用およびデバッグする必要があるシナリオに適しています。
Cloud Shell で Terraform を使用する: Cloud Shell には Terraform がプリインストールされており、ID 資格情報が構成されています。Cloud Shell で Terraform コマンドを実行できます。低コスト、効率的、かつ便利な方法で Terraform を使用およびアクセスする必要があるシナリオに適しています。
オンプレミスマシンに Terraform をインストールして構成する: ネットワーク接続が不安定な場合や、カスタム開発環境が必要な場合に適しています。
Fleet インスタンスを作成するには、現在のアカウントに ACK クラスタが存在している必要があります。
使用されるリソース
alicloud_zones: 利用可能なゾーンをクエリします。
alicloud_instance_types: 指定された条件を満たす Elastic Compute Service (ECS) インスタンスタイプをクエリします。
alicloud_vpc: 仮想プライベートクラウド (VPC) を作成します。
alicloud_vswitch: vSwitch を作成して VPC を 1 つ以上のサブネットに分割します。
alicloud_cs_managed_kubernetes: Container Service for Kubernetes (ACK) マネージドクラスターを作成します。
alicloud_cs_kubernetes_node_pool: ACK マネージドクラスターのノードプールを作成します。
alicloud_ack_one_cluster: Distributed Cloud Container Platform for Kubernetes (ACK One) Fleet インスタンスを作成します。
alicloud_ack_one_membership_attachment: ACK マネージドクラスターを Fleet インスタンスに関連付けます。
Terraform を使用して ACK マネージドクラスターを ACK One Fleet インスタンスに関連付ける
この例では、ACK マネージドクラスターと ACK One Fleet インスタンスを作成し、ACK マネージドクラスターを ACK One Fleet インスタンスに関連付けます。
作業ディレクトリを作成し、
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" } # vSwitch を作成します。 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 } # ACK マネージドクラスターを Fleet インスタンスに関連付けます。 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 コンソール にログインして、作成された Fleet 情報を表示することもできます。
terraform show
リソースのクリア
Terraform によって作成されたリソースが不要になった場合は、次のコマンドを実行して解放します。
リソースを解放する前に、Fleet インスタンスの argocd_enabled
パラメーターを false
に設定する必要があります。
terraform destroy