Pertimbangan untuk klaster besar
Klaster adalah kumpulan (node) berupa mesin fisik ataupun virtual yang menjalankan agen Kubernetes, dan dikelola oleh bidang kontrol. Kubernetes v1.33 mendukung klaster hingga 5000 node. Lebih tepatnya, Kubernetes didesain untuk mengakomodasi konfigurasi yang mendukung kriteria dibawah ini:
- Jumlah pods tidak lebih dari 110 pods per node
- Jumlah node tidak lebih dari 5000
- Total pods tidak lebih dari 150000
- Total kontainer tidak lebih dari 300000
Kamu dapat mengubah ukuran klaster dengan menambah atau menghapus node. Cara yang digunakan untuk pengubahan ukuran ini tergantung dari bagaimana kamu membangun klaster.
Kuota sumber daya penyedia cloud
Untuk menghindari masalah kuota penyedia cloud, ketika membuat klaster dengan banyak node, pertimbangkanlah hal berikut ini:
- Mengajukan penambahan kuota untuk sumber daya cloud berikut ini:
- Jumlah mesin virtual
- CPU
- Volume penyimpanan
- Penggunaan alamat IP
- Aturan penyaringan paket
- Jumlah penyeimbang beban (load balancer)
- Subnet jaringan
- Aliran log
- Mengatur pengubahan ukuran klaster untuk menambah node baru menggunakan mode batches, dengan jeda antar batches, karena sejumlah penyedia cloud membatasi laju (rate limit) pembuatan mesin baru.
Komponen bidang kontrol
Untuk klaster besar, kamu membutuhkan bidang kontrol dengan komputasi yang cukup dan sumber daya lainnya.
Biasanya, kamu akan menjalankan satu atau dua bidang kontrol untuk tiap zona kegagalan (failure zone), mengubah ukuran bidang kontrol secara vertikal terlebih dahulu dan kemudian mengubah ukurannya secara horizontal setelah mencapai batas dari mengubah ukuran secara vertikal.
Kamu harus menjalankan paling tidak satu bidang kontrol per zona kegagalan untuk memberikan toleransi kegagalan (fault-tolerance). node Kubernetes tidak secara otomatis mengendalikan arus ke bidang kontrol yang berada di zona kegagalan yang sama; bagaimanapun, penyedia cloud kamu mungkin memiliki mekanisme toleransi kegagalan mereka sendiri untuk menangani hal tersebut.
Sebagai contoh, dengan menggunakan penyeimbang beban bawaan (managed load balancer), kamu dapat mengonfigurasi penyeimbang beban untuk mengirim arus yang berasal dari kubelet dan pods di zona A, kemudian hanya mengarahkan arus tersebut ke bidang kontrol yang hanya ada di zona A. Jika salah satu bidang kontrol atau zona kegagalan A mati, artinya semua arus bidang kontrol untuk node di zona A akan dikirim ke zona lain. Menjalankan banyak bidang kontrol di setiap zona dapat mencegah masalah tersebut.
Penyimpanan etcd
Untuk meningkatkan performa klaster besar, kamu dapat menyimpan objek Event di instance etcd terpisah.
Ketika membangun sebuah klaster, kamu dapat (menggunakan alat khusus):
- Nyalakan dan konfigurasikan instance tambahan etcd
- konfigurasikan API server untuk menggunakan instance etcd tambahan tersebut dalam penyimpanan events
Lihat juga Mengoperasikan klaster etcd untuk Kubernetes dan Membangun klaster etcd dengan ketersediaan tinggi (high-availability) menggunakan kubeadm untuk detail tentang konfigurasi dan mengelola etcd untuk klaster besar.
Resource tambahan
Batas sumber daya Kubernetes membantu untuk meminimalisasi dampak dari kebocoran memori dan hal lainnya yang dapat membuat pods dan kontainer memberikan dampak terhadap komponen lainnya. Batasan sumber daya ini berlaku untuk sumber daya addon layaknya berlaku untuk workload aplikasi.
Sebagai contoh, kamu dapat mengatur batas CPU dan memori untuk komponen logging berikut ini:
...
containers:
- name: fluentd-cloud-logging
image: fluent/fluentd-kubernetes-daemonset:v1
resources:
limits:
cpu: 100m
memory: 200Mi
Batas bawaan addon biasanya diatur berdasarkan data yang dikumpulkan dari pengalaman menjalankan addon pada klaster Kubernetes kecil atau menengah. Ketika menjalankan klaster besar, addon biasanya menggunakan lebih banyak sumber daya dibanding batasnya. Jika klaster besar dijalankan tanpa mengubah nilai batasan, addon dapat terhenti terus menerus karena mencapai batas memori. Selain itu, addon dapat berjalan dengan performa buruk karena pembatasan potongan waktu (time slice) CPU.
Untuk mencegah masalah sumber daya addon di Kubernetes, saat membangun klaster dengan node yang banyak, pertimbangkanlah beberapa hal berikut ini:
- Beberapa addon memperbesar ukurannya secara vertikal - terdapat satu replika dari addon untuk satu klaster atau melayani hanya satu zona kegagalan. Untuk addon tersebut, tambahkan permintaan (request) dan batasan ketika kamu memperbesar ukuran klaster.
- Banyak addon memperbesar ukurannya secara horizontal - kamu dapat menambah kapasitas dengan menjalankan lebih banyak pods - tapi dengan klaster yang sangat besar, kamu juga perlu untuk menaikan batas CPU atau memori secukupnya. Vertical Pod Autoscaler dapat berjalan dalam mode recommender untuk menyediakan angka yang disarankan bagi permintaan dan batasan.
- Beberapa addon berjalan di setiap node yang dikontrol oleh DaemonSet. Sebagai contoh, agregator log tingkat node. Mirip dengan kasus addon yang memperbesar ukuran secara horizontal, kamu juga dapat menaikkan batas CPU dan memori secukupnya.
Selanjutnya
VerticalPodAutoscaler
adalah custom resource yang dapat dijalankan di klaster untuk membantu kamu mengelola permintaan sumber daya dan batasan untuk pods. Pelajari lebih lanjut tentang Vertical Pod Autoscaler dan bagaimana kamu dapat menggunakannya untuk mengubah ukuran klaster.Baca juga tentang Node autoscaling.
addon resizer membantu kamu mengubah ukuran addon secara otomatis ketika ukuran klaster kamu berubah.