Tentang penskalaan otomatis cluster


Halaman ini menjelaskan cara Google Kubernetes Engine (GKE) mengubah ukuran kumpulan node Cluster standar secara otomatis berdasarkan permintaan workload Anda. Saat permintaan tinggi, autoscaler cluster akan menambahkan node ke kumpulan node. Untuk mempelajari cara mengonfigurasi autoscaler cluster, lihat Penskalaan otomatis cluster.

Halaman ini ditujukan untuk Admin, Arsitek, dan Operator yang merencanakan kebutuhan kapasitas dan infrastruktur serta mengoptimalkan arsitektur dan resource sistem untuk memastikan total biaya kepemilikan terendah bagi perusahaan atau unit bisnis mereka. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise umum.

Dengan cluster Autopilot, Anda tidak perlu khawatir dengan penyediaan node atau pengelolaan kumpulan node karena kumpulan node secara otomatis disediakan melalui penyediaan otomatis node, dan secara otomatis diskalakan untuk memenuhi persyaratan workload Anda.

Praktik terbaik:

Rencanakan dan desain konfigurasi cluster Anda dengan Admin dan arsitek, Developer, atau tim lain di organisasi Anda yang bertanggung jawab atas penerapan dan pemeliharaan aplikasi Anda.

Alasan menggunakan autoscaler cluster

Autoscaler cluster GKE secara otomatis mengubah ukuran jumlah node dalam kumpulan node tertentu, berdasarkan permintaan workload Anda. Jika permintaan rendah, autoscaler cluster akan melakukan penskalaan kembali ke ukuran minimum yang Anda tentukan. Hal ini dapat meningkatkan ketersediaan workload saat Anda membutuhkannya, sekaligus mengontrol biaya. Anda tidak perlu menambahkan atau menghapus node secara manual atau menyediakan kumpulan node secara berlebihan. Sebagai gantinya, tentukan ukuran minimum dan maksimum untuk node pool, dan sisanya akan bersifat otomatis.

Jika resource dihapus atau dipindahkan saat melakukan penskalaan otomatis cluster, workload Anda mungkin mengalami gangguan sementara. Misalnya, jika workload Anda terdiri dari pengontrol dengan satu replika, Pod replika tersebut dapat dijadwalkan ulang ke node yang berbeda jika node-nya saat ini dihapus. Sebelum mengaktifkan autoscaler cluster, desain workload Anda untuk menoleransi potensi gangguan atau memastikan bahwa Pod penting tidak terganggu.

Praktik terbaik:

Untuk meningkatkan toleransi workload terhadap gangguan, deploy workload menggunakan pengontrol dengan beberapa replika, seperti Deployment.

Anda dapat meningkatkan performa autoscaler cluster dengan Streaming image, yang melakukan streaming data gambar yang diperlukan dari jarak jauh dari image container yang memenuhi syarat sekaligus meng-cache gambar secara lokal untuk mengizinkan workload pada node baru untuk mulai lebih cepat.

Cara kerja autoscaler cluster

Autoscaler cluster berfungsi per node pool. Saat mengonfigurasi kumpulan node dengan autoscaler cluster, Anda harus menentukan ukuran minimum dan maksimum untuk kumpulan node.

