Set penyebaran berisi instance Elastic Compute Service (ECS) yang didistribusikan di beberapa server fisik. Anda dapat menggunakan set penyebaran untuk meningkatkan ketersediaan aplikasi dan menerapkan pemulihan bencana. Kolam node yang dikaitkan dengan set penyebaran berisi node ECS yang didistribusikan di beberapa server fisik. Dengan mengonfigurasi afinitas pod, Anda dapat menyebarkan pod aplikasi ke node ECS yang berbeda, sehingga meningkatkan ketersediaan aplikasi dan memastikan pemulihan bencana. Topik ini menjelaskan cara menggunakan Terraform untuk mengaitkan set penyebaran dengan kolam node.
Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik. Klik di sini untuk menjalankan kode contoh.
Prasyarat
Lingkungan runtime untuk Terraform disiapkan 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 hemat biaya, efisien, dan nyaman.
Gunakan Terraform di Cloud Shell: Cloud Shell sudah terinstal dengan Terraform dan dikonfigurasikan dengan kredensial identitas Anda. Anda dapat menjalankan perintah Terraform di Cloud Shell. Cocok untuk skenario hemat biaya, efisien, dan nyaman.
Gunakan Terraform di ROS: Resource Orchestration Service (ROS) mendukung integrasi template Terraform. Dengan menggunakan Terraform bersama ROS, Anda dapat mendefinisikan dan mengelola sumber daya di Alibaba Cloud, Amazon Web Services (AWS), atau Microsoft Azure, menentukan parameter sumber daya, dan mengonfigurasikan hubungan dependensi.
Instal dan konfigurasikan Terraform pada mesin lokal Anda: Cocok untuk skenario di mana koneksi jaringan tidak stabil atau lingkungan pengembangan kustom diperlukan.
CatatanTerraform versi 0.12.28 atau lebih baru telah diinstal. Anda dapat menjalankan perintah terraform --version untuk memeriksa versi Terraform.
Pastikan kuota ECS yang cukup dalam set penyebaran dan ketersediaan inventaris yang memadai untuk tipe instance ECS yang ditentukan. Secara default, setiap set penyebaran dapat berisi hingga 20 instance ECS di setiap zona. Untuk informasi lebih lanjut, lihat Kelola Kuota ECS.
Sebuah pasangan AccessKey telah dibuat untuk pengguna Manajemen Akses Sumber Daya (RAM) yang Anda gunakan untuk masuk.
CatatanSecara default, akun Alibaba Cloud memiliki izin penuh atas semua sumber daya yang dimiliki oleh akun tersebut. Kami merekomendasikan menggunakan akun RAM karena memberikan izin sumber daya yang 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 Berikan Izin kepada Pengguna RAM.
Kebijakan ini memungkinkan pengguna Manajemen Akses Sumber Daya (RAM) untuk membuat, melihat, dan menghapus virtual private cloud (VPC), vSwitch, set penyebaran, dan klaster 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", "ecs:CreateDeploymentSet", "ecs:DescribeDeploymentSets", "ecs:ModifyDeploymentSetAttribute", "ecs:DeleteDeploymentSet" ], "Resource": "*" } ] }
Informasi latar belakang
Untuk memastikan ketersediaan tinggi aplikasi Anda di suatu zona, Anda harus menyebarkan aplikasi di beberapa host. Namun, ketika server fisik mati, semua pod aplikasi terpengaruh. Untuk menyelesaikan masalah ini, Anda dapat menggunakan set penyebaran yang disediakan oleh ECS. Instance ECS dalam set penyebaran didistribusikan di beberapa server fisik dan diisolasi satu sama lain. Ini membantu mencegah gangguan layanan yang disebabkan oleh titik kegagalan tunggal. Untuk informasi lebih lanjut tentang set penyebaran, lihat Set Penyebaran.
Batasan
Panduan penggunaan fitur klaster
Set penyebaran didukung oleh klaster ACK khusus dan klaster ACK dikelola.
Anda hanya dapat mengaitkan set penyebaran dengan kolam node saat membuat kolam node. Kolam node yang ada tidak dapat memiliki set penyebaran yang diaktifkan. Anda hanya dapat mengaitkan satu set penyebaran dengan setiap kolam node.
Anda tidak dapat menambahkan instance ECS secara manual ke atau menghapus instance ECS dari set penyebaran. Jika Anda ingin mengubah jumlah instance ECS dalam set penyebaran, Anda dapat menskalakan kolam node yang dikaitkan dengan set penyebaran tersebut. Untuk informasi lebih lanjut, lihat Buat dan Kelola Kolam Node.
Setelah Anda mengaitkan set penyebaran dengan kolam node, kolam node tidak mendukung instance preemptible.
Batasan kuota dan spesifikasi set penyebaran
Batasan Kuota Set Penyebaran
Secara default, set penyebaran kolam node diimplementasikan berdasarkan strategi ketersediaan tinggi. Dalam set penyebaran yang mengadopsi strategi ketersediaan tinggi, Anda dapat membuat hingga 20 instance ECS per zona. Anda dapat menggunakan rumus berikut untuk menghitung jumlah maksimum instance ECS yang dapat Anda buat dalam set penyebaran di wilayah Alibaba Cloud:
20 × Jumlah zona dalam wilayah. Pastikan ada instance ECS yang cukup dalam set penyebaran dan stok yang memadai untuk tipe instance yang diperlukan. Untuk informasi lebih lanjut, lihat Set Penyebaran.Anda tidak dapat meningkatkan jumlah instance ECS dalam set penyebaran. Namun, jika Anda ingin meningkatkan jumlah maksimum set penyebaran yang dapat dimiliki akun Alibaba Cloud Anda, ajukan permintaan peningkatan kuota di konsol Pusat Kuota. Untuk informasi lebih lanjut tentang batasan dan kuota set penyebaran, lihat Set Penyebaran.
Sumber daya instance yang tidak mencukupi di wilayah tersebut dapat mengakibatkan kegagalan dalam membuat instance ECS atau memulai instance pay-as-you-go yang dihentikan dalam mode ekonomis dalam set penyebaran. Tunggu sejenak dan coba buat atau mulai ulang instance tersebut lagi.
Batasan Keluarga Instance
Strategi penyebaran yang dapat digunakan mungkin bervariasi berdasarkan keluarga instance. Tabel berikut menggambarkan strategi penyebaran yang didukung oleh berbagai keluarga instance.
CatatanUntuk memeriksa keluarga instance yang mendukung strategi penyebaran tertentu, panggil operasi DescribeDeploymentSetSupportedInstanceTypeFamily.
Strategi Penyebaran
Keluarga Instance yang Mendukung Strategi Penyebaran
Strategi ketersediaan tinggi atau strategi grup ketersediaan tinggi
g8a, g8i, g8y, g7se, g7a, g7, g7h, g7t, g7ne, g7nex, g6, g6e, g6a, g5, g5ne, sn2ne, sn2, and sn1
c8a, c8i, c8y, c7se, c7, c7t, c7nex, c7a, c6, c6a, c6e, c5, ic5, and sn1ne
r8a, r8i, r8y, r7, r7se, r7t, r7a, r6, r6e, r6a, re6, re6p, r5, re4, se1ne, and se1
hfc8i, hfg8i, hfr8i, hfc7, hfg7, hfr7, hfc6, hfg6, hfr6, hfc5, and hfg5
d3c, d2s, d2c, d1, d1ne, d1-c14d3, and d1-c8d3
i3g, i3, i2, i2g, i2ne, i2gne, and i1
ebmg5, ebmc7, ebmg7, ebmr7, sccgn6, scch5, scch5s, sccg5, and sccg5s
e, t6, xn4, mn4, n4, e4, n2, and n1
gn6i
Strategi latensi rendah
g8a, g8i, g8ae, and g8y
c8a, c8i, c8ae, and c8y
ebmc8i, ebmg8i, and ebmr8i
r8a, r8i, r8ae, and r8y
ebmc7, ebmg7, and ebmr7
Sumber daya yang diperlukan
Biaya akan dikenakan untuk sumber daya tertentu yang digunakan dalam contoh ini. Lepaskan atau berhenti berlangganan sumber daya tersebut ketika Anda tidak lagi membutuhkannya.
alicloud_vpc: membuat VPC.
alicloud_vswitch: membuat vSwitch dalam VPC untuk membuat subnet untuk VPC.
alicloud_ecs_deployment_set: membuat set penyebaran.
alicloud_cs_managed_kubernetes: membuat klaster ACK dikelola.
alicloud_cs_kubernetes_node_pool: membuat kolam node untuk klaster ACK dikelola.
Gunakan Terraform untuk membuat kolam node dan mengaitkan set penyebaran dengan kolam node
Gunakan template berikut untuk membuat kolam node dan mengaitkan set penyebaran dengan kolam node:
provider "alicloud" { region = var.region_id } variable "region_id" { type = string default = "cn-shenzhen" } variable "name" { default = "tf-example" } variable "strategy" { default = "Availability" description = "Strategi penyebaran. Nilai valid: Availability, AvailabilityGroup, LowLatency." } variable "cluster_spec" { type = string description = "Spesifikasi klaster Kubernetes, yang bisa kosong. Nilai valid: ack.standard : Klaster dikelola standar; ack.pro.small : Klaster dikelola profesional." default = "ack.pro.small" } # Tentukan zona vSwitches. variable "availability_zone" { description = "Zona ketersediaan vSwitches." default = ["cn-shenzhen-c", "cn-shenzhen-e", "cn-shenzhen-f"] } # Blok CIDR yang digunakan untuk membuat vSwitches. 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 vSwitches 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 instance ECS dari node pekerja. variable "worker_instance_types" { description = "Tipe instance 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 instance ECS." default = "Test123456" } # Tentukan komponen yang ingin Anda instal di klaster ACK dikelola. Komponen termasuk Terway (plugin jaringan), csi-plugin (plugin volume), csi-provisioner (plugin volume), logtail-ds (plugin logging), controller NGINX Ingress, ack-arms-prometheus (plugin monitoring), dan ack-node-problem-detector (plugin diagnosa 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" = "", } ] } # Tentukan awalan nama klaster ACK dikelola. variable "k8s_name_prefix" { description = "Awalan nama yang digunakan untuk membuat klaster Kubernetes dikelola." default = "tf-ack" } variable "vpc_name" { default = "tf-vpc" } variable "nodepool_name" { default = "default-nodepool" } # Nama sumber daya default. locals { k8s_name_terway = substr(join("-", [var.k8s_name_prefix, "terway"]), 0, 63) } # VPC. resource "alicloud_vpc" "default" { vpc_name = var.vpc_name cidr_block = "172.16.0.0/12" } # vSwitches 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) } # vSwitches 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) } # Buat set penyebaran. resource "alicloud_ecs_deployment_set" "default" { strategy = var.strategy domain = "Default" granularity = "Host" deployment_set_name = var.name description = "example_value" } # Klaster ACK dikelola. resource "alicloud_cs_managed_kubernetes" "default" { name = local.k8s_name_terway # Nama klaster ACK. cluster_spec = var.cluster_spec # Buat klaster ACK Pro. worker_vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id)) # vSwitches yang digunakan oleh kolam node. Tentukan satu atau lebih ID vSwitch. vSwitches harus berada di zona yang ditentukan oleh availability_zone. pod_vswitch_ids = split(",", join(",", alicloud_vswitch.terway_vswitches.*.id)) # vSwitches yang digunakan oleh pod. new_nat_gateway = true # Tentukan apakah akan membuat NAT gateway saat klaster 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 diperlukan. Blok CIDR pod tidak boleh sama dengan blok CIDR VPC atau blok CIDR klaster ACK lainnya di VPC. Anda tidak dapat mengubah blok CIDR pod setelah klaster dibuat. Jumlah maksimum host dalam klaster: 256. slb_internet_enabled = true # Tentukan apakah akan membuat instance SLB yang menghadap internet untuk server API klaster. Nilai default: false. enable_rrsa = true control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # Log kontrol plane. 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) } } } # Kolam node reguler. resource "alicloud_cs_kubernetes_node_pool" "default" { cluster_id = alicloud_cs_managed_kubernetes.default.id # Nama klaster ACK. node_pool_name = var.nodepool_name # Nama kolam node. vswitch_ids = split(",", join(",", alicloud_vswitch.vswitches.*.id)) # vSwitches yang digunakan oleh kolam node. Tentukan satu atau lebih ID vSwitch. vSwitches harus berada di zona yang ditentukan oleh availability_zone. instance_types = var.worker_instance_types instance_charge_type = "PostPaid" runtime_name = "containerd" desired_size = 2 # Jumlah node yang diharapkan dalam kolam node. password = var.password # Kata sandi yang digunakan untuk masuk ke klaster menggunakan SSH. install_cloud_monitor = true # Tentukan apakah akan menginstal agen CloudMonitor pada node dalam klaster. system_disk_category = "cloud_essd" system_disk_size = 100 image_type = "AliyunLinux" deployment_set_id = alicloud_ecs_deployment_set.default.id data_disks { # Konfigurasi disk data node. category = "cloud_essd" # Kategori 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 berikut untuk membuat kolam node:
terraform applyJika informasi berikut dikembalikan, kolam node telah dikaitkan dengan set penyebaran:
Apakah Anda ingin melakukan tindakan ini? Terraform akan melakukan tindakan yang dijelaskan di atas. Hanya 'yes' yang akan diterima untuk menyetujui. Masukkan nilai: yes ... Apply complete! Resources: 10 ditambahkan, 0 diubah, 0 dihapus.Verifikasi hasilnya
Jalankan perintah terraform show
Jalankan perintah berikut untuk memeriksa sumber daya yang dibuat oleh Terraform:
terraform show
Masuk ke konsol ACK
Anda dapat menemukan kolam node yang Anda buat di halaman Node Pools di konsol ACK. Anda dapat mengklik Edit di kolom Actions untuk melihat set penyebaran yang terkait.
Bersihkan sumber daya
Jika Anda tidak lagi memerlukan sumber daya yang dibuat atau dikelola oleh Terraform sebelumnya, jalankan perintah terraform destroy untuk melepaskan sumber daya. Untuk informasi lebih lanjut tentang perintah terraform destroy, lihat Perintah Umum.
terraform destroyContoh
Anda dapat menjalankan kode contoh dalam topik ini hanya dengan beberapa klik. Klik di sini untuk menjalankan kode contoh.
Kode contoh
Jika Anda ingin melihat contoh yang lebih lengkap, kunjungi Contoh Lainnya dan pilih direktori layanan cloud yang sesuai.
Referensi
Untuk informasi lebih lanjut tentang cara mengontrol distribusi instance ECS dalam kolam node, lihat Praktik Terbaik untuk Mengaitkan Set Penyebaran dengan Kolam Node.
Terraform tersedia sebagai layanan terkelola di ROS. Anda dapat menyebarkan template Terraform di konsol ROS. Untuk informasi lebih lanjut, lihat Buat Tumpukan Terraform.