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.
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.
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.
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 bekerja berdasarkan kumpulan node. 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 tidak dapat dijadwalkan karena jumlah node dalam kumpulan node tidak mencukupi, autoscaler cluster akan menambahkan node, hingga ukuran maksimum kumpulan node.
- 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.
Jika Pod Anda meminta terlalu sedikit resource (atau default belum diubah, yang mungkin tidak mencukupi) dan node Anda mengalami kekurangan, 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.
Kriteria pengoperasian
Autoscaler cluster membuat asumsi berikut saat mengubah ukuran kumpulan node:
- Semua Pod yang direplikasi dapat dimulai ulang di beberapa node lain, dan mungkin menyebabkan gangguan singkat. Jika layanan Anda tidak toleran terhadap gangguan, sebaiknya jangan gunakan autoscaler cluster.
- Pengguna atau administrator tidak mengelola node secara manual; dan 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. Pengurangan biaya kumpulan node yang berisi Spot VM akan diperhitungkan.
- 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 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 mendeteksi perubahan node manual dan kumpulan node untuk meningkatkan skala.
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.
Kebijakan lokasi
Mulai GKE versi 1.24.1-gke.800, Anda dapat mengubah kebijakan lokasi autoscaler cluster GKE. Anda dapat mengontrol kebijakan distribusi autoscaler cluster dengan menentukan tanda location_policy
dengan salah satu nilai berikut:
BALANCED
: autoscaler 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 mempertimbangkan banyak faktor, termasuk kapasitas yang tersedia di zona dan afinitas zona tertentu pada Pod yang memicu peningkatan skala.ANY
: autoscaler memprioritaskan penggunaan reservasi dan akun yang tidak digunakan untuk batasan resource yang tersedia saat ini. Kebijakan ini direkomendasikan jika Anda menggunakan Spot VM atau jika Anda ingin menggunakan reservasi VM yang tidak sama antar-zona.
Pemesanan
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 penskalaan otomatis cluster membuat keputusan penskalaan ulang dalam batasan penskalaan ini. Untuk memperbarui ukuran minimum, ubah ukuran cluster secara manual ke 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, penskalaan otomatis cluster tidak pernah secara otomatis menskalakan cluster hingga 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, penskalaan otomatis cluster dan penyediaan otomatis node dapat ditingkatkan dari nol cluster node.
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 untuk cluster Standar. Profilbalanced
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:
- Bagaimana cara kerja penurunan skala?
- Apakah autoscaler Cluster dapat digunakan dengan PodDisruptionBudget dalam penurunan skala?
- Jenis Pod apa yang dapat mencegah autoscaler Cluster menghapus node?
Penskalaan otomatis TPU di GKE
GKE mendukung Tensor Processing Unit (TPU) untuk mempercepat workload machine learning. Kumpulan node slice TPU host tunggal dan kumpulan node slice TPU multi-host mendukung penskalaan otomatis dan penyediaan otomatis.
Dengan flag --enable-autoprovisioning
di cluster GKE, GKE membuat atau menghapus kumpulan node slice TPU host tunggal atau multi-host dengan versi TPU dan topologi yang memenuhi persyaratan workload yang tertunda.
Saat Anda menggunakan --enable-autoscaling
, GKE menskalakan kumpulan node berdasarkan jenisnya, sebagai berikut:
Kumpulan node slice TPU host tunggal: GKE menambahkan atau menghapus node TPU di kumpulan node yang ada. Kumpulan node dapat berisi sejumlah node TPU antara nol dan ukuran maksimum kumpulan node seperti yang ditentukan oleh tanda --max-nodes dan tanda --total-max-nodes. Saat kumpulan node diskalakan, semua node TPU di kumpulan node memiliki jenis mesin dan topologi yang sama. Untuk mempelajari cara membuat kumpulan node slice TPU host tunggal lebih lanjut, lihat Membuat kumpulan node.
Kumpulan node slice TPU multi-host: GKE meningkatkan skala kumpulan node secara atomik dari nol hingga jumlah node yang diperlukan untuk memenuhi topologi TPU. Misalnya, dengan kumpulan node TPU dengan jenis mesin
ct5lp-hightpu-4t
dan topologi16x16
, kumpulan node tersebut berisi 64 node. Autoscaler GKE memastikan bahwa kumpulan node ini memiliki tepat 0 atau 64 node. Saat melakukan penskalaan kembali, GKE akan mengeluarkan semua pod terjadwal, dan menghabiskan seluruh kumpulan node hingga nol. Untuk mempelajari lebih lanjut cara membuat kumpulan node slice TPU multi-host, lihat Membuat kumpulan node.
Informasi tambahan
Anda dapat menemukan informasi lebih lanjut tentang autoscaler cluster di FAQ Penskalaan Otomatis di project Kubernetes open source.
Batasan
Autoscaler cluster memiliki batasan berikut:
- Local PersistentVolumes saat ini 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 ini.
- 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 alasanscale.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.
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.
Langkah selanjutnya
- Pelajari cara menskalakan node secara otomatis.
- Pelajari cara mengupgrade node Anda secara otomatis.
- Pelajari cara memperbaiki node secara otomatis.
- Pelajari cara mengurangi waktu pengambilan gambar di node baru.