Meningkatkan skala cluster Google Distributed Cloud

Seperti cluster Kubernetes lainnya, skalabilitas cluster Google Distributed Cloud memiliki banyak dimensi yang saling terkait. Dokumen ini dimaksudkan untuk membantu Anda memahami dimensi utama yang dapat disesuaikan untuk meningkatkan skala cluster tanpa mengganggu workload Anda.

Memahami batasan

Google Distributed Cloud adalah sistem kompleks dengan platform integrasi yang besar. Ada banyak dimensi yang memengaruhi skalabilitas cluster. Misalnya, jumlah node hanyalah salah satu dari banyak dimensi yang dapat diskalakan oleh Google Distributed Cloud. Dimensi lainnya mencakup jumlah total Pod dan Service. Banyak dari dimensi ini, seperti jumlah pod per node dan jumlah node per cluster, yang saling terkait. Untuk mengetahui informasi selengkapnya tentang dimensi yang berpengaruh pada skalabilitas, lihat Batas Skalabilitas Kubernetes di bagian Scalability Special Resources Group (SIG) dari repositori Komunitas Kubernetes di GitHub.

Batas skalabilitas juga bergantung pada konfigurasi hardware dan node tempat cluster Anda berjalan. Batas yang dijelaskan dalam dokumen ini diverifikasi di lingkungan yang mungkin berbeda dengan lingkungan Anda. Oleh karena itu, Anda mungkin tidak mereproduksi angka yang sama jika lingkungan yang mendasarinya adalah faktor pembatas.

Untuk mengetahui informasi selengkapnya tentang batas yang berlaku bagi cluster Google Distributed Cloud, lihat Kuota dan batas.

Mempersiapkan penskalaan

Saat Anda bersiap untuk menskalakan cluster Google Distributed Cloud, pertimbangkan persyaratan dan batasan yang dijelaskan di bagian berikut.

Persyaratan memori dan CPU node bidang kontrol

Tabel berikut menguraikan konfigurasi CPU dan memori yang direkomendasikan untuk node bidang kontrol bagi cluster yang menjalankan workload produksi:

Jumlah node cluster CPU bidang kontrol yang direkomendasikan Memori bidang kontrol yang direkomendasikan
1-50 8 core 32 GiB
51-100 16 core 64 GiB

Jumlah Pod dan Service

Jumlah Pod dan Layanan yang dapat Anda miliki di cluster dikontrol oleh setelan berikut:

CIDR Pod dan jumlah node maksimum

Jumlah total alamat IP yang dicadangkan untuk Pod di cluster Anda adalah salah satu faktor pembatas untuk meningkatkan skala cluster Anda. Setelan ini, bersama dengan setelan untuk pod maksimum per node, menentukan jumlah maksimum node yang dapat Anda miliki dalam cluster sebelum berisiko kehabisan alamat IP untuk pod Anda.

Pertimbangkan hal berikut:

  • Jumlah total alamat IP yang dicadangkan untuk Pod di cluster Anda akan ditentukan dengan clusterNetwork.pods.cidrBlocks, yang menggunakan rentang alamat IP yang ditentukan dalam notasi CIDR. Misalnya, nilai 192.168.0.0/16 yang terisi otomatis menentukan rentang 65.536 alamat IP dari 192.168.0.0 hingga 192.168.255.255.

  • Jumlah maksimum Pod yang dapat berjalan pada satu node ditentukan dengan nodeConfig.podDensity.maxPodsPerNode.

  • Berdasarkan setelan pod maksimum per node, Google Distributed Cloud melakukan penyediaan alamat IP dua kali lebih banyak ke node. Alamat IP ekstra membantu mencegah penggunaan ulang IP Pod secara tidak sengaja dalam rentang waktu singkat.

  • Dengan membagi jumlah total alamat IP Pod dengan jumlah alamat IP Pod yang disediakan di setiap node, Anda akan memperoleh jumlah total node yang dapat dimiliki dalam cluster.

Misalnya, jika CIDR Pod Anda adalah 192.168.0.0/17, Anda memiliki total 32.768 alamat IP (2(32-17) = 215 = 32.768). Jika Anda menetapkan jumlah maksimum Pod per node ke 250, Google Distributed Cloud akan menyediakan rentang sekitar 500 alamat IP, yang kurang lebih setara dengan blok CIDR /23 (2(32-23) = 29 = 512). Jadi, jumlah maksimum node dalam kasus ini adalah 64 (215 alamat/cluster dibagi dengan 29 alamat/node = 2(15-9) node/cluster = 26 = 64 node/cluster).

