Topik ini menjelaskan cara menggunakan Terraform untuk membuat kluster ACK yang dikelola.
Anda dapat menjalankan kode contoh dalam topik ini dengan satu klik. Jalankan sekarang
Prasyarat
Container Service for Kubernetes (ACK) telah diaktifkan. Untuk informasi lebih lanjut tentang cara menggunakan Terraform untuk mengaktifkan ACK, lihat Gunakan Terraform untuk mengaktifkan ACK dan menetapkan peran layanan ke ACK.
Pasangan AccessKey telah dibuat untuk pengguna Resource Access Management (RAM) yang Anda gunakan untuk masuk.
CatatanSecara default, akun Alibaba Cloud memiliki izin penuh atas semua sumber daya yang dimiliki oleh akun tersebut. Kami menyarankan penggunaan akun RAM karena hanya memberikan izin terbatas pada sumber daya, sehingga meminimalkan risiko keamanan jika kredensial Anda dikompromikan.
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 akses ini memungkinkan pengguna RAM untuk membuat, melihat, dan menghapus VPC, vSwitch, serta 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:ModifyClusterNodePool", "vpc:DeleteVpc", "vpc:DeleteVSwitch", "cs:DeleteCluster", "cs:DeleteClusterNodepool" ], "Resource": "*" } ] }Persiapkan lingkungan runtime Terraform. Anda dapat menjalankan Terraform menggunakan salah satu metode berikut.
Gunakan Terraform di Terraform Explorer: Alibaba Cloud menyediakan lingkungan runtime online untuk Terraform yang dapat Anda gunakan tanpa instalasi. Metode ini cocok untuk skenario di mana Anda ingin menguji dan men-debug Terraform secara cepat dan nyaman tanpa biaya.
Cloud Shell: Cloud Shell telah dipasang sebelumnya dengan Terraform dan dikonfigurasi dengan kredensial identitas Anda. Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini merupakan cara cepat, nyaman, dan hemat biaya untuk menggunakan Terraform.
Gunakan Terraform di Resource Orchestration Service (ROS): ROS menyediakan kemampuan terkelola untuk Terraform. Anda dapat membuat template Terraform, mendefinisikan sumber daya Alibaba Cloud, AWS, atau Azure, serta mengonfigurasi parameter dan dependensi sumber daya.
Instal dan konfigurasikan Terraform di komputer Anda: Metode ini cocok untuk skenario di mana koneksi jaringan Anda buruk atau Anda memerlukan lingkungan pengembangan kustom.
PentingPastikan Anda menggunakan Terraform v0.12.28 atau versi yang lebih baru. Untuk memeriksa versi saat ini, jalankan perintah
terraform --version.
Sumber daya yang digunakan
Beberapa sumber daya dalam contoh ini dikenai biaya. Lepaskan sumber daya tersebut saat tidak lagi diperlukan untuk menghindari tagihan.
alicloud_zones: Menanyakan zona yang tersedia.
alicloud_instance_types: Menanyakan tipe instans ECS yang memenuhi kriteria tertentu.
alicloud_vpc: Membuat virtual private cloud (VPC).
alicloud_vswitch: Membuat satu atau beberapa vSwitch untuk membagi VPC menjadi subnet.
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 dari konsol
Jika contoh tidak berisi konfigurasi yang Anda perlukan atau kombinasi parameter Anda salah, Anda dapat menghasilkan parameter yang diperlukan dari konsol. Untuk melakukannya, ikuti langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik Cluster Templates.
Di kotak dialog yang muncul, pilih jenis kluster yang ingin Anda buat, klik Create, lalu konfigurasikan kluster di halaman Cluster Configurations.
Setelah menyelesaikan konfigurasi, klik Equivalent Code di pojok kanan atas halaman Confirm Configuration.
Di sidebar, klik tab Terraform. Parameter yang diperlukan untuk membuat kluster akan ditampilkan. Anda kemudian dapat menyalin dan menggunakan parameter tersebut.
Gunakan Terraform untuk membuat kluster ACK yang dikelola (Terway)
Contoh ini membuat kluster ACK yang dikelola yang berisi kelompok node biasa, kelompok node terkelola, dan kelompok node autoscaling. Secara default, serangkaian komponen diinstal pada kluster, seperti Terway (komponen jaringan), csi-plugin (komponen penyimpanan), csi-provisioner (komponen penyimpanan), komponen pengumpulan log, Nginx Ingress Controller, ack-arms-prometheus (komponen pemantauan), dan ack-node-problem-detector (komponen diagnostik node).
Buat direktori kerja. Di direktori kerja, buat file konfigurasi bernama main.tf. Salin kode berikut ke file main.tf.
provider "alicloud" { region = var.region_id } variable "region_id" { type = string default = "cn-shenzhen" } variable "cluster_spec" { type = string description = "Spesifikasi kluster dari kluster kubernetes, yang bisa kosong. Nilai yang valid: ack.standard : Kluster terkelola standar; ack.pro.small : Kluster terkelola profesional." default = "ack.pro.small" } # Zona dari vSwitch. variable "availability_zone" { description = "Zona ketersediaan dari vswitch." default = ["cn-shenzhen-c", "cn-shenzhen-e", "cn-shenzhen-f"] } # Daftar ID vSwitch. variable "node_vswitch_ids" { description = "Daftar ID vswitch node yang sudah ada untuk terway." type = list(string) default = [] } # Daftar blok CIDR untuk membuat vSwitch baru. variable "node_vswitch_cidrs" { description = "Daftar blok cidr yang digunakan untuk membuat beberapa vswitch baru ketika 'node_vswitch_ids' tidak ditentukan." type = list(string) default = ["172.16.0.0/23", "172.16.2.0/23", "172.16.4.0/23"] } # Konfigurasi komponen jaringan Terway. Jika ini kosong, vSwitch Terway baru dibuat berdasarkan terway_vswitch_cidrs secara default. variable "terway_vswitch_ids" { description = "Daftar ID vswitch pod yang sudah ada untuk terway." type = list(string) default = [] } # Blok CIDR untuk membuat vSwitch untuk Terway ketika terway_vswitch_ids tidak ditentukan. variable "terway_vswitch_cidrs" { description = "Daftar blok cidr yang digunakan untuk membuat beberapa vswitch baru ketika 'terway_vswitch_ids' tidak ditentukan." type = list(string) default = ["172.16.208.0/20", "172.16.224.0/20", "172.16.240.0/20"] } # Tipe instans ECS untuk meluncurkan node pekerja. variable "worker_instance_types" { description = "Tipe instans ECS yang digunakan untuk meluncurkan node pekerja." default = ["ecs.g6.2xlarge", "ecs.g6.xlarge"] } # Komponen yang akan diinstal di kluster ACK. Termasuk Terway (komponen jaringan), csi-plugin (komponen penyimpanan), csi-provisioner (komponen penyimpanan), loongcollector (komponen log), Nginx Ingress Controller, ack-arms-prometheus (komponen pemantauan), dan ack-node-problem-detector (komponen diagnostik node). variable "cluster_addons" { type = list(object({ name = string config = string })) default = [ { "name" = "terway-eniip", "config" = "", }, { "name" = "loongcollector", "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" = "", } ] } # Awalan nama untuk kluster ACK yang dikelola. variable "k8s_name_prefix" { description = "Awalan nama yang digunakan untuk membuat kluster kubernetes terkelola." default = "tf-ack-shenzhen" } # Nama sumber daya default. locals { k8s_name_terway = substr(join("-", [var.k8s_name_prefix, "terway"]), 0, 63) k8s_name_flannel = substr(join("-", [var.k8s_name_prefix, "flannel"]), 0, 63) k8s_name_ask = substr(join("-", [var.k8s_name_prefix, "ask"]), 0, 63) new_vpc_name = "tf-vpc-172-16" new_vsw_name_azD = "tf-vswitch-azD-172-16-0" new_vsw_name_azE = "tf-vswitch-azE-172-16-2" new_vsw_name_azF = "tf-vswitch-azF-172-16-4" nodepool_name = "default-nodepool" managed_nodepool_name = "managed-node-pool" autoscale_nodepool_name = "autoscale-node-pool" log_project_name = "log-for-${local.k8s_name_terway}" } # Konfigurasi instans ECS untuk node. Menanyakan tipe instans ECS yang memenuhi persyaratan 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" } # VPC. resource "alicloud_vpc" "default" { vpc_name = local.new_vpc_name cidr_block = "172.16.0.0/12" } # vSwitch node. resource "alicloud_vswitch" "vswitches" { count = length(var.node_vswitch_ids) > 0 ? 0 : 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_ids) > 0 ? 0 : 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 Kubernetes. cluster_spec = var.cluster_spec # Membuat kluster edisi Pro. vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id)) # vSwitch untuk 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 Pod. new_nat_gateway = true # Menentukan apakah akan membuat Gateway NAT baru saat membuat kluster Kubernetes. Nilai default: true. service_cidr = "10.11.0.0/16" # Blok CIDR layanan. Parameter ini wajib diisi ketika cluster_network_type diatur ke flannel. Blok CIDR layanan tidak boleh sama dengan blok CIDR VPC atau blok CIDR kluster Kubernetes lain di VPC. Anda tidak dapat mengubah blok CIDR layanan setelah kluster dibuat. Jumlah maksimum host di kluster adalah 256. slb_internet_enabled = true # Menentukan apakah akan membuat instance Server Load Balancer yang menghadap Internet untuk server API. Nilai default: false. enable_rrsa = true control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # Log bidang 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) } } } # Kelompok node biasa. resource "alicloud_cs_kubernetes_node_pool" "default" { cluster_id = alicloud_cs_managed_kubernetes.default.id # Nama kluster Kubernetes. node_pool_name = local.nodepool_name # Nama kelompok node. vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id)) # vSwitch untuk kelompok node. Tentukan satu atau beberapa ID vSwitch. vSwitch harus berada di zona yang ditentukan oleh availability_zone. instance_types = var.worker_instance_types instance_charge_type = "PostPaid" desired_size = 2 # Jumlah node yang diharapkan di kelompok node. install_cloud_monitor = true # Menentukan apakah akan menginstal CloudMonitor pada node Kubernetes. system_disk_category = "cloud_efficiency" system_disk_size = 100 image_type = "AliyunLinux" data_disks { # Konfigurasi disk data untuk node. category = "cloud_essd" # Kategori disk data. size = 120 # Ukuran disk data. } } # Membuat kelompok node terkelola. resource "alicloud_cs_kubernetes_node_pool" "managed_node_pool" { cluster_id = alicloud_cs_managed_kubernetes.default.id # Nama kluster Kubernetes. node_pool_name = local.managed_nodepool_name # Nama kelompok node. vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id)) # vSwitch untuk kelompok node. Tentukan satu atau beberapa ID vSwitch. vSwitch harus berada di zona yang ditentukan oleh availability_zone. desired_size = 0 # Jumlah node yang diharapkan di kelompok node. management { auto_repair = true auto_upgrade = true max_unavailable = 1 } instance_types = var.worker_instance_types instance_charge_type = "PostPaid" install_cloud_monitor = true system_disk_category = "cloud_efficiency" system_disk_size = 100 image_type = "AliyunLinux" data_disks { category = "cloud_essd" size = 120 } } # Membuat kelompok node autoscaling. Kelompok node dapat diskalakan hingga maksimal 10 node dan harus mempertahankan 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 install_cloud_monitor = true # Menentukan apakah akan menginstal CloudMonitor pada node Kubernetes. system_disk_category = "cloud_efficiency" system_disk_size = 100 image_type = "AliyunLinux3" data_disks { # Konfigurasi disk data untuk node. category = "cloud_essd" # Kategori disk data. size = 120 # Ukuran disk data. } }Jalankan perintah berikut untuk menginisialisasi lingkungan runtime Terraform.
terraform initKeluaran berikut menunjukkan bahwa inisialisasi berhasil.
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.Buat rencana eksekusi dan pratinjau perubahan.
terraform planJalankan perintah berikut untuk membuat kluster.
terraform applySaat diminta, masukkan
yesdan tekan tombol Enter. Tunggu hingga perintah selesai dijalankan. Keluaran berikut menunjukkan bahwa kluster ACK telah dibuat.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_managed_kubernetes.default: Creation complete after 5m48s [id=ccb53e72ec6c447c990762800********] ... Apply complete! Resources: 11 added, 0 changed, 0 destroyed.Hasil verifikasi
Jalankan perintah terraform show
Anda dapat menjalankan perintah berikut untuk melihat detail sumber daya yang dibuat oleh Terraform.
terraform showMasuk ke Konsol ACK
Masuk ke Konsol Container Service for Kubernetes untuk melihat kluster yang telah dibuat.
Bersihkan sumber daya
Saat Anda tidak lagi memerlukan sumber daya yang dibuat atau dikelola oleh Terraform, jalankan perintah terraform destroy untuk melepaskannya. Untuk informasi lebih lanjut tentang terraform destroy, lihat Perintah umum.
terraform destroy