Autoscaler cluster meningkatkan atau mengurangi ukuran kumpulan node secara otomatis dengan menambahkan atau menghapus instance virtual machine (VM) di Grup Instance Terkelola (MIG) Compute Engine yang mendasarinya untuk kumpulan node ini. Autoscaler cluster membuat keputusan penskalaan ini berdasarkan permintaan resource (dan bukan penggunaan resource sebenarnya) dari Pod yang berjalan di node dari kumpulan node tersebut. SDK ini secara berkala memeriksa status Pod dan node, serta mengambil tindakan:

  • Jika Pod gagal dijadwalkan di node saat ini, autoscaler cluster akan menambahkan node, hingga ukuran maksimum kumpulan node. Untuk mengetahui informasi selengkapnya tentang kapan autoscaler cluster mengubah ukuran cluster, lihat Kapan Autoscaler Cluster mengubah ukuran cluster?
  • Jika GKE memutuskan untuk menambahkan node baru ke dalam node pool, autoscaler cluster akan menambahkan node sebanyak yang diperlukan, hingga batas per node pool atau per cluster.
  • Autoscaler cluster tidak menunggu satu node muncul sebelum membuat node berikutnya. Setelah GKE memutuskan jumlah node yang akan dibuat, pembuatan node akan terjadi secara paralel. Tujuannya adalah untuk meminimalkan waktu yang diperlukan agar Pod yang tidak dapat dijadwalkan menjadi Active.
  • Jika beberapa node gagal dibuat karena kuota habis, Autoscaler cluster akan menunggu hingga resource dapat berhasil dijadwalkan.
  • Jika node kurang dimanfaatkan, dan semua Pod masih dapat dijadwalkan bahkan dengan lebih sedikit node dalam kumpulan node, autoscaler cluster akan menghapus node, hingga ke ukuran minimum kumpulan node. Jika ada Pod pada node yang tidak dapat dipindahkan ke node lain dalam cluster, autoscaler cluster tidak akan berupaya untuk menurunkan skala node tersebut. Jika Pod dapat dipindahkan ke node lain, tetapi node tidak dapat dikosongkan dengan baik setelah periode waktu tunggu (saat ini selama 10 menit), node akan dihentikan secara paksa. Masa tenggang tidak dapat dikonfigurasi untuk cluster GKE. Untuk informasi lebih lanjut tentang cara kerja penurunan skala, lihat dokumentasi autoscaler cluster.

Frekuensi autoscaler cluster memeriksa cluster untuk Pod yang tidak dapat dijadwalkan secara besar bergantung pada ukuran cluster. Dalam cluster kecil, pemeriksaan mungkin terjadi setiap beberapa detik. Anda tidak dapat menentukan jangka waktu yang tepat yang diperlukan untuk pemeriksaan ini.

Jika node Anda mengalami kekurangan karena Pod Anda telah meminta atau menetapkan default ke resource yang tidak memadai, autoscaler cluster tidak akan memperbaiki situasi ini. Anda dapat membantu memastikan autoscaler cluster berfungsi seakurat mungkin dengan membuat permintaan resource eksplisit untuk semua workload Anda.

Jangan aktifkan penskalaan otomatis Compute Engine untuk grup instance terkelola untuk node cluster Anda. Autoscaler cluster GKE terpisah dari penskalaan otomatis Compute Engine. Hal ini dapat menyebabkan kumpulan node gagal untuk meningkatkan atau menurunkan skala karena autoscaler Compute Engine akan bertentangan dengan autoscaler cluster GKE.

Kriteria pengoperasian

Saat mengubah ukuran node pool, autoscaler cluster akan membuat asumsi berikut:

  • Semua Pod yang direplikasi dapat dimulai ulang di beberapa node lain, dan mungkin menyebabkan gangguan singkat.
  • Pengguna atau administrator tidak mengelola node secara manual. Autoscaler cluster dapat mengganti operasi manajemen node manual yang Anda lakukan.
  • Semua node dalam satu kumpulan node memiliki kumpulan label yang sama.
  • Autoscaler cluster mempertimbangkan biaya relatif jenis instance di berbagai kumpulan, dan berupaya memperluas kumpulan node yang paling murah. Autoscaler cluster memperhitungkan pengurangan biaya kumpulan node yang berisi Spot VM, yang dapat dihentikan.
  • Autoscaler cluster mempertimbangkan permintaan container init sebelum menjadwalkan Pod. Permintaan container init dapat menggunakan resource apa pun yang belum dialokasikan yang tersedia di node, yang mungkin dapat mencegah penjadwalan Pod. Autoscaler cluster mengikuti aturan penghitungan permintaan yang sama dengan yang digunakan Kubernetes. Untuk mempelajari lebih lanjut, lihat dokumentasi Kubernetes untuk menggunakan penampung init.
  • Label yang ditambahkan secara manual setelah pembuatan cluster awal atau kumpulan node tidak akan dilacak. Node yang dibuat oleh autoscaler cluster akan diberi label yang ditentukan dengan --node-labels pada saat pembuatan kumpulan node.
  • Pada GKE versi 1.21 atau yang lebih lama, autoscaler cluster mempertimbangkan informasi taint pada node yang ada dari kumpulan node untuk mewakili keseluruhan kumpulan node. Mulai GKE versi 1.22, autoscaler cluster akan menggabungkan informasi dari node yang ada di cluster dan kumpulan node. Autoscaler cluster juga mendeteksi perubahan manual yang Anda buat pada node dan node pool.
