All Products
Search
Document Center

Container Service for Kubernetes:Buat kelompok node dengan penskalaan otomatis menggunakan Terraform

Last Updated:Jun 17, 2026

Konfigurasikan scaling_config dalam resource alicloud_cs_kubernetes_node_pool untuk mengaktifkan penskalaan otomatis pada node ACK sesuai permintaan.

Jalankan contoh-contoh ini di Terraform Explorer.
Peringatan

Resource yang dibuat di sini akan dikenai biaya. Hapus resource tersebut dengan perintah terraform destroy setelah selesai.

Prasyarat

Pastikan Anda telah:

  • Auto Scaling diaktifkan dengan role default yang telah ditetapkan.

    Jika sebelumnya Anda menggunakan komponen alicloud_cs_kubernetes_autoscaler, Auto Scaling sudah diaktifkan.
  • Role AliyunOOSLifecycleHook4CSRole telah dibuat untuk akses ke CloudOps Orchestration Service (OOS):

    1. Klik tautan AliyunOOSLifecycleHook4CSRole untuk membuka halaman RAM Quick Authorization.

      Catatan
      • Untuk akun Alibaba Cloud: klik tautan secara langsung.

      • Untuk pengguna RAM: akun Alibaba Cloud Anda harus memiliki role AliyunOOSLifecycleHook4CSRole yang ditetapkan. Lampirkan kebijakan AliyunRAMReadOnlyAccess ke pengguna RAM tersebut. Lihat Berikan izin kepada pengguna RAM.

    2. Pada halaman RAM Quick Authorization, klik tombol Authorize.

  • Lingkungan runtime Terraform telah dikonfigurasi dengan salah satu opsi berikut:

    Opsi Paling cocok untuk
    Terraform Explorer Pengujian cepat tanpa instalasi lokal
    Cloud Shell Terraform dengan kredensial yang telah dikonfigurasi sebelumnya
    Mesin lokal Jaringan tidak stabil atau lingkungan pengembangan kustom

Latar Belakang

Alibaba Cloud Provider versi 1.111.0 memperkenalkan resource alicloud_cs_kubernetes_node_pool untuk mengelola kelompok node dengan penskalaan otomatis. Resource ini menggantikan komponen lama alicloud_cs_kubernetes_autoscaler, yang memiliki tiga keterbatasan:

  • Konfigurasi kompleks dengan beban operasional tinggi

  • Node yang diskalakan ditambahkan ke kelompok node default dan tidak dapat dikelola secara terpisah

  • Parameter tertentu tidak dapat diubah setelah pembuatan

Resource alicloud_cs_kubernetes_node_pool mengatasi ketiga masalah tersebut:

  • Penskalaan otomatis hanya memerlukan dua parameter: min_size dan max_size

  • Setiap kelompok node dikelola secara independen dan terlihat di Konsol ACK

  • Parameter opsional menggunakan nilai default yang aman, mencegah deviasi lingkungan di antara node

Resource Terraform

Resource Fungsi
alicloud_instance_types Menanyakan tipe instans Elastic Compute Service (ECS) yang memenuhi kondisi tertentu
alicloud_vpc Membuat virtual private cloud (VPC)
alicloud_vswitch Membuat vSwitch di dalam VPC
alicloud_cs_managed_kubernetes Membuat kluster ACK yang dikelola
alicloud_cs_kubernetes_node_pool Membuat kelompok node untuk kluster ACK yang dikelola
Resource Tujuan
alicloud_instance_types Menanyakan tipe instans Elastic Compute Service (ECS) yang tersedia
alicloud_vpc Membuat virtual private cloud (VPC)
alicloud_vswitch Membuat vSwitch (subnet) di dalam VPC
alicloud_cs_managed_kubernetes Membuat kluster ACK yang dikelola
alicloud_cs_kubernetes_node_pool Membuat kelompok node dengan penskalaan otomatis

Hasilkan parameter Terraform dari Konsol ACK

Jika contoh-contoh ini tidak mencakup konfigurasi Anda, hasilkan parameter Terraform yang tepat dari Konsol ACK.

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Klik nama kluster target. Di panel navigasi kiri, pilih Nodes > Node Pools.

  3. Klik Create Node Pool, konfigurasikan parameter, lalu klik Confirm. Di kotak dialog, klik Console-to-Code.

  4. Di panel Console-to-Code, klik tab Terraform. Blok kode akan menampilkan parameter kelompok node Anda. Klik def60920129c15b1257006a07a2b4da4 untuk menggunakannya.

Buat kelompok node dengan penskalaan otomatis aktif

Pilih prosedur yang sesuai dengan situasi Anda.

