Secara default, node dalam kelompok node dan kelompok node terkelola Container Service for Kubernetes (ACK) tidak dapat melakukan penskalaan masuk atau keluar secara otomatis. Anda dapat menggunakan Terraform untuk membuat kelompok node dengan penskalaan otomatis diaktifkan. Topik ini menjelaskan cara menggunakan Terraform untuk membuat kelompok node tersebut.
Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik. Jalankan dengan Terraform Explorer
Prasyarat
Fitur penskalaan otomatis bergantung pada layanan Alibaba Cloud Auto Scaling. Anda harus mengaktifkan Auto Scaling dan menetapkan peran ESS default ke ACK sebelum mengaktifkan fitur penskalaan otomatis untuk node. Untuk informasi selengkapnya, lihat Aktifkan Auto Scaling.
CatatanJika Anda telah menggunakan komponen alicloud_cs_kubernetes_autoscaler, Auto Scaling telah diaktifkan.
Izin diberikan untuk mengakses CloudOps Orchestration Service (OOS). Anda dapat melakukan langkah-langkah berikut untuk membuat peran AliyunOOSLifecycleHook4CSRole yang menyediakan izin akses OOS.
Klik AliyunOOSLifecycleHook4CSRole.
CatatanJika akun saat ini adalah Akun Alibaba Cloud, klik AliyunOOSLifecycleHook4CSRole.
Jika akun saat ini adalah Pengguna RAM, pastikan bahwa Akun Alibaba Cloud Anda telah ditetapkan peran AliyunOOSLifecycleHook4CSRole. Kemudian, sambungkan kebijakan AliyunRAMReadOnlyAccess ke Pengguna RAM tersebut. Untuk informasi selengkapnya, lihat Berikan izin kepada Pengguna RAM.
Pada halaman RAM Quick Authorization, klik Authorize.
Lingkungan runtime untuk Terraform disiapkan dengan salah satu metode berikut:
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.
Cloud Shell: Cloud Shell telah dipasang 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 diperlukan lingkungan pengembangan kustom.
Informasi latar belakang
Terraform adalah alat open source yang mendukung infrastruktur baru melalui penyedia Terraform. Anda dapat menggunakan Terraform untuk mempratinjau, mengonfigurasi, dan mengelola infrastruktur serta sumber daya cloud. Untuk informasi selengkapnya, lihat Apa itu Terraform?.
Pada versi sebelumnya dari Alibaba Cloud Provider, ACK menyediakan komponen bernama alicloud_cs_kubernetes_autoscaler. Komponen ini dapat digunakan untuk mengaktifkan penskalaan otomatis untuk node. Namun, komponen tersebut memiliki batasan berikut:
Konfigurasinya kompleks dan biayanya tinggi.
Setiap node yang akan diskalakan ditambahkan ke kelompok node default dan tidak dapat dikelola secara terpisah.
Beberapa parameter tidak dapat dimodifikasi.
Alibaba Cloud Provider versi 1.111.0 dan yang lebih baru memungkinkan Anda membuat kelompok node dengan penskalaan otomatis diaktifkan menggunakan komponen alicloud_cs_kubernetes_node_pool. Komponen ini memiliki manfaat berikut:
Menyediakan konfigurasi penskalaan yang sederhana. Anda hanya perlu menetapkan batas bawah dan atas jumlah node dalam grup penskalaan.
Menggunakan pengaturan default untuk parameter opsional guna mencegah lingkungan yang tidak konsisten di antara node, sehingga menghindari kesalahan pengguna—misalnya, mengonfigurasi citra OS yang berbeda untuk node yang berbeda.
Memungkinkan Anda melihat secara eksplisit perubahan node dalam kelompok node di Konsol ACK.
Sumber Daya
Anda dikenai biaya untuk sumber daya tertentu. Jika Anda tidak lagi memerlukan sumber daya tersebut, lepaskan atau batalkan langganan sumber daya tersebut sesegera mungkin.
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 VPC untuk membuat subnet bagi VPC.
alicloud_cs_managed_kubernetes: membuat kluster ACK yang dikelola.
alicloud_cs_kubernetes_node_pool: membuat kelompok node untuk kluster ACK yang dikelola.
Hasilkan parameter permintaan Terraform menggunakan Konsol ACK
Jika parameter permintaan salah atau jika konfigurasi yang Anda butuhkan tidak termasuk dalam contoh di bawah ini, Anda dapat menghasilkan parameter permintaan yang diperlukan untuk membuat kelompok node menggunakan Konsol ACK. Untuk merekam layar, lakukan langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang ingin dikelola dan klik namanya. Di panel navigasi kiri, pilih .
Pada halaman Create Node Pool, konfigurasikan parameter dan klik Confirm. Pada kotak dialog yang muncul, klik Console-to-Code di pojok kiri bawah.
Pada tab Terraform, blok kode menampilkan set parameter yang diperlukan untuk pembuatan kelompok node. Klik
di pojok kanan atas untuk menyalinnya.
Gunakan Terraform untuk membuat kelompok node yang memiliki penskalaan otomatis diaktifkan
Alicloud_cs_kubernetes_autoscaler sebelumnya digunakan
Jika Anda telah menggunakan komponen alicloud_cs_kubernetes_autoscaler, otorisasi kluster Anda untuk mengakses Auto Scaling dan lakukan langkah-langkah berikut untuk beralih ke komponen alicloud_cs_kubernetes_node_pool. Setelah itu, Anda dapat membuat kelompok node dengan penskalaan otomatis diaktifkan di kluster Anda.
Modifikasi ConfigMap autoscaler-meta.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster yang ingin diubah. Di panel navigasi kiri, pilih .
Di pojok kiri atas halaman ConfigMap, pilih Kube-system dari daftar drop-down Namespace. Temukan ConfigMap autoscaler-meta dan klik Edit di kolom Actions.
Pada panel Edit, modifikasi nilai ConfigMap autoscaler-meta.
Anda perlu mengubah tipe data nilai
taintsdari string menjadi array. Di kotak teks Value, ubah"taints":""menjadi"taints":[].Klik OK.
Sinkronkan kelompok node.
Di panel navigasi kiri halaman detail, pilih .
Di pojok kanan atas halaman Node Pools, klik Sync Node Pool.
Alicloud_cs_kubernetes_autoscaler belum pernah digunakan sebelumnya
Anda dapat menggunakan Terraform untuk membuat kelompok node dengan penskalaan otomatis diaktifkan.
Buat file konfigurasi kelompok node.
Buat kelompok node yang memiliki penskalaan otomatis diaktifkan di kluster ACK yang sudah ada
Kode berikut memberikan contoh cara membuat kelompok node dengan penskalaan otomatis diaktifkan di kluster ACK yang sudah ada:
provider "alicloud" { } # Buat kelompok node yang memiliki penskalaan otomatis diaktifkan di kluster ACK yang sudah ada. resource "alicloud_cs_kubernetes_node_pool" "at1" { # ID kluster ACK tempat Anda ingin membuat kelompok node. cluster_id = "" name = "np-test" # vSwitch yang digunakan oleh node dalam kelompok node. Anda harus menentukan setidaknya satu vSwitch. vswitch_ids = ["vsw-bp1mdigyhmilu2h4v****"] instance_types = ["ecs.e3.medium"] password = "Hello1234" scaling_config { # Jumlah minimum node dalam kelompok node. min_size = 1 # Jumlah maksimum node dalam kelompok node. max_size = 5 } }Buat kelompok node yang memiliki penskalaan otomatis diaktifkan
Kode berikut memberikan contoh cara membuat kluster yang berisi kelompok node dengan penskalaan otomatis diaktifkan:
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 kosong. Nilai yang valid: ack.standard : Kluster terkelola standar; ack.pro.small : Kluster terkelola profesional." default = "ack.pro.small" } # Tentukan zona vSwitch. variable "availability_zone" { description = "Zona ketersediaan 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"] } # Blok CIDR yang digunakan untuk membuat vSwitch Terway. 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 terkelola." default = "tf-ack-shenzhen" } # Tentukan komponen yang ingin Anda instal di kluster ACK. Komponen tersebut mencakup Terway (plugin jaringan), csi-plugin (plugin volume), csi-provisioner (plugin volume), logtail-ds (plugin logging), NGINX Ingress controller, ack-arms-prometheus (plugin pemantauan), dan ack-node-problem-detector (plugin 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 sumber daya 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}" } # Spesifikasi instans ECS untuk node pekerja. Terraform mencari tipe instans ECS yang memenuhi permintaan CPU dan memori. 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. 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 # Nama kluster ACK. cluster_spec = var.cluster_spec # Buat kluster ACK Pro. worker_vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id)) # vSwitch yang digunakan oleh kelompok node. Tentukan satu atau beberapa ID vSwitch. vSwitch harus berada di zona yang ditentukan oleh availability_zone. pod_vswitch_ids = split(",", join(",", alicloud_vswitch.terway_vswitches.*.id)) # vSwitch yang digunakan oleh pod. new_nat_gateway = true # Tentukan apakah akan membuat gateway NAT saat kluster ACK dibuat. Nilai default: true. service_cidr = "10.11.0.0/16" # Blok CIDR pod. Jika Anda mengatur parameter cluster_network_type ke flannel, parameter ini wajib diisi. Blok CIDR pod tidak boleh sama dengan blok CIDR VPC atau blok CIDR kluster Kubernetes lain di VPC. Anda tidak dapat mengubah blok CIDR pod setelah kluster dibuat. Jumlah maksimum host dalam kluster: 256. slb_internet_enabled = true # Tentukan apakah akan membuat instance SLB publik untuk server API kluster. Nilai default: false. enable_rrsa = true control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # Log lapisan kontrol. dynamic "addons" { # Manajemen komponen. 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 yang memiliki penskalaan otomatis diaktifkan. Kelompok node dapat diskalakan hingga maksimal 10 node dan harus berisi minimal 1 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 yang digunakan untuk masuk ke kluster menggunakan SSH. install_cloud_monitor = true # Tentukan apakah akan menginstal agen CloudMonitor pada node di kluster. system_disk_category = "cloud_efficiency" system_disk_size = 100 image_type = "AliyunLinux3" data_disks { # Konfigurasi disk data node. category = "cloud_essd" # Tipe disk. size = 120 # Ukuran disk. } }Jalankan perintah berikut untuk menginisialisasi lingkungan runtime Terraform:
terraform initJika informasi berikut dikembalikan, Terraform telah diinisialisasi:
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.Jalankan perintah
terraform applyuntuk membuat kelompok node.Verifikasi hasil.
Setelah kelompok node dibuat, Anda dapat menemukannya di halaman Kelompok Node. Label Auto Scaling Enabled muncul di bawah nama kelompok node.
Bersihkan sumber daya
Jika Anda tidak lagi memerlukan sumber daya yang dibuat atau dikelola oleh Terraform, jalankan perintah terraform destroy untuk melepaskan sumber daya tersebut. Untuk informasi selengkapnya tentang perintah terraform destroy, lihat Perintah umum.
terraform destroyKode contoh
Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik.
Kode lengkap
Jika Anda ingin melihat lebih banyak contoh lengkap, kunjungi direktori layanan yang sesuai di halaman Landing with Terraform.