All Products
Search
Document Center

Container Service for Kubernetes:Buat kluster ACK Edge menggunakan Terraform

Last Updated:Jun 21, 2026

Terraform adalah alat Infrastructure as Code (IaC) open-source yang memungkinkan Anda mempratinjau, menyediakan, dan mengelola infrastruktur serta resource cloud secara aman dan efisien. Topik ini menjelaskan cara menggunakan Terraform untuk membuat kluster ACK Edge.

Catatan

Kode contoh dalam topik ini mendukung penerapan satu klik. Anda dapat menjalankan kode tersebut di Terraform Explorer.

Prasyarat

  • Anda telah mengaktifkan ACK Edge.

  • Akun Alibaba Cloud Anda harus memiliki izin penuh atas semua resource. Jika kredensial identitas Akun Alibaba Cloud Anda bocor, Anda mungkin menghadapi risiko keamanan yang signifikan. Kami menyarankan Anda menggunakan Pengguna Resource Access Management (RAM) dan membuat AccessKey untuk pengguna RAM tersebut. Untuk informasi selengkapnya, lihat Buat pengguna RAM dan Buat AccessKey.

  • Lampirkan kebijakan hak istimewa minimal berikut ke pengguna RAM yang Anda gunakan untuk menjalankan perintah Terraform. Kebijakan ini memberikan izin kepada pengguna RAM untuk mengelola resource dalam contoh ini. Untuk informasi selengkapnya, lihat Kelola izin pengguna RAM.

    Kebijakan ini memungkinkan pengguna RAM untuk membuat, melihat, dan menghapus VPC, vSwitch, dan kluster 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": "*"
            }
        ]
    }
  • Siapkan lingkungan Terraform. Anda dapat menggunakan salah satu metode berikut untuk menjalankan Terraform.

    • Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan lingkungan online untuk menjalankan Terraform. Anda tidak perlu menginstal Terraform. Anda dapat login untuk menggunakan dan mencoba Terraform secara online. Metode ini cocok untuk skenario ketika Anda ingin mencoba dan men-debug Terraform dengan cepat dan nyaman tanpa biaya.

    • Cloud Shell: Alibaba Cloud Cloud Shell telah dilengkapi komponen Terraform yang pra-instal dan kredensial identitas yang dikonfigurasi. Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario ketika Anda ingin mengakses dan menggunakan Terraform dengan cepat dan nyaman dengan biaya rendah.

    • Instal dan konfigurasi Terraform di mesin lokal Anda: Metode ini cocok untuk skenario dengan konektivitas jaringan yang buruk atau ketika Anda memerlukan lingkungan pengembangan kustom.

    Penting

    Pastikan versi Terraform Anda adalah v0.12.28 atau lebih baru. Anda dapat menjalankan perintah terraform --version untuk memeriksa versi.

Sumber Daya

Catatan

Beberapa resource yang dibuat dalam topik ini dikenai biaya berdasarkan metode bayar sesuai penggunaan (pay-as-you-go). Hapus resource tersebut saat tidak lagi diperlukan untuk menghindari tagihan tak terduga.