Jika sebelumnya Anda menggunakan alicloud_cs_kubernetes_autoscaler

Migrasikan ke alicloud_cs_kubernetes_node_pool:

Langkah 1: Modifikasi ConfigMap autoscaler-meta

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Klik nama kluster target. Di panel navigasi kiri, pilih Configurations > ConfigMap.

  3. Di halaman ConfigMap, pilih kube-system dari daftar drop-down Namespace. Temukan entri autoscaler-meta dan klik Edit di kolom Actions.

  4. Di panel Edit, ubah nilai taints dari "taints":"" menjadi "taints":[] di kotak teks Value.

  5. Klik OK.

Langkah 2: Sinkronisasi kelompok node

  1. Di panel navigasi kiri, pilih Nodes > Node Pools.

  2. Di halaman Node Pools, klik tombol Sync Node Pool.

Jika Anda belum pernah menggunakan alicloud_cs_kubernetes_autoscaler sebelumnya

Semua contoh berikut menggunakan scaling_config untuk menentukan batas jumlah node.

Tambahkan kelompok node dengan penskalaan otomatis ke kluster yang sudah ada

Jika Anda sudah memiliki kluster ACK, tambahkan kelompok node dengan konfigurasi minimal berikut:

provider "alicloud" {
}

# Tambahkan kelompok node dengan penskalaan otomatis ke kluster ACK yang sudah ada.
resource "alicloud_cs_kubernetes_node_pool" "at1" {
  # ID kluster ACK yang sudah ada.
  cluster_id     = ""
  name           = "np-test"
  # Tentukan setidaknya satu vSwitch untuk kelompok node.
  vswitch_ids    = ["vsw-bp1mdigyhmilu2h4v****"]
  instance_types = ["ecs.e3.medium"]
  password       = "Hello1234"

  scaling_config {
    min_size = 1  # Jumlah node minimum
    max_size = 5  # Jumlah node maksimum
  }
}

Buat kluster dan kelompok node dengan penskalaan otomatis secara bersamaan

Provision VPC, kluster ACK Pro, dan kelompok node dengan penskalaan otomatis dalam satu perintah terraform apply:

provider "alicloud" {
  region = var.region_id
}

variable "region_id" {
  type    = string
  default = "cn-shenzhen"
}

variable "cluster_spec" {
  type        = string
  description = "Spesifikasi kluster Kubernetes, yang bisa dikosongkan. Nilai valid: ack.standard : Kluster managed standar; ack.pro.small : Kluster managed profesional."
  default     = "ack.pro.small"
}

# Tentukan zona untuk vSwitch.
variable "availability_zone" {
  description = "Zona ketersediaan untuk vSwitch."
  default     = ["cn-shenzhen-c", "cn-shenzhen-e", "cn-shenzhen-f"]
}

# Blok CIDR yang digunakan untuk membuat vSwitch.
variable "node_vswitch_cidrs" {
  type        = list(string)
  default     = ["172.16.0.0/23", "172.16.2.0/23", "172.16.4.0/23"]
}

# Variabel ini menentukan blok CIDR tempat vSwitch Terway dibuat.
variable "terway_vswitch_cidrs" {
  type        = list(string)
  default     = ["172.16.208.0/20", "172.16.224.0/20", "172.16.240.0/20"]
}

# Tentukan tipe instans ECS untuk node pekerja.
variable "worker_instance_types" {
  description = "Tipe instans ECS yang digunakan untuk meluncurkan node pekerja."
  default     = ["ecs.g6.2xlarge", "ecs.g6.xlarge"]
}

# Tentukan kata sandi untuk node pekerja.
variable "password" {
  description = "Kata sandi instans ECS."
  default     = "Test123456"
}

# Tentukan awalan nama kluster ACK yang dikelola.
variable "k8s_name_prefix" {
  description = "Awalan nama yang digunakan untuk membuat kluster Kubernetes yang dikelola."
  default     = "tf-ack-shenzhen"
}

# Tentukan komponen yang akan diinstal di kluster ACK yang dikelola.
# Komponen: Terway (jaringan), csi-plugin (volume), csi-provisioner (volume),
# logtail-ds (logging), nginx-ingress-controller (Ingress), arms-prometheus (pemantauan),
# ack-node-problem-detector (diagnostik node).
variable "cluster_addons" {
  type = list(object({
    name   = string
    config = string
  }))

  default = [
    {
      "name"   = "terway-eniip",
      "config" = "",
    },
    {
      "name"   = "logtail-ds",
      "config" = "{\"IngressDashboardEnabled\":\"true\"}",
    },
    {
      "name"   = "nginx-ingress-controller",
      "config" = "{\"IngressSlbNetworkType\":\"internet\"}",
    },
    {
      "name"   = "arms-prometheus",
      "config" = "",
    },
    {
      "name"   = "ack-node-problem-detector",
      "config" = "{\"sls_project_name\":\"\"}",
    },
    {
      "name"   = "csi-plugin",
      "config" = "",
    },
    {
      "name"   = "csi-provisioner",
      "config" = "",
    }
  ]
}

