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.
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):
-
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.
-
-
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_sizedanmax_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.
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Klik nama kluster target. Di panel navigasi kiri, pilih Nodes > Node Pools.
-
Klik Create Node Pool, konfigurasikan parameter, lalu klik Confirm. Di kotak dialog, klik Console-to-Code.
-
Di panel Console-to-Code, klik tab Terraform. Blok kode akan menampilkan parameter kelompok node Anda. Klik
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
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
-
Klik nama kluster target. Di panel navigasi kiri, pilih Configurations > ConfigMap.
-
Di halaman ConfigMap, pilih kube-system dari daftar drop-down Namespace. Temukan entri autoscaler-meta dan klik Edit di kolom Actions.
-
Di panel Edit, ubah nilai
taintsdari"taints":""menjadi"taints":[]di kotak teks Value. -
Klik OK.
Langkah 2: Sinkronisasi kelompok node
-
Di panel navigasi kiri, pilih Nodes > Node Pools.
-
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.