clusterNetwork.pods.cidrBlocks dan nodeConfig.podDensity.maxPodsPerNode tidak dapat diubah, jadi rencanakan dengan cermat pertumbuhan cluster Anda di masa mendatang untuk menghindari kehabisan kapasitas node. Untuk mengetahui jumlah maksimum yang direkomendasikan untuk Pod per cluster, Pod per node, dan node per cluster berdasarkan pengujian, lihat Batas.

CIDR Layanan

CIDR Layanan dapat diupdate untuk menambahkan lebih banyak Layanan saat Anda meningkatkan skala cluster. Namun, Anda tidak dapat mengurangi rentang CIDR Layanan. Untuk mengetahui informasi selengkapnya, lihat Meningkatkan rentang jaringan Layanan.

Resource yang dicadangkan untuk daemon sistem

Secara default, Google Distributed Cloud otomatis mencadangkan resource di node untuk daemon sistem, seperti sshd atau udev. Resource CPU dan memori dicadangkan pada node untuk daemon sistem sehingga daemon ini memiliki resource yang dibutuhkan. Tanpa fitur ini, Pod berpotensi menghabiskan sebagian besar resource pada node, sehingga daemon sistem tidak dapat menyelesaikan tugasnya.

Secara khusus, Google Distributed Cloud mencadangkan memori 80 millicore CPU (80 mCPU) dan 280 Mebibyte (280 MiB) di setiap node untuk daemon sistem. Perlu diperhatikan bahwa mCPU unit CPU adalah singkatan dari seperseribu inti, sehingga 80/1.000 atau 8% inti pada setiap node dicadangkan untuk daemon sistem. Jumlah resource yang dicadangkan kecil dan tidak berdampak signifikan pada performa Pod. Namun, kubelet pada node dapat mengeluarkan Pod jika penggunaan CPU atau memori melebihi jumlah yang telah dialokasikan.

Berjejaring dengan MetalLB

Anda mungkin perlu menambah jumlah speaker MetalLB untuk menangani aspek berikut:

  • Bandwidth: keseluruhan bandwidth cluster untuk layanan load balancing bergantung pada jumlah speaker dan bandwidth setiap node speaker. Peningkatan traffic jaringan memerlukan lebih banyak pembicara.

  • Fault tolerance: lebih banyak speaker akan mengurangi dampak keseluruhan kegagalan speaker tunggal.

MetalLB memerlukan koneksi Lapisan 2 antara node load balancing. Dalam hal ini, Anda mungkin dibatasi oleh jumlah node dengan konektivitas Lapisan 2 tempat Anda dapat mengaktifkan speaker MetalLB.

Rencanakan dengan cermat jumlah speaker MetalLB yang ingin Anda miliki dalam cluster dan tentukan jumlah node Lapisan 2 yang diperlukan. Untuk mengetahui informasi selengkapnya, lihat Masalah skalabilitas MetalLB.

Secara terpisah, saat menggunakan mode load balancing yang dipaketkan, node bidang kontrol juga harus berada di jaringan Lapisan 2 yang sama. Load balancing manual tidak memiliki batasan ini. Untuk mengetahui informasi selengkapnya, lihat Mode load balancer manual.

Menjalankan banyak node, Pod, dan Service

Menambahkan node, Pod, dan Service adalah salah satu cara untuk meningkatkan skala cluster Anda. Bagian berikut membahas beberapa setelan dan konfigurasi tambahan yang harus Anda pertimbangkan saat meningkatkan jumlah node, Pod, dan Layanan dalam cluster Anda. Untuk informasi tentang batas dimensi ini dan kaitannya satu sama lain, lihat Batas.

Membuat cluster tanpa kube-proxy

Untuk membuat cluster berperforma tinggi yang dapat ditingkatkan skalanya untuk menggunakan Layanan dan endpoint dalam jumlah besar, sebaiknya buat cluster tanpa kube-proxy. Tanpa kube-proxy, cluster akan menggunakan GKE Dataplane V2 dalam mode kube-proxy-replacement. Mode ini menghindari konsumsi resource yang diperlukan untuk mempertahankan kumpulan aturan iptables yang besar.

Anda tidak dapat menonaktifkan penggunaan kube-proxy untuk cluster yang ada. Konfigurasi ini harus disiapkan saat cluster dibuat. Untuk petunjuk dan informasi lebih lanjut, lihat Membuat cluster tanpa kube-proxy.