Praktik terbaik:

Jangan aktifkan autoscaler cluster jika aplikasi Anda tidak toleran terhadap gangguan.

Menyeimbangkan di berbagai zona

Jika kumpulan node Anda berisi beberapa grup instance terkelola dengan jenis instance yang sama, autoscaler cluster akan mencoba menjaga ukuran grup instance terkelola ini tetap seimbang saat meningkatkan skala. Hal ini membantu mencegah distribusi node yang tidak merata di antara grup instance terkelola di beberapa zona dari suatu kumpulan node. GKE tidak mempertimbangkan kebijakan penskalaan otomatis saat menurunkan skala.

Autoscaler cluster hanya menyeimbangkan di seluruh zona selama peristiwa peningkatan skala. Autoscaler cluster menurunkan skala node yang kurang dimanfaatkan, terlepas dari ukuran relatif grup instance terkelola yang mendasarinya dalam kumpulan node, yang dapat menyebabkan node didistribusikan secara tidak merata di seluruh zona.

Kebijakan lokasi

Mulai GKE versi 1.24.1-gke.800, Anda dapat mengubah kebijakan lokasi autoscaler cluster. Anda dapat mengontrol kebijakan distribusi autoscaler cluster dengan menentukan tanda location_policy dengan salah satu nilai berikut:

  • BALANCED: Autoscaler cluster mempertimbangkan persyaratan Pod dan ketersediaan resource di setiap zona. Hal ini tidak menjamin grup node yang serupa akan memiliki ukuran yang sama persis, karena autoscaler cluster mempertimbangkan banyak faktor, termasuk kapasitas yang tersedia di zona dan afinitas zona tertentu pada Pod yang memicu peningkatan skala.
  • ANY: Autoscaler cluster memprioritaskan penggunaan reservasi yang tidak digunakan dan mempertimbangkan batasan resource yang tersedia saat ini.
Praktik terbaik:

Gunakan kebijakan ANY jika Anda menggunakan Spot VM atau jika Anda ingin menggunakan pemesanan VM yang tidak sama antar-zona.

Reservasi

Mulai GKE versi 1.27, autoscaler cluster selalu mempertimbangkan reservasi saat membuat keputusan peningkatan skala. Kumpulan node dengan reservasi yang tidak digunakan yang cocok akan diprioritaskan saat memilih kumpulan node yang akan ditingkatkan skalanya, meskipun kumpulan node tersebut bukan yang paling efisien. Selain itu, reservasi yang tidak digunakan selalu diprioritaskan saat menyeimbangkan peningkatan skala multi-zona.

Nilai default

Untuk kumpulan node Spot VM, kebijakan distribusi autoscaler cluster default adalah ANY. Dalam kebijakan ini, VM Spot memiliki risiko yang lebih rendah untuk di-preempt.

Untuk kumpulan node yang non-preemptible, kebijakan distribusi autoscaler cluster default adalah BALANCED.

Ukuran kumpulan node minimum dan maksimum

Saat membuat kumpulan node baru, Anda dapat menentukan ukuran minimum dan maksimum untuk setiap kumpulan node dalam cluster, dan autoscaler cluster akan membuat keputusan penskalaan ulang dalam batasan penskalaan ini. Untuk memperbarui ukuran minimum, ubah ukuran cluster secara manual menjadi ukuran dalam batasan baru setelah menentukan nilai minimum baru. Autoscaler cluster kemudian membuat keputusan penskalaan ulang berdasarkan batasan baru.