# Nama resource default.
locals {
  k8s_name_terway         = "k8s_name_terway_${random_integer.default.result}"
  vpc_name                = "vpc_name_${random_integer.default.result}"
  autoscale_nodepool_name = "autoscale-node-pool-${random_integer.default.result}"
}

# Tanyakan tipe instans ECS dengan 8 vCPU dan memori 32 GiB untuk digunakan sebagai node pekerja.
data "alicloud_instance_types" "default" {
  cpu_core_count       = 8
  memory_size          = 32
  availability_zone    = var.availability_zone[0]
  kubernetes_node_role = "Worker"
}

resource "random_integer" "default" {
  min = 10000
  max = 99999
}

# VPC.
resource "alicloud_vpc" "default" {
  vpc_name   = local.vpc_name
  cidr_block = "172.16.0.0/12"
}

# vSwitch node.
resource "alicloud_vswitch" "vswitches" {
  count      = length(var.node_vswitch_cidrs)
  vpc_id     = alicloud_vpc.default.id
  cidr_block = element(var.node_vswitch_cidrs, count.index)
  zone_id    = element(var.availability_zone, count.index)
}

# vSwitch Pod (digunakan oleh Terway untuk alokasi IP Pod).
resource "alicloud_vswitch" "terway_vswitches" {
  count      = length(var.terway_vswitch_cidrs)
  vpc_id     = alicloud_vpc.default.id
  cidr_block = element(var.terway_vswitch_cidrs, count.index)
  zone_id    = element(var.availability_zone, count.index)
}

# Kluster ACK yang dikelola.
resource "alicloud_cs_managed_kubernetes" "default" {
  name         = local.k8s_name_terway
  cluster_spec = var.cluster_spec  # ack.pro.small membuat kluster ACK Pro.
  # vSwitch harus berada di zona yang ditentukan oleh availability_zone.
  worker_vswitch_ids           = split(",", join(",", alicloud_vswitch.vswitches.*.id))
  pod_vswitch_ids              = split(",", join(",", alicloud_vswitch.terway_vswitches.*.id))
  new_nat_gateway              = true   # Buat gerbang NAT untuk kluster.
  service_cidr                 = "10.11.0.0/16"  # Tidak boleh tumpang tindih dengan blok CIDR VPC. Maksimal 256 host.
  slb_internet_enabled         = true   # Buat instance SLB publik untuk server API.
  enable_rrsa                  = true
  control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"]
  dynamic "addons" {
    for_each = var.cluster_addons
    content {
      name   = lookup(addons.value, "name", var.cluster_addons)
      config = lookup(addons.value, "config", var.cluster_addons)
    }
  }
}

# Buat kelompok node dengan penskalaan otomatis aktif. Diskalakan antara 1 hingga 10 node.
resource "alicloud_cs_kubernetes_node_pool" "autoscale_node_pool" {
  cluster_id     = alicloud_cs_managed_kubernetes.default.id
  node_pool_name = local.autoscale_nodepool_name
  vswitch_ids    = split(",", join(",", alicloud_vswitch.vswitches.*.id))

  scaling_config {
    min_size = 1
    max_size = 10
  }

  instance_types        = var.worker_instance_types
  password              = var.password  # Kata sandi login SSH untuk node pekerja.
  install_cloud_monitor = true          # Instal agen CloudMonitor pada node.
  system_disk_category  = "cloud_efficiency"
  system_disk_size      = 100
  image_type            = "AliyunLinux3"

  data_disks {
    category = "cloud_essd"  # Kategori disk.
    size     = 120            # Ukuran disk dalam GiB.
  }
}

Langkah 1: Inisialisasi Terraform

terraform init

Inisialisasi yang berhasil akan menghasilkan:

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.

Langkah 2: Terapkan konfigurasi

terraform apply

Langkah 3: Verifikasi hasil

Setelah proses apply selesai, buka halaman Node Pools di Konsol ACK. Kelompok node baru akan menampilkan status Auto Scaling Enabled di bawah namanya.

Bersihkan resource

Hapus semua resource yang dibuat oleh konfigurasi ini:

terraform destroy

Perintah terraform destroy dijelaskan dalam Perintah umum.

Langkah selanjutnya

Referensi