Terraform は、クラウドのインフラストラクチャとリソースを安全かつ効率的にプレビュー、プロビジョニング、管理できる、オープンソースの Infrastructure as Code (IaC) ツールです。このトピックでは、Terraform を使用して ACK Edge クラスターを作成する方法について説明します。
このトピックのサンプルコードは、ワンクリックデプロイメントをサポートしています。Terraform Explorer でコードを実行できます。
前提条件
-
ACK Edge を有効化していること。
-
ご利用の Alibaba Cloud アカウント (root ユーザー) は、すべてのリソースに対する完全な権限を持っている必要があります。Alibaba Cloud アカウント (root ユーザー) の認証情報が漏洩すると、重大なセキュリティリスクに直面する可能性があります。Resource Access Management (RAM) ユーザーを使用し、その RAM ユーザーの AccessKey を作成することを推奨します。詳細については、「RAM ユーザーの作成」および「AccessKey の作成」をご参照ください。
-
Terraform コマンドを実行するために使用する RAM ユーザーに、次の最小権限のポリシーをアタッチします。このポリシーは、この例のリソースを管理する権限を RAM ユーザーに付与します。詳細については、「RAM ユーザー権限の管理」をご参照ください。
このポリシーにより、RAM ユーザーは VPC、vSwitch、および ACK クラスターの作成、表示、削除が可能になります。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "vpc:CreateVpc", "vpc:CreateVSwitch", "cs:CreateCluster", "vpc:DescribeVpcAttribute", "vpc:DescribeVSwitchAttributes", "vpc:DescribeRouteTableList", "vpc:DescribeNatGateways", "cs:DescribeTaskInfo", "cs:DescribeClusterDetail", "cs:GetClusterCerts", "cs:CheckControlPlaneLogEnable", "cs:CreateClusterNodePool", "cs:DescribeClusterNodePoolDetail", "cs:DescribeClusterNodePools", "cs:ScaleOutCluster", "cs:DescribeClusterNodes", "vpc:DeleteVpc", "vpc:DeleteVSwitch", "cs:DeleteCluster", "cs:DeleteClusterNodepool" ], "Resource": "*" } ] } -
Terraform 環境を準備します。次のいずれかの方法で Terraform を実行できます。
Terraform Explorer で Terraform を使用する:Alibaba Cloud は Terraform を実行するためのオンライン環境を提供します。Terraform をインストールする必要はありません。ログインしてオンラインで Terraform を試用できます。この方法は、無料で迅速かつ便利に Terraform を試してデバッグしたいシナリオに適しています。
Cloud Shell:Alibaba Cloud の Cloud Shell には、Terraform コンポーネントがプリインストールされ、認証情報が設定されています。Cloud Shell で直接 Terraform コマンドを実行できます。この方法は、低コストで迅速かつ便利に Terraform にアクセスして使用したいシナリオに適しています。
ローカルマシンに Terraform をインストールして設定する:この方法は、ネットワーク接続が悪い場合や、カスタム開発環境が必要な場合に適しています。
重要Terraform のバージョンが v0.12.28 以降であることを確認してください。terraform --version コマンドを実行してバージョンを確認できます。
リソース
このトピックで作成される一部のリソースは、従量課金制で課金されます。予期しない請求を避けるため、不要になったリソースはリリースしてください。
-
alicloud_zones:アベイラビリティゾーンを照会します。
-
alicloud_instance_types:指定された基準を満たす ECS インスタンスタイプを照会します。
-
alicloud_vpc:Virtual Private Cloud (VPC) を作成します。
-
alicloud_vswitch:VPC 内にサブネットを定義するための vSwitch を作成します。
-
alicloud_cs_edge_kubernetes:ACK Edge クラスターを作成します。
-
alicloud_cs_kubernetes_node_pool:ACK マネージドクラスターのノードプールを作成します。
ACK Edge クラスターの作成
-
作業ディレクトリを作成し、そのディレクトリに
main.tfという名前の設定ファイルを作成します。main.tfファイルは、次の Terraform 構成を定義します:-
VPC とその中の vSwitch を作成します。
-
ACK Edge クラスターを作成します。
-
2 つのノードを含むノードプールを作成します。
provider "alicloud" { region = var.region_id } variable "region_id" { default = "cn-hangzhou" } variable "k8s_name_edge" { type = string description = "エッジ Kubernetes クラスターの作成に使用する名前。" default = "edge-example" } variable "new_vpc_name" { type = string description = "VPC の作成に使用する名前。" default = "tf-vpc-172-16" } variable "new_vsw_name" { type = string description = "vSwitch の作成に使用する名前。" default = "tf-vswitch-172-16-0" } variable "nodepool_name" { type = string description = "ノードプールの作成に使用する名前。" default = "edge-nodepool-1" } variable "k8s_login_password" { type = string default = "Test123456" } variable "k8s_version" { type = string description = "Kubernetes バージョン" default = "1.28.9-aliyun.1" } variable "containerd_runtime_version" { type = string default = "1.6.34" } variable "cluster_spec" { type = string description = "Kubernetes クラスターのクラスター仕様。空にすることができます。有効な値:ack.standard:標準マネージドクラスター、ack.pro.small:プロフェッショナルマネージドクラスター。" default = "ack.pro.small" } data "alicloud_zones" "default" { available_resource_creation = "VSwitch" available_disk_category = "cloud_efficiency" } data "alicloud_instance_types" "default" { availability_zone = data.alicloud_zones.default.zones.0.id cpu_core_count = 4 memory_size = 8 kubernetes_node_role = "Worker" } resource "alicloud_vpc" "vpc" { vpc_name = var.new_vpc_name cidr_block = "172.16.0.0/12" } resource "alicloud_vswitch" "vsw" { vswitch_name = var.new_vsw_name vpc_id = alicloud_vpc.vpc.id cidr_block = cidrsubnet(alicloud_vpc.vpc.cidr_block, 8, 8) zone_id = data.alicloud_zones.default.zones.0.id } resource "alicloud_cs_edge_kubernetes" "edge" { name = var.k8s_name_edge version = var.k8s_version cluster_spec = var.cluster_spec worker_vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id)) worker_instance_types = [data.alicloud_instance_types.default.instance_types.0.id] password = var.k8s_login_password new_nat_gateway = true pod_cidr = "10.10.0.0/16" service_cidr = "10.12.0.0/16" load_balancer_spec = "slb.s2.small" worker_number = 1 node_cidr_mask = 24 # コンテナランタイム。 runtime = { name = "containerd" version = var.containerd_runtime_version } } # ノードプール。 resource "alicloud_cs_kubernetes_node_pool" "nodepool" { # Kubernetes クラスターの ID。 cluster_id = alicloud_cs_edge_kubernetes.edge.id # ノードプールの名前。 node_pool_name = var.nodepool_name # 新しい Kubernetes クラスターの vSwitch。1 つ以上の vSwitch の ID を指定します。vSwitch は availability_zone で指定されたゾーンにある必要があります。 vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id)) # ECS インスタンスタイプと課金方法。 instance_types = [data.alicloud_instance_types.default.instance_types.0.id] instance_charge_type = "PostPaid" # オプション。カスタムインスタンス名。 # node_name_mode = "customized,edge-shenzhen,ip,default" # コンテナランタイム。 runtime_name = "containerd" runtime_version = var.containerd_runtime_version # ノードプール内のノードの期待数。 desired_size = 2 # SSH を使用してクラスターノードにログインするためのパスワード。 password = var.k8s_login_password # Kubernetes ノードに CloudMonitor をインストールするかどうかを指定します。 install_cloud_monitor = true # ノードのシステムディスクのカテゴリ。有効な値:cloud_ssd および cloud_efficiency。デフォルト値:cloud_efficiency。 system_disk_category = "cloud_efficiency" system_disk_size = 100 # OS タイプ。 image_type = "AliyunLinux" # ノードのデータディスク構成。 data_disks { # データディスクのカテゴリ。 category = "cloud_efficiency" # データディスクのサイズ。 size = 120 } lifecycle { ignore_changes = [ labels ] } } -
-
次のコマンドを実行して、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次の出力は、実行計画が正常に作成されたことを示します。
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. ... -
次のコマンドを実行して構成を適用し、ACK Edge クラスターを作成します。
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_edge_kubernetes.edge: Creation complete after 8m26s [id=************] Apply complete! Resources: 4 added, 0 changed, 0 destroyed. -
結果の確認
Terraform show
次のコマンドを実行して、Terraform によって作成されたリソースの詳細を表示します。
terraform showこのコマンドは、次のような出力を返します:
# alicloud_cs_edge_kubernetes.edge: resource "alicloud_cs_edge_kubernetes" "edge" { certificate_authority = {} cluster_spec = "ack.pro.small" connections = { "api_server_internet" = "https://121.43.224.65:6443" "api_server_intranet" = "https://172.16.143.180:6443" "master_public_ip" = "12xxx5" } deletion_protection = false force_update = false id = "c8cfixxx691" install_cloud_monitor = true load_balancer_spec = "slb.s2.small" name = "edge-example-edge" name_prefix = "Terraform-Creation" nat_gateway_id = "ngw-bp1xxxoy" new_nat_gateway = true node_cidr_mask = 24 password = (sensitive value) pod_cidr = "10.10.0.0/16" proxy_mode = "ipvs" resource_group_id = "rg-aekzxxxxxxxx" runtime = { "name" = "containerd" "version" = "1.6.28" } }ACK コンソール
ACK コンソールにログインして、作成されたクラスターを表示します。クラスターの詳細ページで、[基本情報] タブをクリックして、その基本情報とネットワーク構成を表示します。基本情報には、クラスター名 (edge-example)、リージョン (中国 (杭州))、クラスターのステータス (実行中)、クラスタータイプ (ACK Edge プロ版)、Kubernetes バージョン (1.28.9-aliyun.1)、削除保護 (無効) などの詳細が含まれます。ネットワーク構成には、ネットワークプラグイン (Flannel)、サービスプロキシモード (IPVS)、内部およびパブリック API サーバーエンドポイント、Service CIDR (
10.12.0.0/16) が含まれます。
リソースのクリーンアップ
このトピックで作成したリソースをリリースするには、terraform destroy コマンドを実行します。terraform destroy の詳細については、「一般的なコマンド」をご参照ください。
terraform destroy
完全な例
このトピックのサンプルコードは、ワンクリックデプロイメントをサポートしています。Terraform Explorer でコードを実行できます。