Konfigurasi CoreDNS

Bagian ini menjelaskan aspek CoreDNS yang memengaruhi skalabilitas untuk cluster Anda.

DNS Pod

Secara default, cluster Google Distributed Cloud memasukkan Pod dengan resolv.conf yang terlihat seperti berikut:

nameserver KUBEDNS_CLUSTER_IP
search <NAMESPACE>.svc.cluster.local svc.cluster.local cluster.local c.PROJECT_ID.internal google.internal
options ndots:5

Opsi ndots:5 berarti bahwa nama host yang memiliki kurang dari 5 titik tidak dianggap sebagai nama domain yang sepenuhnya memenuhi syarat (FQDN). Server DNS menambahkan semua domain penelusuran yang ditentukan sebelum mencari nama host yang awalnya diminta, yang mengurutkan pencarian seperti berikut saat me-resolve google.com:

  1. google.com.NAMESPACE.svc.cluster.local
  2. google.com.svc.cluster.local
  3. google.com.cluster.local
  4. google.com.c.PROJECT_ID.internal
  5. google.com.google.internal
  6. google.com

Setiap pencarian dilakukan untuk IPv4 (data A) dan IPv6 (data AAAA), sehingga menghasilkan 12 permintaan DNS untuk setiap kueri non-FQDN, yang secara signifikan memperkuat traffic DNS. Untuk mengurangi masalah ini, sebaiknya deklarasikan nama host untuk dicari sebagai FQDN dengan menambahkan titik di akhir (google.com.). Deklarasi ini perlu dilakukan pada tingkat workload aplikasi. Untuk mengetahui informasi selengkapnya, lihat halaman utama resolv.conf.

IPv6

Jika cluster tidak menggunakan IPv6, permintaan DNS dapat dikurangi hingga setengahnya dengan menghapus pencarian kumpulan data AAAA ke server DNS upstream. Jika memerlukan bantuan untuk menonaktifkan pencarian AAAA, hubungi Cloud Customer Care.

Kumpulan node khusus

Karena kueri DNS sangat penting dalam siklus proses aplikasi, sebaiknya gunakan node khusus untuk Deployment coredns. Deployment ini berada di domain kegagalan yang berbeda dari aplikasi biasanya. Jika Anda memerlukan bantuan dalam menyiapkan node khusus untuk Deployment coredns, hubungi Cloud Customer Care.

Masalah skalabilitas MetalLB

MetalLB berjalan dalam mode pasif aktif, yang berarti bahwa pada waktu tertentu, hanya ada satu speaker MetalLB yang menyajikan VIP LoadBalancer tertentu.

Failover

Sebelum Google Distributed Cloud merilis versi 1.28.0, dalam skala besar, failover MetalLB memerlukan waktu yang lama dan dapat menimbulkan risiko keandalan pada cluster.

Batas koneksi

Jika ada VIP LoadBalancer tertentu, seperti Ingress Service yang mengharapkan hampir atau lebih dari 30 ribu koneksi serentak, kemungkinan node speaker yang menangani VIP mungkin membuang port yang tersedia. Karena keterbatasan arsitektur, tidak ada mitigasi untuk masalah ini dari MetalLB. Pertimbangkan untuk beralih ke load balancing paket dengan BGP sebelum pembuatan cluster atau gunakan class masuk yang berbeda. Untuk mengetahui informasi selengkapnya, lihat Konfigurasi traffic masuk.

Speaker load balancer

Secara default, Google Distributed Cloud menggunakan kumpulan node load balancer yang sama untuk bidang kontrol dan bidang data. Jika Anda tidak menentukan kumpulan node load balancer (loadBalancer.nodePoolSpec), kumpulan node bidang kontrol (controlPlane.nodePoolSpec) akan digunakan.

Untuk menambah jumlah speaker saat menggunakan kumpulan node bidang kontrol untuk load balancing, Anda harus meningkatkan jumlah mesin bidang kontrol. Untuk deployment produksi, sebaiknya gunakan tiga node bidang kontrol untuk mendapatkan ketersediaan tinggi. Menambah jumlah node bidang kontrol lebih dari tiga untuk mengakomodasi speaker tambahan mungkin bukan penggunaan resource yang tepat.

Konfigurasi traffic masuk

Jika Anda mengharapkan hampir 30 ribu koneksi serentak masuk ke satu VIP Layanan LoadBalancer, MetalLB mungkin tidak dapat mendukungnya.

