全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan Terraform untuk membuat kluster ACK Edge

更新时间:Jul 06, 2025

Terraform adalah alat open source yang memungkinkan Anda untuk secara aman dan efisien melihat pratinjau, mengonfigurasi, serta mengelola infrastruktur cloud dan sumber daya. Anda dapat menggunakan Terraform untuk otomatisasi pembuatan, pembaruan, serta pengelolaan versi infrastruktur dan sumber daya Alibaba Cloud sesuai kebutuhan. Topik ini menjelaskan cara menggunakan Terraform untuk membuat kluster ACK Edge.

Catatan

Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik. Untuk informasi lebih lanjut, kunjungi Terraform Explorer.

Prasyarat

  • ACK Edge telah diaktifkan.

  • Sebuah pasangan AccessKey telah dibuat untuk pengguna Resource Access Management (RAM) yang digunakan untuk masuk.

    Catatan

    Secara default, akun Alibaba Cloud memiliki izin penuh atas semua sumber daya yang dimiliki oleh akun tersebut. Kami menyarankan untuk menggunakan akun RAM karena menyediakan izin terbatas, meminimalkan risiko keamanan potensial jika kredensial Anda terganggu.

  • Kebijakan berikut dilampirkan ke pengguna RAM yang Anda gunakan untuk menjalankan perintah di Terraform. Kebijakan ini mencakup izin minimum yang diperlukan untuk menjalankan perintah di Terraform. Untuk informasi lebih lanjut, lihat Memberikan izin kepada pengguna RAM.

    Kebijakan ini memungkinkan pengguna Resource Access Management (RAM) untuk membuat, melihat, dan menghapus virtual private clouds (VPCs), vSwitches, serta kluster Container Service for Kubernetes (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": "*"
            }
        ]
    }
  • Lingkungan runtime untuk Terraform disiapkan dengan menggunakan salah satu metode berikut:

    • Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan lingkungan runtime online untuk Terraform. Anda dapat masuk ke lingkungan tersebut dan menggunakan Terraform tanpa perlu menginstalnya. Cocok untuk skenario di mana Anda perlu menggunakan dan men-debug Terraform secara hemat biaya, efisien, dan nyaman.

    • Gunakan Terraform di Cloud Shell: Cloud Shell sudah diinstal sebelumnya dengan Terraform dan dikonfigurasi dengan kredensial identitas Anda. Anda dapat menjalankan perintah Terraform di Cloud Shell. Cocok untuk skenario di mana Anda perlu menggunakan dan mengakses Terraform secara hemat biaya, efisien, dan nyaman.

    • Instal dan konfigurasikan Terraform di mesin lokal Anda: Cocok untuk skenario di mana koneksi jaringan tidak stabil atau lingkungan pengembangan kustom diperlukan.

    Penting

    Anda harus menginstal Terraform versi 0.12.28 atau yang lebih baru. Anda dapat menjalankan perintah terraform --version untuk memeriksa versi Terraform.

Sumber Daya

Catatan

Anda akan dikenakan biaya untuk sumber daya tertentu. Jika Anda tidak lagi memerlukan sumber daya tersebut, Anda harus melepaskan atau berhenti berlangganan dari sumber daya tersebut sesegera mungkin.

