Saat menggunakan NGINX Ingress Controller, pod tempat controller berjalan bertindak sebagai titik masuk dan pengarah lalu lintas utama. Keandalan mereka menentukan keandalan keseluruhan controller tersebut. Secara default, NGINX Ingress Controller menggunakan dua pod setelah instalasi, yang cukup untuk sebagian besar skenario. Anda dapat meningkatkan keandalan dengan mengontrol jumlah pod dan metode penjadwalan.
Prasyarat
NGINX Ingress Controller telah diinstal. Untuk informasi lebih lanjut, lihat Mengelola NGINX Ingress Controller.
Klien kubectl terhubung ke klaster ACK. Untuk informasi lebih lanjut, lihat Memperoleh file kubeconfig klaster dan menggunakan kubectl untuk terhubung ke klaster.
Lihat pod default yang diterapkan untuk NGINX Ingress Controller
Setelah NGINX Ingress Controller diinstal, aplikasi yang menyediakan dua pod diterapkan di dalam klaster.
Jalankan perintah berikut untuk melihat pod tempat NGINX Ingress Controller diterapkan:
kubectl -n kube-system get pod | grep nginx-ingress-controllerOutput yang Diharapkan:
nginx-ingress-controller-*****nxs 1/1 Running 0 3h
nginx-ingress-controller-*****9pm 1/1 Running 0 3hCara memastikan keandalan tinggi untuk NGINX Ingress Controller
NGINX Ingress Controller secara default menggunakan konfigurasi afinitas, memastikan bahwa hanya satu pod milik controller yang diterapkan per node. Pastikan jumlah pod tidak melebihi jumlah node di dalam klaster.
Tingkatkan jumlah pod tempat controller berjalan
Menambah jumlah pod tempat controller berjalan dapat mencegah situasi di mana satu pod gagal.
Jalankan perintah
kubectl scaleuntuk melakukan penskalaan pada deployment NGINX Ingress Controller. Perintah berikut meningkatkan jumlah pod menjadi tiga.kubectl -n kube-system scale --replicas=3 deployment/nginx-ingress-controllerOutput yang Diharapkan:
deployment.extensions/nginx-ingress-controller scaledJalankan perintah berikut untuk melihat pod tempat NGINX Ingress Controller berjalan:
kubectl -n kube-system get pod | grep nginx-ingress-controllerOutput yang Diharapkan:
nginx-ingress-controller-******** 1/1 Running 0 3h nginx-ingress-controller-******** 1/1 Running 0 3h nginx-ingress-controller-******** 1/1 Running 0 33s
Jadwalkan pod ke node spesifikasi tinggi
Menjadwalkan pod ke node spesifikasi tinggi dapat mencegah degradasi performa atau eviksi pod karena sumber daya node yang tidak mencukupi.
Jalankan perintah berikut untuk melihat penggunaan sumber daya saat ini dari klaster:
kubectl top nodesOutput yang Diharapkan:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% cn-shanghai.********.230 71m 1% 1712Mi 31% cn-shanghai.********.226 63m 1% 1669Mi 30% cn-shanghai.********.229 125m 3% 2545Mi 46% cn-shanghai.********.253 152m 3% 3804Mi 69%Output menunjukkan sumber daya CPU dan memori yang sudah digunakan oleh setiap node. Pilih node dengan sumber daya surplus lebih banyak untuk penjadwalan.
Jalankan perintah berikut untuk menambah label
node-role.kubernetes.io/ingress="true"ke node. Dalam contoh berikut, label ditambahkan ke nodecn-shanghai.********.226dancn-shanghai.********.230dengan sumber daya CPU surplus lebih banyak.PentingJumlah node yang diberi label harus lebih besar dari atau sama dengan jumlah pod. Jika jumlah node yang diberi label kurang dari jumlah pod yang dimiliki oleh controller, beberapa pod mungkin gagal diterapkan.
Jika Anda menggunakan ACK dedicated cluster, jangan tambahkan label ke node Master.
kubectl label nodes cn-shanghai.********.226 cn-shanghai.********.230 node-role.kubernetes.io/ingress="true"Output yang Diharapkan:
node/cn-shanghai.********.226 labeled node/cn-shanghai.********.230 labeledJalankan perintah berikut untuk memperbarui deployment yang digunakan oleh Nginx Ingress Controller, menambahkan konfigurasi nodeSelector untuk memastikan bahwa pod yang dimiliki oleh controller hanya dapat diterapkan pada node dengan label
node-role.kubernetes.io/ingress="true".kubectl -n kube-system patch deployment nginx-ingress-controller -p '{"spec": {"template": {"spec": {"nodeSelector": {"node-role.kubernetes.io/ingress": "true"}}}}}'Output yang Diharapkan:
deployment.extensions/nginx-ingress-controller patchedJalankan perintah berikut untuk melihat pod Ingress yang diterapkan pada node klaster dengan label
node-role.kubernetes.io/ingress="true".kubectl -n kube-system get pod -o wide | grep nginx-ingress-controllerOutput yang Diharapkan:
nginx-ingress-controller-*****nxs 1/1 Running 0 74m 10.1.117.186 cn-shanghai.********.230 nginx-ingress-controller-*****9pm 1/1 Running 0 74m 10.1.117.172 cn-shanghai.********.226