Ukuran kumpulan node saat ini Tindakan autoscaler cluster Batasan penskalaan
Lebih rendah dari jumlah minimum yang Anda tetapkan Autoscaler cluster meningkatkan skala untuk menyediakan pod yang tertunda. Penurunan skala dinonaktifkan. Kumpulan node tidak memperkecil skala di bawah nilai yang Anda tentukan.
Dalam ukuran minimum dan maksimum yang Anda tentukan Autoscaler cluster menaikkan atau menurunkan skala sesuai permintaan. Kumpulan node tetap berada dalam batas ukuran yang Anda tentukan.
Lebih dari jumlah maksimum yang Anda tentukan Autoscaler cluster hanya menurunkan skala node yang dapat dihapus dengan aman. Peningkatan skala dinonaktifkan. Kumpulan node tidak diskalakan di atas nilai yang Anda tentukan.

Di cluster Standar, autoscaler cluster tidak pernah secara otomatis menurunkan skala cluster menjadi nol node. Satu atau beberapa node harus selalu tersedia di cluster untuk menjalankan Pod sistem. Selain itu, jika jumlah node saat ini nol karena penghapusan node secara manual, autoscaler cluster dan penyediaan otomatis node dapat diskalakan dari cluster node nol.

Untuk mempelajari keputusan autoscaler cluster lebih lanjut, lihat batasan autoscaler cluster.

Batas penskalaan otomatis

Anda dapat menetapkan jumlah minimum dan maksimum node untuk autoscaler cluster yang akan digunakan saat menskalakan kumpulan node. Gunakan tanda --min-nodes dan --max-nodes untuk menetapkan jumlah minimum dan maksimum node per zona

Mulai GKE versi 1.24, Anda dapat menggunakan flag --total-min-nodes dan --total-max-nodes untuk cluster baru. Tanda ini menetapkan jumlah minimum dan maksimum jumlah total node dalam kumpulan node di semua zona.

Contoh node minimum dan maksimum

Perintah berikut akan membuat penskalaan otomatis cluster multi-zona dengan enam node di tiga zona pada awalnya, dengan minimal satu node per zona dan maksimum empat node per zona:

gcloud container clusters create example-cluster \
    --num-nodes=2 \
    --zone=us-central1-a \
    --node-locations=us-central1-a,us-central1-b,us-central1-f \
    --enable-autoscaling --min-nodes=1 --max-nodes=4

Dalam contoh ini, ukuran total cluster dapat sebanyak antara tiga hingga dua belas node, yang tersebar di ketiga zona. Jika salah satu zona gagal, ukuran total cluster dapat sebanyak antara dua hingga delapan node.

Contoh total node

Perintah berikut, yang tersedia di GKE versi 1.24 atau versi yang lebih baru, akan membuat penskalaan otomatis cluster multi-zona dengan enam node di tiga zona pada awalnya, dengan minimal tiga node dan maksimum dua belas node dalam kumpulan node di semua zona:

gcloud container clusters create example-cluster \
    --num-nodes=2 \
    --zone=us-central1-a \
    --node-locations=us-central1-a,us-central1-b,us-central1-f \
    --enable-autoscaling --total-min-nodes=3 --total-max-nodes=12

Dalam contoh ini, ukuran total cluster dapat sebanyak antara tiga hingga dua belas node, terlepas dari penyebaran antar-zona.

Profil penskalaan otomatis

Keputusan terkait kapan menghapus node merupakan kompromi antara mengoptimalkan pemanfaatan atau ketersediaan resource. Menghapus node yang kurang dimanfaatkan akan meningkatkan pemanfaatan cluster, tetapi workload baru mungkin harus menunggu sampai resource disediakan lagi agar dapat berjalan.