Gunakan Terraform untuk membuat kluster ACK Edge

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

    File main.tf digunakan untuk mengonfigurasi pengaturan berikut untuk Terraform:

    • Membuat VPC dan membuat vSwitch di VPC.

    • Membuat kluster ACK Edge.

    • Membuat pool 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 edge kubernetes."
      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 pool 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 kubernetes, yang bisa kosong. Nilai valid: ack.standard : Kluster terkelola standar; ack.pro.small : Kluster terkelola 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
      }
    }
    # Pool node. 
    resource "alicloud_cs_kubernetes_node_pool" "nodepool" {
      # Nama kluster. 
      cluster_id = alicloud_cs_edge_kubernetes.edge.id
      # Nama pool node. 
      node_pool_name = var.nodepool_name
      # vSwitches kluster Kubernetes baru. Tentukan ID satu atau lebih vSwitches. vSwitches harus berada di zona yang ditentukan oleh availability_zone. 
      vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id))
    
      # Tipe instance Elastic Compute Service (ECS) dan metode penagihan. 
      instance_types       = [data.alicloud_instance_types.default.instance_types.0.id]
      instance_charge_type = "PostPaid"
    
      # Tentukan nama node kustom. Parameter ini opsional. 
      # node_name_mode      = "customized,edge-shenzhen,ip,default"
    
      # Runtime kontainer. 
      runtime_name    = "containerd"
      runtime_version = var.containerd_runtime_version
    
      # Jumlah node yang diharapkan dalam pool node. 
      desired_size = 2
      # Kata sandi yang digunakan untuk masuk ke kluster menggunakan SSH. 
      password = var.k8s_login_password
    
      # Tentukan apakah akan menginstal agen CloudMonitor pada node. 
      install_cloud_monitor = true
    
      # Jenis disk sistem node. Nilai 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 node. 
      data_disks {
        # Jenis disk data. 
        category = "cloud_efficiency"
        # Ukuran disk. 
        size = 120
      }
      lifecycle {
        ignore_changes = [
          labels
        ]
      }
    }
  2. Jalankan perintah berikut untuk menginisialisasi Terraform:

    terraform init

    Jika informasi berikut dikembalikan, Terraform berhasil diinisialisasi:

    Terraform telah berhasil diinisialisasi!
    
    Anda sekarang dapat mulai bekerja dengan Terraform. Coba jalankan "terraform plan" untuk melihat
    perubahan apa pun yang diperlukan untuk infrastruktur Anda. Semua perintah Terraform
    seharusnya sekarang berfungsi.
    
    Jika Anda pernah mengatur atau mengubah modul atau konfigurasi backend untuk Terraform,
    jalankan ulang perintah ini untuk menginisialisasi ulang direktori kerja Anda. Jika Anda lupa, perintah lain
    akan mendeteksinya dan mengingatkan Anda untuk melakukannya jika perlu.
  3. Buat rencana eksekusi dan pratinjau perubahan.

    terraform plan

    Jika informasi berikut dikembalikan, rencana eksekusi berhasil. Anda dapat melihat informasi sumber daya.

    Memperbarui status Terraform di memori sebelum rencana...
    Status yang diperbarui akan digunakan untuk menghitung rencana ini, tetapi tidak akan
    disimpan ke penyimpanan status lokal atau remote.
    ...
    Rencana: 4 untuk ditambahkan, 0 untuk diubah, 0 untuk dihapus.
    ...
  4. Jalankan perintah berikut untuk membuat kluster ACK Edge.

    terraform apply

    Ketik yes, tekan Enter, dan tunggu hingga eksekusi perintah selesai. Jika informasi berikut ditampilkan, kluster berhasil dibuat.

    ...
    Apakah Anda ingin melakukan tindakan ini?
      Terraform akan melakukan tindakan yang dijelaskan di atas.
      Hanya 'yes' yang akan diterima untuk menyetujui.
    
      Masukkan nilai: yes
    ...
    alicloud_cs_edge_kubernetes.edge: Pembuatan selesai setelah 8m26s [id=************]
    
    Aplikasi selesai! Sumber daya: 4 ditambahkan, 0 diubah, 0 dihapus.
  5. Verifikasi hasil

    Jalankan perintah terraform show

    Jalankan perintah berikut untuk meminta sumber daya yang dibuat oleh Terraform:

    terraform show

    image

    Masuk ke konsol ACK

    Masuk ke konsol ACK untuk melihat kluster yang telah dibuat.image

Bersihkan sumber daya

Jika Anda tidak lagi memerlukan sumber daya yang dibuat atau dikelola oleh Terraform, jalankan perintah terraform destroy untuk melepaskan sumber daya. Untuk informasi lebih lanjut tentang perintah terraform destroy, lihat Perintah umum.

terraform destroy

Kode contoh

Catatan

Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik. Untuk informasi lebih lanjut, kunjungi 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 edge kubernetes."
  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 pool 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 kubernetes, yang bisa kosong. Nilai valid: ack.standard : Kluster terkelola standar; ack.pro.small : Kluster terkelola 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
  }
}
# Pool node. 
resource "alicloud_cs_kubernetes_node_pool" "nodepool" {
  # Nama kluster. 
  cluster_id = alicloud_cs_edge_kubernetes.edge.id
  # Nama pool node. 
  node_pool_name = var.nodepool_name
  # vSwitches kluster Kubernetes baru. Tentukan ID satu atau lebih vSwitches. vSwitches harus berada di zona yang ditentukan oleh availability_zone. 
  vswitch_ids = split(",", join(",", alicloud_vswitch.vsw.*.id))

  # Tipe instance ECS dan metode penagihan. 
  instance_types       = [data.alicloud_instance_types.default.instance_types.0.id]
  instance_charge_type = "PostPaid"

  # Tentukan nama node kustom. Parameter ini opsional. 
  # node_name_mode      = "customized,edge-shenzhen,ip,default"

  # Runtime kontainer. 
  runtime_name    = "containerd"
  runtime_version = var.containerd_runtime_version

  # Jumlah node yang diharapkan dalam pool node. 
  desired_size = 2
  # Kata sandi yang digunakan untuk masuk ke kluster menggunakan SSH. 
  password = var.k8s_login_password

  # Tentukan apakah akan menginstal agen CloudMonitor pada node. 
  install_cloud_monitor = true

  # Jenis disk sistem node. Nilai 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 node. 
  data_disks {
    # Jenis disk data. 
    category = "cloud_efficiency"
    # Ukuran disk. 
    size = 120
  }
  lifecycle {
    ignore_changes = [
      labels
    ]
  }
}