Anda dapat mempertimbangkan untuk mengekspos VIP melalui mekanisme lain, seperti F5 BIG-IP. Atau, Anda dapat membuat cluster baru menggunakan load balancing paket dengan BGP yang tidak memiliki batasan yang sama.

Menyesuaikan komponen Cloud Logging dan Cloud Monitoring

Dalam cluster besar, bergantung pada profil aplikasi dan pola traffic, konfigurasi resource default untuk komponen Cloud Logging dan Cloud Monitoring mungkin tidak memadai. Untuk mengetahui petunjuk cara menyesuaikan permintaan dan batas resource untuk komponen kemampuan observasi, lihat Mengonfigurasi resource komponen Stackdriver.

Secara khusus, metrik status kube dalam cluster dengan layanan dan endpoint dalam jumlah besar dapat menyebabkan penggunaan memori yang berlebihan pada kube-state-metrics itu sendiri dan gke-metrics-agent pada node yang sama. Penggunaan resource di server metrik juga dapat diskalakan dalam hal node, Pod, dan Layanan. Jika Anda mengalami masalah resource di komponen ini, hubungi Cloud Customer Care.

Gunakan sysctl untuk mengonfigurasi sistem operasi Anda

Sebaiknya sesuaikan konfigurasi sistem operasi untuk node Anda agar sesuai dengan kasus penggunaan workload Anda. Parameter fs.inotify.max_user_watches dan fs.inotify.max_user_instances yang mengontrol jumlah resource inotify sering kali perlu disesuaikan. Misalnya, jika Anda melihat pesan error seperti berikut, sebaiknya coba lihat apakah parameter tersebut perlu disesuaikan:

The configured user limit (128) on the number of inotify instances has been reached
ENOSPC: System limit for number of file watchers reached...

Penyesuaian biasanya bervariasi menurut jenis workload dan konfigurasi hardware. Anda dapat berkonsultasi tentang praktik terbaik OS tertentu dengan vendor OS Anda.

Praktik terbaik

Bagian ini menjelaskan praktik terbaik untuk meningkatkan skala cluster Anda.

Menskalakan satu dimensi pada satu waktu

Untuk meminimalkan masalah dan mempermudah roll back perubahan, jangan menyesuaikan lebih dari satu dimensi dalam satu waktu. Menskalakan beberapa dimensi secara bersamaan dapat menyebabkan masalah, bahkan dalam cluster yang lebih kecil. Misalnya, mencoba meningkatkan jumlah Pod yang dijadwalkan per node menjadi 110, sekaligus menambah jumlah node dalam cluster menjadi 250 kemungkinan tidak akan berhasil karena jumlah Pod, jumlah Pod per node, dan jumlah node yang terlalu jauh.

Menskalakan cluster secara bertahap

Peningkatan skala cluster dapat memerlukan banyak resource. Untuk mengurangi risiko kegagalan operasi cluster atau gangguan workload cluster, sebaiknya jangan mencoba membuat cluster besar dengan banyak node dalam satu operasi.

Membuat cluster hybrid atau mandiri tanpa worker node

Jika Anda membuat cluster hybrid atau mandiri besar dengan lebih dari 50 node pekerja, sebaiknya buat cluster ketersediaan tinggi (HA) dengan node bidang kontrol terlebih dahulu, lalu tingkatkan skalanya secara bertahap. Operasi pembuatan cluster menggunakan cluster bootstrap, yang bukan ketersediaan tinggi (HA), sehingga kurang andal. Setelah cluster hybrid atau mandiri HA dibuat, Anda dapat menggunakannya untuk meningkatkan skala ke lebih banyak node.

Meningkatkan jumlah worker node dalam batch

Jika Anda akan memperluas cluster ke lebih banyak worker node, sebaiknya lakukan perluasan secara bertahap. Sebaiknya tambahkan tidak lebih dari 20 node sekaligus. Hal ini terutama berlaku untuk cluster yang menjalankan workload kritis.

Aktifkan penarikan gambar paralel

Secara {i>default<i}, kubelet menarik gambar secara berurutan, satu per satu. Jika Anda memiliki koneksi upstream yang buruk ke server registry image, pull image yang buruk dapat menghambat seluruh antrean untuk kumpulan node tertentu.