Anda dapat menentukan profil penskalaan otomatis mana yang akan digunakan saat membuat keputusan tersebut. Profil yang tersedia adalah:

  • balanced: Profil default yang memprioritaskan agar lebih banyak resource tersedia untuk pod yang masuk sehingga mengurangi waktu yang diperlukan untuk mengaktifkannya untuk cluster Standard. Profil balanced tidak tersedia untuk cluster Autopilot.
  • optimize-utilization: Memprioritaskan pengoptimalan pemanfaatan daripada mempertahankan resource di cluster. Saat Anda mengaktifkan profil ini, autoscaler cluster akan menurunkan skala cluster secara lebih agresif. GKE dapat menghapus lebih banyak node, dan menghapus node dengan lebih cepat. GKE memilih untuk menjadwalkan Pod di node yang sudah memiliki alokasi CPU, memori, atau GPU yang tinggi. Namun, faktor lain memengaruhi penjadwalan, seperti penyebaran Pod yang termasuk dalam Deployment, StatefulSet, atau Service yang sama, di seluruh node.

Profil penskalaan otomatis optimize-utilization membantu autoscaler cluster untuk mengidentifikasi dan menghapus node yang kurang dimanfaatkan. Untuk mencapai pengoptimalan ini, GKE menetapkan nama penjadwal dalam spesifikasi Pod ke gke.io/optimize-utilization-scheduler. Pod yang menentukan penjadwal kustom tidak akan terpengaruh.

Perintah berikut mengaktifkan profil penskalaan otomatis optimize-utilization di cluster yang ada:

gcloud container clusters update CLUSTER_NAME \
    --autoscaling-profile optimize-utilization

Mempertimbangkan gangguan dan penjadwalan Pod

Saat menurunkan skala, autoscaler cluster akan mengikuti aturan penjadwalan dan penghapusan yang ditetapkan di Pod. Pembatasan ini dapat mencegah node dihapus oleh autoscaler. Penghapusan node dapat dicegah jika node tersebut berisi Pod dengan salah satu kondisi berikut:

  • Aturan afinitas atau anti-afinitas Pod mencegah penjadwalan ulang.
  • Pod tidak dikelola oleh Pengontrol seperti Deployment, StatefulSet, Job, atau ReplicaSet.
  • Pod memiliki penyimpanan lokal dan versi bidang kontrol GKE lebih rendah dari 1.22. Di cluster GKE dengan bidang kontrol pada versi 1.22 atau yang lebih baru, Pod dengan penyimpanan lokal tidak lagi memblokir penurunan skala.
  • Pod memiliki anotasi "cluster-autoscaler.kubernetes.io/safe-to-evict": "false".
  • Penghapusan node akan melebihi PodDisruptionBudget yang dikonfigurasi.

Untuk informasi selengkapnya tentang autoscaler cluster dan mencegah gangguan, lihat pertanyaan berikut di FAQ autoscaler cluster:

Penskalaan otomatis TPU di GKE

GKE mendukung Tensor Processing Unit (TPU) untuk mempercepat beban kerja machine learning. Node pool slice TPU host tunggal dan node pool slice TPU multi-host mendukung penskalaan otomatis dan penyediaan otomatis.

Dengan flag --enable-autoprovisioning di cluster GKE, GKE membuat atau menghapus node pool slice TPU host tunggal atau multi-host dengan versi dan topologi TPU yang memenuhi persyaratan workload yang tertunda.

Saat Anda menggunakan --enable-autoscaling, GKE menskalakan node pool berdasarkan jenisnya, sebagai berikut:

  • Node pool slice TPU host tunggal: GKE menambahkan atau menghapus node TPU di node pool yang ada. Node pool dapat berisi jumlah node TPU antara nol dan ukuran maksimum node pool seperti yang ditentukan oleh flag --max-nodes dan --total-max-nodes. Saat node pool diskalakan, semua node TPU dalam node pool memiliki jenis mesin dan topologi yang sama. Untuk mempelajari lebih lanjut cara membuat node pool slice TPU host tunggal, lihat Membuat node pool.

  • Node pool slice TPU multi-host: GKE secara atomik akan meningkatkan skala node pool dari nol hingga jumlah node yang diperlukan untuk memenuhi topologi TPU. Misalnya, dengan node pool TPU dengan jenis mesin ct5lp-hightpu-4t dan topologi 16x16, node pool berisi 64 node. Autoscaler GKE memastikan bahwa node pool ini memiliki tepat 0 atau 64 node. Saat menskalakan kembali, GKE akan mengeluarkan semua pod terjadwal, dan menghabiskan seluruh node pool menjadi nol. Untuk mempelajari lebih lanjut cara membuat node pool slice TPU multi-host, lihat Membuat node pool.