Buat kluster ACK Edge

  1. Buat direktori kerja dan file konfigurasi bernama main.tf di dalam direktori tersebut.

    File main.tf menentukan konfigurasi Terraform berikut:

    • Membuat VPC dan vSwitch di dalam VPC tersebut.

    • Membuat kluster ACK Edge.

    • Membuat kelompok node yang berisi dua node.

    provider "alicloud" {
      region = var.region_id
    }
    variable "region_id" {
      default = "cn-hangzhou"
    }
    variable "k8s_name_edge" {
      type        = string
      description = "Nama yang digunakan untuk membuat kluster kubernetes edge."
      default     = "edge-example"
    }
    variable "new_vpc_name" {
      type        = string
      description = "Nama yang digunakan untuk membuat vpc."
      default     = "tf-vpc-172-16"
    }
    variable "new_vsw_name" {
      type        = string
      description = "Nama yang digunakan untuk membuat vSwitch."
      default     = "tf-vswitch-172-16-0"
    }
    variable "nodepool_name" {
      type        = string
      description = "Nama yang digunakan untuk membuat kelompok node."
      default     = "edge-nodepool-1"
    }
    variable "k8s_login_password" {
      type    = string
      default = "Test123456"
    }
    variable "k8s_version" {
      type        = string
      description = "Versi Kubernetes"
      default     = "1.28.9-aliyun.1"
    }
    variable "containerd_runtime_version" {
      type    = string
      default = "1.6.34"
    }
    variable "cluster_spec" {
      type        = string
      description = "Spesifikasi kluster dari kluster kubernetes, yang bisa dikosongkan. Nilai yang valid: ack.standard : Kluster dikelola Standar; ack.pro.small : Kluster dikelola Profesional."
      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 kontainer.
      runtime = {
        name    = "containerd"
        version = var.containerd_runtime_version
      }
    }
    # Kelompok node.
    resource "alicloud_cs_kubernetes_node_pool" "nodepool" {
      # ID kluster Kubernetes.
      cluster_id = alicloud_cs_edge_kubernetes.edge.id
      # Nama kelompok node.
      node_pool_name = var.nodepool_name
      # vSwitch untuk kluster Kubernetes baru. Tentukan ID satu atau beberapa vSwitch. vSwitch tersebut harus berada di zona yang ditentukan oleh availability_zone.
      vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id))
      # Tipe instans ECS dan metode penagihan.
      instance_types       = [data.alicloud_instance_types.default.instance_types.0.id]
      instance_charge_type = "PostPaid"
      # Opsional. Nama instans kustom.
      # node_name_mode      = "customized,edge-shenzhen,ip,default"
      # Runtime kontainer.
      runtime_name    = "containerd"
      runtime_version = var.containerd_runtime_version
      # Jumlah node yang diharapkan dalam kelompok node.
      desired_size = 2
      # Kata sandi yang digunakan untuk login ke node kluster melalui SSH.
      password = var.k8s_login_password
      # Menentukan apakah akan menginstal CloudMonitor pada node Kubernetes.
      install_cloud_monitor = true
      # Kategori disk sistem untuk node. Nilai yang valid: cloud_ssd dan cloud_efficiency. Nilai default: cloud_efficiency.
      system_disk_category = "cloud_efficiency"
      system_disk_size     = 100
      # Jenis OS.
      image_type = "AliyunLinux"
      # Konfigurasi disk data untuk node.
      data_disks {
        # Kategori disk data.
        category = "cloud_efficiency"
        # Ukuran disk data.
        size = 120
      }
      lifecycle {
        ignore_changes = [
          labels
        ]
      }
    }
  2. Jalankan perintah berikut untuk menginisialisasi direktori kerja Terraform.

    terraform init

    Inisialisasi yang berhasil menghasilkan output berikut.

    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.
  3. Jalankan perintah berikut untuk membuat rencana eksekusi dan meninjau perubahan.

    terraform plan

    Output berikut menunjukkan bahwa rencana eksekusi berhasil dibuat.

    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.
    ...
  4. Jalankan perintah berikut untuk menerapkan konfigurasi dan membuat kluster ACK Edge.

    terraform apply

    Saat diminta, ketik yes dan tekan Enter. Tunggu hingga perintah selesai. Kluster berhasil dibuat ketika output berikut muncul.

    ...
    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.
  5. Verifikasi hasilnya

    Terraform show

    Jalankan perintah berikut untuk melihat detail tentang resource yang dibuat oleh Terraform.

    terraform show

    Perintah tersebut mengembalikan output yang mirip dengan berikut:

    # 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"
        }
    }

    Konsol ACK

    Login ke Konsol ACK untuk melihat kluster yang telah dibuat. Di halaman detail kluster, klik tab Basic Information untuk melihat informasi dasar dan konfigurasi jaringannya. Informasi dasar mencakup detail seperti nama kluster (edge-example), wilayah (Tiongkok (Hangzhou)), status kluster (Running), jenis kluster (ACK Edge Pro), versi Kubernetes (1.28.9-aliyun.1), dan perlindungan penghapusan (Disabled). Konfigurasi jaringan mencakup plug-in jaringan (Flannel), modus proxy layanan (IPVS), titik akhir API server internal dan publik, serta Service CIDR (10.12.0.0/16).

