Saat lonjakan lalu lintas melebihi kapasitas node Elastic Compute Service (ECS), Pod gerbang masuk ASM memerlukan tempat untuk meluap. Dengan menjadwalkan Pod gerbang ke node virtual yang didukung oleh Elastic Container Instance (ECI), Pod tersebut secara otomatis diskalakan ke infrastruktur serverless tanpa perlu provisioning atau pemeliharaan node.
Dalam kondisi normal, Pod gerbang berjalan pada node ECS yang telah diberi label. Ketika node tersebut mencapai kapasitas penuh, Pod meluap ke ECI melalui node virtual. Konfigurasi ini memanfaatkan primitif penjadwalan Kubernetes—afinitas node, taint, dan toleransi—untuk mengontrol lokasi penempatan Pod.
Jika gerbang ASM Anda berjalan di kluster Serverless Kubernetes (ASK), Pod secara default sudah berjalan di ECI. Lewati topik ini dan lihat Buat layanan gerbang masuk sebagai gantinya.
Cara kerja
Konfigurasi ini mengandalkan tiga mekanisme penjadwalan Kubernetes yang bekerja bersama:
| Mekanisme | Peran |
|---|---|
| Taint + Toleration | Node virtual memiliki taint default virtual-kubelet.io/provider=alibabacloud:NoSchedule untuk mencegah penggunaan ECI secara tidak sengaja. Anda menambahkan taint khusus ke node ECS untuk membatasi penggunaannya hanya untuk Pod gerbang. Pod gerbang harus memiliki toleransi terhadap kedua taint tersebut. |
| Afinitas node wajib | Kendala keras yang membatasi penempatan Pod hanya pada dua jenis node: node ECS berlabel Anda atau node virtual. Pod tidak dapat ditempatkan pada node yang tidak relevan. |
| Afinitas node yang diutamakan | Kendala lunak dengan bobot. Node ECS diberi bobot 80 (sangat diprioritaskan) dan node virtual diberi bobot 20 (cadangan). Saat node ECS memiliki kapasitas, Pod berjalan di sana. Saat node ECS penuh, Pod meluap ke ECI. |
Untuk detail lebih lanjut, lihat dokumentasi Kubernetes tentang Taints and Tolerations dan Assigning Pods to Nodes.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster Container Service for Kubernetes (ACK) (ACK standard, ACK Pro, atau ACK dedicated) yang telah ditambahkan ke instans ASM
Komponen ack-virtual-node telah diterapkan di kluster ACK Anda
Gerbang masuk telah diterapkan di instans ASM
Konfigurasikan peluapan elastis untuk gerbang
Prosedur ini terdiri dari empat langkah: memberi label pada node ECS untuk Pod gerbang, memberi taint pada node untuk mengecualikan beban kerja lain, mengonfigurasi YAML gerbang dengan aturan afinitas dan toleransi, serta memverifikasi penerapan.
Langkah 1: Beri label pada node target
Tambahkan label ke node ECS tempat Pod gerbang seharusnya berjalan secara default.
Dapatkan nama node di kluster Anda:
kubectl get nodesTambahkan label ke node target: Ganti
<node-name>dengan nama node aktual dari langkah 1.# Sintaks kubectl label nodes <node-name> <label-key>=<label-value> # Contoh kubectl label nodes node1 mykey4pod=asmgateway
Langkah 2: Beri taint pada node
Tambahkan taint khusus agar hanya Pod dengan toleransi yang sesuai yang dapat berjalan di node ini:
kubectl taint nodes node1 mykey=myvalue:NoScheduleTaint ini menggunakan kunci mykey, nilai myvalue, dan efek NoSchedule. Hanya Pod yang secara eksplisit mentoleransi taint ini yang dapat dijadwalkan di node1.
Langkah 3: Tambahkan afinitas node dan toleransi ke gerbang
Perbarui YAML gerbang untuk mengarahkan Pod ke node ECS berlabel secara default, dengan peluapan otomatis ke ECI saat node mencapai kapasitas penuh.
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.
Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.
Temukan gerbang target dan klik YAML.
Di kotak dialog Edit, tambahkan konten berikut ke bidang
spec, lalu klik OK. Tabel berikut menjelaskan perilaku penjadwalan:PentingPastikan pasangan kunci-nilai label di
matchExpressionssesuai dengan label yang Anda tambahkan di Langkah 1, dan pasangan kunci-nilai toleransi sesuai dengan taint yang Anda tambahkan di Langkah 2. Nilai yang tidak cocok menyebabkan Pod tetap dalam status Pending.Bidang Fungsinya preferredDuringSchedulingIgnoredDuringExecutionMenetapkan preferensi penjadwalan lunak dengan bobot relatif. Node ECS (bobot 80) sangat diprioritaskan dibandingkan ECI (bobot 20). Saat node ECS memiliki kapasitas, Pod berjalan di sana. Saat penuh, Pod meluap ke ECI melalui node virtual. requiredDuringSchedulingIgnoredDuringExecutionMenentukan kendala keras. Pod hanya dapat dijadwalkan pada node yang sesuai dengan label khusus ( mykey4pod=asmgateway) atau label node virtual (type=virtual-kubelet). Ini mencegah Pod ditempatkan pada node yang tidak relevan.tolerations[0]Memungkinkan Pod berjalan di node virtual dengan mentoleransi taint default virtual-kubelet.io/provider=alibabacloud:NoSchedule. Tanpa toleransi ini, Pod tidak dapat menggunakan ECI.tolerations[1]Sesuai dengan taint khusus ( mykey=myvalue:NoSchedule) yang ditambahkan di Langkah 2, sehingga memungkinkan Pod berjalan di node ECS berlabel.affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - preference: matchExpressions: - key: type operator: In values: - virtual-kubelet weight: 20 - preference: matchExpressions: - key: mykey4pod operator: In values: - asmgateway weight: 80 requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: mykey4pod operator: In values: - asmgateway - matchExpressions: - key: type operator: In values: - virtual-kubelet tolerations: - effect: NoSchedule key: virtual-kubelet.io/provider operator: Equal value: alibabacloud - effect: NoSchedule key: mykey operator: Equal value: myvalue
Langkah 4: Verifikasi penerapan
Konfirmasi bahwa Pod gerbang berjalan di node yang diharapkan.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, pilih Workloads > Pods.
Di halaman Pods, pilih istio-system dari daftar drop-down Namespace.
Periksa kolom Node untuk Pod gerbang:
Dalam beban normal, Pod seharusnya muncul di node ECS berlabel Anda (
node1).Saat kapasitas ECS habis, Pod seharusnya muncul di node virtual.