Terraform を使用してコードとしてのインフラストラクチャ (IaC) を定義し、ACS クラスターを作成します。
前提条件
-
Container Compute Service (ACS) が有効化されている必要があります。
-
Alibaba Cloud アカウントは、アカウント内のすべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの認証情報が漏洩すると、リソースが重大なセキュリティリスクにさらされます。Resource Access Management (RAM) ユーザーを使用し、そのユーザーの AccessKey を作成することを推奨します。詳細については、「RAM ユーザーの作成」および「AccessKey の作成」をご参照ください。
-
Terraform でコマンドを実行するために使用する RAM ユーザーには、次のポリシーがアタッチされています。このポリシーには、Terraform でコマンドを実行するために必要な最小限の権限が含まれています。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
このポリシーは、ACS クラスターとそれに依存するクラウドリソースを作成、表示、削除する権限を RAM ユーザーに付与します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "cs:CreateCluster", "cs:DescribeTaskInfo", "cs:DescribeClusterDetail", "cs:GetClusterCerts", "cs:CheckControlPlaneLogEnable", "cs:DeleteCluster", "cs:GetClusterAuditProject", "cs:ModifyCluster", "vpc:DescribeNatGateways" ], "Resource": "*" } ] } -
以下のいずれかの方法で Terraform ランタイム環境を準備します。
-
Terraform Explorer で Terraform を使用する:インストール不要のブラウザベースの Terraform 環境です。迅速な無料トライアルやデバッグに適しています。
-
Terraform を使用してリソースを迅速に作成する:Cloud Shell には Terraform がプリインストールされ、認証情報も設定済みです。セットアップなしで Terraform を実行できる、便利で低コストな方法です。
-
RAM ユーザーまたはロールとして Cloud Shell を使用するには、Alibaba Cloud アカウントで必要な権限を付与する必要があります。ID 管理。
-
-
Resource Orchestration Service (ROS) で Terraform を使用する:ROS が Terraform の実行を管理します。Terraform タイプのテンプレートを作成し、Alibaba Cloud、AWS、または Azure のリソースをパラメーターと依存関係で定義します。
-
Terraform をローカルにインストールして設定する:ネットワーク接続が制限されている環境や、カスタム開発環境に最適です。
重要Terraform 0.12.28 以降が必要です。
terraform --versionを実行してバージョンを確認してください。 -
使用するリソース
予期しない料金の発生を避けるため、不要になったリソースは解放してください。
-
alicloud_cs_managed_kubernetes:ACS クラスターを作成します。このリソースは、ACK マネージドクラスターを作成するためのリソースに基づいています。
Terraform を使用した ACS クラスターの作成
以下の例では、デフォルトのアドオンである alibaba-log-controller (ロギング)、arms-prometheus (モニタリング)、managed-coredns (DNS)、および managed-metrics-server (メトリクス) を備えた ACS クラスターを作成します。
-
作業ディレクトリに main.tf という名前のファイルを作成します。以下のコードを main.tf にコピーし、必要に応じて変更してください。
provider "alicloud" {
region = var.region_id
}
variable "region_id" {
type = string
default = "cn-guangzhou"
}
variable "availability_zone" {
type = list(string)
description = "vSwitch のアベイラビリティーゾーン。"
default = ["cn-guangzhou-a", "cn-guangzhou-b"]
}
variable "k8s_name_prefix" {
description = "ACS クラスターの作成に使用される名前のプレフィックス。"
default = "acs-example"
}
variable "acs_version" {
type = string
description = "対象の Kubernetes バージョン。"
default = "1.31.1-aliyun.1" # 必要に応じて値を変更します。
}
variable "service_cidr" {
type = string
description = "Kubernetes Service の CIDR ブロック。"
default = "10.13.0.0/16" # 必要に応じて値を変更します。
}
# ACS クラスターにインストールするアドオンを指定します。alibaba-log-controller (ロギング)、arms-prometheus (モニタリング)、managed-coredns、managed-metrics-server などが含まれます。
variable "cluster_addons" { # 必要に応じて値を変更します。
type = list(object({
name = string
config = string
}))
default = [
{
"name" = "arms-prometheus",
"config" = "",
},
{
"name" = "alibaba-log-controller",
"config" = "",
},
{
"name" = "managed-coredns",
"config" = "",
},
{
"name" = "managed-metrics-server",
"config" = "",
}
]
}
# デフォルトのリソース名。
locals {
k8s_name_acs = substr(join("-", [var.k8s_name_prefix, "acs"]), 0, 63)
log_project_name = "log-for-${local.k8s_name_acs}"
}
# ACS クラスターの作成。
resource "alicloud_cs_managed_kubernetes" "default" {
name = local.k8s_name_acs # Kubernetes クラスターの名前。
cluster_spec = "ack.pro.small"
profile = "Acs"
version = var.acs_version
zone_ids = var.availability_zone
is_enterprise_security_group = true
control_plane_log_ttl = "30"
new_nat_gateway = true # Kubernetes クラスターの作成時に新しい NAT ゲートウェイを作成するかどうかを指定します。デフォルト値:true。
control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # ログ収集の対象となるコントロールプレーンコンポーネント。
deletion_protection = true
# RRSA を使用した ServiceAccount の設定。
enable_rrsa = true
timezone = "Asia/Shanghai"
service_cidr = var.service_cidr # 必要に応じて値を変更します。
slb_internet_enabled = false # API サーバー用にインターネット向けのロードバランサーを作成するかどうかを指定します。デフォルト値:false。
dynamic "addons" { # アドオン管理。
for_each = var.cluster_addons
content {
name = addons.value.name
config = addons.value.config
}
}
}
この設定は参考用です。必要に応じて変更してください。
-
Terraform ランタイム環境を初期化します。
terraform init
成功した場合の期待される出力:
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
-
クラスターを作成します。
terraform apply
プロンプトが表示されたら yes と入力し、Enter キーを押してください。成功した場合の期待される出力:
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_managed_kubernetes.default: Creation complete after 5m48s [id=ccb53e72ec6c447c990762800********]
...
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
-
結果を確認します。
Terraform show
Terraform で作成したリソースを表示します。
terraform show
ACS コンソール
Container Compute Service コンソールにログインして、作成したクラスターを表示します。
リソースのクリーンアップ
不要になったリソースを解放するには、terraform destroy を実行してください。terraform destroy コマンドについては、「共通コマンド」をご参照ください。
terraform destroy