Bersihkan resource

Untuk melepas resource yang dibuat dalam topik ini, jalankan perintah terraform destroy. Untuk informasi selengkapnya tentang terraform destroy, lihat Perintah umum.

terraform destroy

Contoh lengkap

Catatan

Kode contoh dalam topik ini mendukung penerapan satu klik. Anda dapat menjalankan kode tersebut di Terraform Explorer.

Kode contoh

provider "alicloud" {
  region = var.region_id
}
variable "region_id" {
  default = "cn-hangzhou"
}
variable "k8s_name_edge" {
  type        = string
  description = "Nama yang digunakan untuk membuat kluster kubernetes edge."
  default     = "edge-example"
}
variable "new_vpc_name" {
  type        = string
  description = "Nama yang digunakan untuk membuat vpc."
  default     = "tf-vpc-172-16"
}
variable "new_vsw_name" {
  type        = string
  description = "Nama yang digunakan untuk membuat vSwitch."
  default     = "tf-vswitch-172-16-0"
}
variable "nodepool_name" {
  type        = string
  description = "Nama yang digunakan untuk membuat kelompok node."
  default     = "edge-nodepool-1"
}
variable "k8s_login_password" {
  type    = string
  default = "Test123456"
}
variable "k8s_version" {
  type        = string
  description = "Versi Kubernetes"
  default     = "1.28.9-aliyun.1"
}
variable "containerd_runtime_version" {
  type    = string
  default = "1.6.34"
}
variable "cluster_spec" {
  type        = string
  description = "Spesifikasi kluster dari kluster kubernetes, yang bisa dikosongkan. Nilai yang valid: ack.standard : Kluster dikelola Standar; ack.pro.small : Kluster dikelola Profesional."
  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 kontainer.
  runtime = {
    name    = "containerd"
    version = var.containerd_runtime_version
  }
}
# Kelompok node.
resource "alicloud_cs_kubernetes_node_pool" "nodepool" {
  # ID kluster Kubernetes.
  cluster_id = alicloud_cs_edge_kubernetes.edge.id
  # Nama kelompok node.
  node_pool_name = var.nodepool_name
  # vSwitch untuk kluster Kubernetes baru. Tentukan ID satu atau beberapa vSwitch. vSwitch tersebut harus berada di zona yang ditentukan oleh availability_zone.
  vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id))
  # Tipe instans ECS dan metode penagihan.
  instance_types       = [data.alicloud_instance_types.default.instance_types.0.id]
  instance_charge_type = "PostPaid"
  # Opsional. Nama instans kustom.
  # node_name_mode      = "customized,edge-shenzhen,ip,default"
  # Runtime kontainer.
  runtime_name    = "containerd"
  runtime_version = var.containerd_runtime_version
  # Jumlah node yang diharapkan dalam kelompok node.
  desired_size = 2
  # Kata sandi yang digunakan untuk login ke node kluster melalui SSH.
  password = var.k8s_login_password
  # Menentukan apakah akan menginstal CloudMonitor pada node Kubernetes.
  install_cloud_monitor = true
  # Kategori disk sistem untuk node. Nilai yang valid: cloud_ssd dan cloud_efficiency. Nilai default: cloud_efficiency.
  system_disk_category = "cloud_efficiency"
  system_disk_size     = 100
  # Jenis OS.
  image_type = "AliyunLinux"
  # Konfigurasi disk data untuk node.
  data_disks {
    # Kategori disk data.
    category = "cloud_efficiency"
    # Ukuran disk data.
    size = 120
  }
  lifecycle {
    ignore_changes = [
      labels
    ]
  }
}