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.

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. 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 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 topologi 16x16, 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:

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