Untuk mengurangi hal ini, sebaiknya tetapkan serializeImagePulls ke false dalam konfigurasi kubelet kustom. Untuk mengetahui petunjuk dan informasi selengkapnya, lihat Mengonfigurasi setelan pull image kubelet. Mengaktifkan penarikan gambar paralel dapat menyebabkan lonjakan penggunaan bandwidth jaringan atau I/O disk.

Menyesuaikan permintaan dan batas resource aplikasi

Dalam lingkungan padat, workload aplikasi mungkin akan dihapus. Kubernetes menggunakan mekanisme yang direferensikan untuk menentukan peringkat pod jika terjadi penghapusan.

Praktik yang baik untuk menetapkan resource container Anda adalah menggunakan jumlah memori yang sama untuk permintaan dan batas, serta batas CPU yang lebih besar atau tidak terbatas. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan aplikasi Kubernetes berbasis cloud di Cloud Architecture Center.

Menggunakan partner penyimpanan

Sebaiknya gunakan salah satu partner penyimpanan Siap GDC untuk deployment skala besar. Penting untuk mengonfirmasi informasi berikut dengan partner penyimpanan tertentu:

  • Deployment penyimpanan mengikuti praktik terbaik untuk aspek penyimpanan, seperti ketersediaan tinggi, setelan prioritas, afinitas node, serta permintaan dan batas resource.
  • Versi penyimpanan memenuhi syarat dengan versi Google Distributed Cloud tertentu.
  • Vendor penyimpanan dapat mendukung skala tinggi yang ingin Anda deploy.

Mengonfigurasi cluster untuk ketersediaan tinggi

Penting untuk mengaudit deployment skala tinggi Anda dan memastikan komponen penting dikonfigurasi untuk HA jika memungkinkan. Google Distributed Cloud mendukung opsi deployment HA untuk semua jenis cluster. Untuk informasi selengkapnya, lihat Memilih model deployment. Untuk mengetahui contoh file konfigurasi cluster deployment HA, lihat Contoh konfigurasi cluster.

Penting juga untuk mengaudit komponen lainnya, termasuk:

  • Vendor penyimpanan
  • Webhook cluster

Memantau penggunaan resource

Bagian ini memberikan beberapa rekomendasi pemantauan dasar untuk cluster skala besar.

Memantau metrik penggunaan dengan cermat

Sangat penting untuk memantau penggunaan node dan masing-masing komponen sistem, serta memastikan semuanya memiliki margin yang aman. Untuk melihat kemampuan pemantauan standar yang tersedia secara default, lihat Menggunakan dasbor yang telah ditetapkan.

Memantau konsumsi bandwidth

Pantau konsumsi bandwidth dengan cermat untuk memastikan jaringan tidak mengalami saturasi, yang menyebabkan penurunan performa untuk cluster Anda.

Meningkatkan performa dll.

Kecepatan disk sangat penting untuk performa dan stabilitas etcd. Disk yang lambat akan meningkatkan latensi permintaan dll., yang dapat menyebabkan masalah stabilitas cluster. Untuk meningkatkan performa cluster, Google Distributed Cloud menyimpan objek Peristiwa dalam instance etcd khusus yang terpisah. Instance etcd standar menggunakan /var/lib/etcd sebagai direktori datanya dan port 2379 untuk permintaan klien. Instance etcd-events menggunakan /var/lib/etcd-events sebagai direktori datanya dan port 2382 untuk permintaan klien.

Sebaiknya gunakan Solid State Disk (SSD) untuk penyimpanan etcd Anda. Untuk performa yang optimal, pasang disk terpisah ke /var/lib/etcd dan /var/lib/etcd-events. Penggunaan disk khusus memastikan bahwa kedua instance etcd tidak berbagi I/O disk.

Dokumentasi etcd memberikan rekomendasi hardware tambahan untuk memastikan performa etcd terbaik saat menjalankan cluster Anda dalam produksi.

Untuk memeriksa performa disk dan etcd Anda, gunakan metrik latensi I/O etcd berikut di Metrics Explorer:

  • etcd_disk_backend_commit_duration_seconds: durasi harus kurang dari 25 milidetik untuk persentil ke-99 (p99).
  • etcd_disk_wal_fsync_duration_seconds: durasi harus kurang dari 10 milidetik untuk persentil ke-99 (p99).

Untuk mengetahui informasi selengkapnya tentang performa etcd, lihat Apa arti peringatan etcd "apply entri<i} memerlukan waktu terlalu lama? dan Apa arti peringatan etcd "gagal mengirimkan detak jantung tepat waktu"?.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Apa langkah selanjutnya?