Menetapkan node khusus untuk Pod gateway ASM mengisolasi lalu lintas gateway dari beban kerja aplikasi dan meningkatkan ketersediaan gateway. Anda memberi label pada node, menerapkan taint agar menolak Pod lain, lalu mengonfigurasi gateway ASM dengan node affinity dan tolerations sehingga Pod-nya hanya dijadwalkan ke node tersebut.
Cara kerja
Tiga mekanisme penjadwalan Kubernetes bekerja bersama untuk mematok Pod gateway ke node khusus:
| Mekanisme | Peran |
|---|---|
| Label Node | Mengidentifikasi node mana yang ditetapkan untuk gateway |
| Taints | Menolak semua pod yang tidak memiliki toleration yang sesuai, sehingga beban kerja non-gateway tidak masuk ke node khusus |
| Afinitas node | Menarik pod gateway ke node dengan label tertentu |
| Tolerations | Memungkinkan pod gateway dijadwalkan ke node yang memiliki taint |
Taint dan toleransi bekerja bersama untuk mencegah sistem menjadwalkan Pod ke node yang tidak sesuai. Satu atau beberapa taint dapat diterapkan pada sebuah node.
Jika sebuah Pod tidak mentolerir taint tertentu, node dengan taint yang sesuai tidak akan menerima Pod tersebut.
Jika sebuah Pod mentolerir taint tertentu, Pod tersebut dapat—namun tidak wajib—dijadwalkan ke node dengan taint yang sesuai.
Dengan konfigurasi ini, Pod non-gateway tidak masuk ke node khusus (dipaksakan oleh taint), sedangkan Pod gateway hanya dijalankan di node tersebut (dipaksakan oleh afinitas node).
Prasyarat
Langkah 1: Beri label pada node target
Label mengidentifikasi node mana yang dicadangkan untuk Pod gateway.
Daftar semua node dalam kluster:
kubectl get nodesOutput-nya mirip seperti berikut:
NAME STATUS ROLES AGE VERSION node1 Ready <none> 30d v1.24.6 node2 Ready <none> 30d v1.24.6 node3 Ready <none> 30d v1.24.6Tambahkan label ke node yang akan menjalankan Pod gateway:
# Sintaks kubectl label nodes <node-name> <label-key>=<label-value> # Contoh kubectl label nodes node1 mykey4pod=asmgatewayOutput-nya mirip seperti berikut:
node/node1 labeled
Langkah 2: Beri taint pada node
Taint mencegah Pod tanpa toleration yang sesuai dijadwalkan ke node tersebut. Hal ini menjaga beban kerja aplikasi agar tidak masuk ke node gateway khusus.
Jalankan perintah berikut untuk memberi taint pada node:
kubectl taint nodes node1 mykey=myvalue:NoScheduleOutput-nya mirip seperti berikut:
node/node1 taintedEfek NoSchedule berarti hanya Pod dengan toleration yang sesuai dengan kunci mykey, nilai myvalue, dan efek NoSchedule yang dapat dijadwalkan ke node1.
Langkah 3: Konfigurasikan afinitas node dan toleransi pada gateway ASM
Login ke Konsol ASM.
Pada panel navigasi sebelah kiri, pilih Service Mesh > Mesh Management.
Pada halaman Mesh Management, klik nama instans ASM.
Pada panel navigasi sebelah kiri, pilih ASM Gateways > Ingress Gateway.
Pada halaman Ingress Gateway, temukan gateway target lalu klik YAML.
Pada kotak dialog Edit, tambahkan konfigurasi berikut ke bidang
spec, lalu klik OK.CatatanTip: Untuk mencocokkan taint tanpa memperhatikan nilainya, gunakan
operator: "Exists"alih-alihoperator: "Equal"dan hilangkan bidangvalue.Bidang Nilai Deskripsi nodeAffinityrequiredDuringSchedulingIgnoredDuringExecutionPenjadwal harus menempatkan pod gateway pada node yang diberi label mykey4pod=asmgateway. Jika tidak ada node yang sesuai, pod tidak akan dijadwalkan.tolerations.operatorEqualMencocokkan taint dari Langkah 2, memungkinkan pod gateway dijadwalkan ke node yang memiliki taint. affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: mykey4pod operator: In values: - asmgateway tolerations: - key: "mykey" operator: "Equal" value: "myvalue" effect: "NoSchedule"
Verifikasi hasil
Setelah Pod gateway restart, pastikan Pod tersebut berjalan di node yang diharapkan.
Opsi 1: Konsol ACK
Login ke Konsol ACK.
Pada panel navigasi sebelah kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster.
Pada panel navigasi sebelah kiri, pilih Workloads > Pods.
Pada halaman Pods, pilih istio-system dari daftar drop-down Namespace.
Temukan Pod gateway dan verifikasi bahwa kolom Node menampilkan node yang diharapkan (misalnya,
node1).
Opsi 2: kubectl
Jalankan perintah berikut:
kubectl get pods -n istio-system -o wide | grep <gateway-name>Output-nya mirip seperti berikut:
ingressgateway-xxxx-yyyy 1/1 Running 0 5m 10.0.1.12 node1 <none> <none>Jika kolom Node menampilkan node1, berarti Pod gateway telah dijadwalkan ke node khusus.
Langkah selanjutnya
Untuk menjadwalkan Pod gateway ke beberapa node khusus demi ketersediaan yang lebih tinggi, beri label dan taint pada node tambahan, lalu tambahkan label tersebut ke daftar nilai
matchExpressions.Untuk informasi lebih lanjut tentang penjadwalan Kubernetes, lihat Taints and Tolerations dan Assigning Pods to Nodes dalam dokumentasi Kubernetes.