Informasi tambahan

Anda dapat menemukan informasi selengkapnya tentang autoscaler cluster di FAQ Penskalaan Otomatis di project Kubernetes open source.

Batasan

Autoscaler cluster memiliki batasan berikut:

  • Local PersistentVolumes tidak didukung oleh autoscaler cluster.
  • Pada bidang kontrol GKE versi yang lebih lama dari 1.24.5-gke.600, saat Pod meminta penyimpanan efemeral, autoscaler cluster tidak mendukung penskalaan kumpulan node dengan nol node yang menggunakan SSD Lokal sebagai penyimpanan efemeral.
  • Batasan ukuran cluster: hingga 15.000 node. Perhatikan batas cluster lainnya dan praktik terbaik kami saat menjalankan cluster dengan ukuran ini.
  • Saat menurunkan skala, autoscaler cluster akan menerapkan periode penghentian normal selama 10 menit untuk penjadwalan ulang Pod node ke node lain sebelum menghentikan node secara paksa.
  • Terkadang, autoscaler cluster tidak dapat menurunkan skala sepenuhnya dan ada node tambahan setelah menurunkan skala. Hal ini dapat terjadi jika Pod sistem yang diperlukan dijadwalkan ke node lain, karena tidak ada pemicu bagi Pod tersebut untuk dipindahkan ke node lain. Lihat Saya memiliki beberapa node dengan pemakaian rendah, tetapi tidak diperkecil skalanya. Mengapa demikian?. Untuk mengatasi batasan ini, Anda dapat mengonfigurasi anggaran gangguan Pod.
  • Penjadwalan kustom dengan Filter yang diubah tidak didukung.
  • Node tidak akan ditingkatkan skalanya jika Pod memiliki nilai PriorityClass di bawah -10. Pelajari lebih lanjut di Bagaimana cara kerja Autoscaler Cluster dengan Prioritas dan Preemption Pod?
  • Autoscaler cluster mungkin tidak memiliki cukup ruang alamat IP yang belum dialokasikan untuk digunakan untuk menambahkan node atau Pod baru, sehingga mengakibatkan kegagalan peningkatan skala, yang ditunjukkan oleh kejadian eventResult dengan alasan scale.up.error.ip.space.exhausted. Anda dapat menambahkan lebih banyak alamat IP untuk node dengan memperluas subnet primer, atau menambahkan alamat IP baru untuk Pod menggunakan CIDR multi-Pod yang berjauhan. Untuk informasi selengkapnya, lihat Ruang IP yang tidak cukup untuk Pod.
  • Autoscaler cluster GKE berbeda dengan Autoscaler cluster project Kubernetes open source. Parameter autoscaler Cluster GKE bergantung pada konfigurasi cluster dan dapat berubah. Jika Anda memerlukan lebih banyak kontrol atas perilaku penskalaan otomatis, nonaktifkan Autoscaler Cluster GKE dan jalankan Autoscaler Cluster Kubernetes open source. Namun, Kubernetes open source tidak memiliki dukungan Google Cloud.

Masalah umum

  • Pada versi bidang kontrol GKE sebelum versi 1.22, autoscaler cluster GKE berhenti menskalakan semua kumpulan node pada cluster kosong (nol node). Perilaku ini tidak terjadi di GKE versi 1.22 dan yang lebih baru.

Pemecahan masalah

Untuk mendapatkan saran pemecahan masalah, lihat halaman berikut:

Langkah selanjutnya