本トピックでは、Terraform を使用して ACK Serverless Kubernetes クラスターを作成する方法について説明します。
本トピックのサンプルコードは、ワンクリックで実行できます。ワンクリックで実行
前提条件
Container Service for Kubernetes が有効化されていること。Terraform を使用して ACK を有効化する方法については、Terraform を使用した ACK の有効化とロールへの権限付与をご参照ください。
ログインに使用する Resource Access Management (RAM) ユーザーの AccessKey ペアが作成されていること。
説明デフォルトでは、Alibaba Cloud アカウント (root ユーザー) は、そのアカウントに属するすべてのリソースに対する完全な権限を持っています。資格情報が漏洩した場合の潜在的なセキュリティリスクを最小限に抑えるため、リソース権限が制限されている RAM アカウントを使用することを推奨します。
Terraform でコマンドを実行するために使用する RAM ユーザーに、次のポリシーがアタッチされていること。このポリシーには、Terraform でコマンドを実行するために必要な最小限の権限が含まれています。詳細については、RAM ユーザーへの権限付与をご参照ください。
このアクセスポリシーにより、RAM ユーザーは VPC (Virtual Private Cloud)、vSwitch、セキュリティグループ、および ACK クラスターの作成、表示、削除が可能になります。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "vpc:CreateVpc", "vpc:CreateVSwitch", "vpc:DescribeVpcAttribute", "vpc:DescribeRouteTableList", "vpc:DescribeVSwitchAttributes", "ecs:CreateSecurityGroup", "ecs:ModifySecurityGroupPolicy", "ecs:DescribeSecurityGroups", "ecs:DescribeSecurityGroupAttribute", "ecs:ListTagResources", "cs:CreateCluster", "cs:DescribeTaskInfo", "cs:DescribeClusterDetail", "vpc:DeleteVpc", "vpc:DeleteVSwitch", "cs:DeleteCluster", "ecs:DeleteSecurityGroup" ], "Resource": "*" } ] }Terraform のランタイム環境は、次のいずれかの方法で準備します。
Explorer:Alibaba Cloud は Terraform のオンラインランタイム環境を提供します。インストール不要で、環境にログインして Terraform を使用できます。低コスト、高効率、かつ便利な方法で Terraform を使用およびデバッグする必要があるシナリオに適しています。
Cloud Shell:Cloud Shell には Terraform がプリインストールされており、認証情報も設定済みです。Cloud Shell で Terraform コマンドを実行できます。低コスト、高効率、かつ便利な方法で Terraform を使用およびアクセスする必要があるシナリオに適しています。
ローカルマシンへの Terraform のインストールと設定:ネットワーク接続が不安定な場合や、カスタム開発環境が必要なシナリオに適しています。
重要Terraform のバージョンが 0.12.28 以降であることを確認してください。terraform --version コマンドを実行してバージョンを確認できます。
リソース
本トピックの一部のリソースには料金が発生します。不要になったリソースは、予期しない課金を避けるためにリリースしてください。
alicloud_eci_zones:ECI インスタンスが利用可能なゾーンを照会します。
alicloud_vpc:VPC (Virtual Private Cloud) を作成します。
alicloud_vswitch:vSwitch を作成して、VPC を 1 つ以上のサブネットに分割します。
alicloud_security_group:セキュリティグループを作成します。
alicloud_cs_serverless_kubernetes:ACK Serverless Kubernetes クラスターを作成します。
Terraform を使用した ACK Serverless Kubernetes クラスターの作成
作業ディレクトリを作成します。作業ディレクトリに main.tf という名前の設定ファイルを作成し、次のコードを main.tf ファイルにコピーします。
provider "alicloud" { region = var.region_id } variable "region_id" { type = string default = "cn-shenzhen" } variable "cluster_spec" { type = string description = "The cluster specifications of kubernetes cluster,which can be empty. Valid values:ack.standard : Standard managed clusters; ack.pro.small : Professional managed clusters." default = "ack.pro.small" } variable "k8s_name_prefix" { description = "The name prefix used to create ASK cluster." default = "ask-example" } variable "ack_version" { type = string description = "Desired Kubernetes version. " default = "1.31.1-aliyun.1" } # デフォルトのリソース名。 locals { k8s_name_ask = substr(join("-", [var.k8s_name_prefix, "ask"]), 0, 63) new_vpc_name = "tf-vpc-172-16" new_vsw_name = "tf-vswitch-172-16-0" new_sg_name = "tf-sg-172-16" } data "alicloud_eci_zones" "default" {} resource "alicloud_vpc" "vpc" { vpc_name = local.new_vpc_name cidr_block = "172.16.0.0/12" } resource "alicloud_vswitch" "vsw" { vswitch_name = local.new_vsw_name vpc_id = alicloud_vpc.vpc.id cidr_block = cidrsubnet(alicloud_vpc.vpc.cidr_block, 8, 8) zone_id = data.alicloud_eci_zones.default.zones.0.zone_ids.0 } resource "alicloud_security_group" "group" { security_group_name = local.new_sg_name vpc_id = alicloud_vpc.vpc.id } resource "alicloud_cs_serverless_kubernetes" "serverless" { name = local.k8s_name_ask version = var.ack_version # この値を、作成したいクラスターのバージョンに置き換えます。 cluster_spec = var.cluster_spec vpc_id = alicloud_vpc.vpc.id vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id)) new_nat_gateway = true endpoint_public_access_enabled = true deletion_protection = false security_group_id = alicloud_security_group.group.id # RRSA を使用して ServiceAccount を設定します。 enable_rrsa = true time_zone = "Asia/Shanghai" service_cidr = "10.13.0.0/16" service_discovery_types = ["CoreDNS"] # タグ tags = { "cluster" = "ack-serverless" } # アドオン addons { name = "nginx-ingress-controller" # インターネットを使用します。 config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}" # イントラネットを使用する場合は、次の設定を使用します。 # config = "{\"IngressSlbNetworkType\":\"intranet\",\"IngressSlbSpec\":\"slb.s2.small\"}" } addons { name = "metrics-server" } addons { name = "knative" } addons { name = "managed-arms-prometheus" } addons { name = "logtail-ds" # sls_project_name を指定します。 # config = "{\"sls_project_name\":\"<ご利用のSLSプロジェクト名>}\"}" } }次のコマンドを実行して、Terraform ランタイム環境を初期化します。
terraform init次の出力は、Terraform が初期化されたことを示します。
Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.次のコマンドを実行して、実行計画を作成します。
terraform plan次の出力は、実行計画が作成されたことを示します。作成されるリソースの詳細をプレビューできます。
Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. ... Plan: 4 to add, 0 to change, 0 to destroy. ...次のコマンドを実行して、クラスターを作成します。
terraform applyプロンプトが表示されたら、
yesと入力して Enter キーを押します。コマンドが完了するまで待ちます。次の出力は、ACK クラスターが作成されたことを示します。... Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes ... alicloud_cs_serverless_kubernetes.serverless: Creation complete after 8m26s [id=************] Apply complete! Resources: 4 added, 0 changed, 0 destroyed.検証結果
terraform show コマンドの実行
次のコマンドを実行して、Terraform によって作成されたリソースの詳細を表示できます。
terraform showACK コンソールへのログイン
Container Service for Kubernetes コンソールにログインして、作成されたクラスターを表示します。
リソースのクリーンアップ
本トピックで作成したリソースが不要になった場合は、terraform destroy コマンドを実行してリソースをリリースします。terraform destroy コマンドの詳細については、一般的なコマンドをご参照ください。
terraform destroy