Halaman ini menunjukkan cara menskalakan cluster Google Kubernetes Engine (GKE) Standard secara otomatis. Untuk mempelajari cara kerja autoscaler cluster, lihat Autoscaler cluster.
Dengan cluster Autopilot, Anda tidak perlu khawatir dengan penyediaan node atau pengelolaan node pool karena node pool disediakan otomatis melalui penyediaan otomatis node, dan penskalaan otomatis untuk memenuhi persyaratan workload Anda.
Menggunakan autoscaler cluster
Bagian berikut menjelaskan cara menggunakan autoscaler cluster.
Membuat cluster dengan penskalaan otomatis
Anda dapat membuat cluster dengan penskalaan otomatis yang diaktifkan menggunakan Google Cloud CLI atau konsol Google Cloud.
gcloud
Untuk membuat cluster dengan penskalaan otomatis yang diaktifkan, gunakan flag --enable-autoscaling
, lalu tentukan --min-nodes
dan --max-nodes
:
gcloud container clusters create CLUSTER_NAME \
--enable-autoscaling \
--num-nodes NUM_NODES \
--min-nodes MIN_NODES \
--max-nodes MAX_NODES \
--region=COMPUTE_REGION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster yang akan dibuat.NUM_NODES
: jumlah node yang akan dibuat di setiap lokasi.MIN_NODES
: jumlah minimum node yang akan diskalakan secara otomatis untuk node pool yang ditentukan per zona. Guna menentukan jumlah minimum node untuk seluruh node pool di GKE versi 1.24 dan yang lebih baru, gunakan--total-min-nodes
. Flag--total-min-nodes
dan--total-max-nodes
tidak dapat muncul bersamaan dengan flag--min-nodes
dan--max-nodes
.MAX_NODES
: jumlah maksimum node yang akan diskalakan secara otomatis untuk node pool yang ditentukan per zona. Guna menentukan jumlah maksimum node untuk seluruh node pool di GKE versi 1.24 dan yang lebih baru, gunakan--total-max-nodes
. Flag--total-min-nodes
dan--total-max-nodes
tidak dapat muncul bersamaan dengan flag--min-nodes
dan--max-nodes
.COMPUTE_REGION
: region Compute Engine untuk cluster baru. Untuk cluster zona, gunakan--zone=COMPUTE_ZONE
.
Contoh: Membuat cluster dengan penskalaan otomatis node diaktifkan serta node min dan maks
Perintah berikut membuat cluster dengan 90 node, atau 30 node di setiap 3 zona yang ada di region tersebut. Penskalaan otomatis node diaktifkan dan mengubah ukuran jumlah node berdasarkan muatan cluster. Autoscaler cluster dapat mengurangi ukuran node pool default hingga 15 node atau menambah node pool hingga maksimum 50 node per zona.
gcloud container clusters create my-cluster --enable-autoscaling \
--num-nodes=30 \
--min-nodes=15 --max-nodes=50 \
--region=us-central
Contoh: Membuat cluster dengan penskalaan otomatis node diaktifkan dan node total
Perintah berikut membuat cluster dengan 30 node, atau 10 node di setiap 3 zona yang ada di region tersebut. Penskalaan otomatis node diaktifkan dan mengubah ukuran jumlah node berdasarkan muatan cluster. Dalam contoh ini, ukuran total cluster dapat berkisar antara 10 hingga 60 node, terlepas dari penyebaran antar-zona.
gcloud container clusters create my-cluster --enable-autoscaling \
--num-nodes 10 \
--region us-central1 \
--total-min-nodes 10 --total-max-nodes 60
Konsol
Untuk membuat cluster baru dengan penskalaan otomatis diaktifkan untuk node pool default:
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Klik add_box Create.
Konfigurasikan cluster Anda sesuai keinginan.
Dari panel navigasi, di bagian Node Pools, klik default-pool.
Centang kotak Enable autoscaling.
Ubah nilai minimum node pada kolom Minimum number of nodes dan nilai maksimum node pada kolom Maximum number of nodes sesuai keinginan.
Klik Create.
Menambahkan node pool dengan penskalaan otomatis
Anda dapat membuat node pool dengan penskalaan otomatis yang diaktifkan menggunakan gcloud CLI atau konsol Google Cloud.
gcloud
Untuk menambahkan node pool dengan penskalaan otomatis ke cluster yang ada, gunakan perintah berikut:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--enable-autoscaling \
--min-nodes=MIN_NODES \
--max-nodes=MAX_NODES \
--region=COMPUTE_REGION
Ganti kode berikut:
POOL_NAME
: nama node pool yang diinginkan.CLUSTER_NAME
: nama cluster tempat node pool dibuat.MIN_NODES
: jumlah minimum node yang akan diskalakan secara otomatis untuk node pool yang ditentukan per zona. Guna menentukan jumlah minimum node untuk seluruh node pool di GKE versi 1.24 dan yang lebih baru, gunakan--total-min-nodes
. Flag--total-min-nodes
dan--total-max-nodes
tidak dapat muncul bersamaan dengan flag--min-nodes
dan--max-nodes
.MAX_NODES
: jumlah maksimum node yang akan diskalakan secara otomatis untuk node pool yang ditentukan per zona. Guna menentukan jumlah maksimum node untuk seluruh node pool di GKE versi 1.24 dan yang lebih baru, gunakan--total-max-nodes
. Flag--total-min-nodes
dan--total-max-nodes
tidak dapat muncul bersamaan dengan flag--min-nodes
dan--max-nodes
.COMPUTE_REGION
: region Compute Engine untuk cluster baru. Untuk cluster zona, gunakan--zone=COMPUTE_ZONE
.
Contoh: Menambahkan node pool dengan penskalaan otomatis node diaktifkan
Perintah berikut membuat node pool dengan penskalaan otomatis node yang menskalakan node pool ke maksimum 5 node dan minimal 1 node:
gcloud container node-pools create my-node-pool \
--cluster my-cluster \
--enable-autoscaling \
--min-nodes 1 --max-nodes 5 \
--zone us-central1-c
Konsol
Untuk menambahkan node pool dengan penskalaan otomatis ke cluster yang sudah ada:
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik add_box Add Node Pool.
Konfigurasikan node pool sesuai keinginan.
Di bagian Size, pilih kotak centang Enable autoscaling.
Ubah nilai minimum node pada kolom Minimum number of nodes dan nilai maksimum node pada kolom Maximum number of nodes sesuai keinginan.
Klik Create.
Mengaktifkan penskalaan otomatis untuk node pool yang sudah ada
Anda dapat mengaktifkan penskalaan otomatis untuk node pool yang sudah ada menggunakan gcloud CLI atau konsol Google Cloud.
gcloud
Guna mengaktifkan penskalaan otomatis untuk node pool yang sudah ada, gunakan perintah berikut:
gcloud container clusters update CLUSTER_NAME \
--enable-autoscaling \
--node-pool=POOL_NAME \
--min-nodes=MIN_NODES \
--max-nodes=MAX_NODES \
--region=COMPUTE_REGION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster yang akan diperbarui.POOL_NAME
: nama node pool yang diinginkan. Jika Anda hanya memiliki satu node pool, berikandefault-pool
sebagai nilainya.MIN_NODES
: jumlah minimum node yang akan diskalakan secara otomatis untuk node pool yang ditentukan per zona. Guna menentukan jumlah minimum node untuk seluruh node pool di GKE versi 1.24 dan yang lebih baru, gunakan--total-min-nodes
. Flag--total-min-nodes
dan--total-max-nodes
tidak dapat muncul bersamaan dengan flag--min-nodes
dan--max-nodes
.MAX_NODES
: jumlah maksimum node yang akan diskalakan secara otomatis untuk node pool yang ditentukan per zona. Guna menentukan jumlah maksimum node untuk seluruh node pool di GKE versi 1.24 dan yang lebih baru, gunakan--total-max-nodes
. Flag--total-min-nodes
dan--total-max-nodes
tidak dapat muncul bersamaan dengan flag--min-nodes
dan--max-nodes
.COMPUTE_REGION
: region Compute Engine untuk cluster baru. Untuk cluster zona, gunakan--zone=COMPUTE_ZONE
.
Konsol
Guna mengaktifkan penskalaan otomatis untuk node pool yang sudah ada:
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik tab Nodes.
Di bagian Node Pools, klik nama node pool yang ingin Anda ubah, lalu klik edit Edit.
Di bagian Size, pilih kotak centang Enable autoscaling.
Ubah nilai minimum node pada kolom Minimum number of nodes dan nilai maksimum node pada kolom Maximum number of nodes sesuai keinginan.
Klik Simpan.
Memverifikasi bahwa penskalaan otomatis untuk node pool yang sudah ada telah diaktifkan
Anda dapat memverifikasi bahwa cluster menggunakan penskalaan otomatis dengan Google Cloud CLI atau konsol Google Cloud.
gcloud
Deskipsikan node pool di dalam cluster:
gcloud container node-pools describe NODE_POOL_NAME --cluster=CLUSTER_NAME |grep autoscaling -A 1
Ganti kode berikut:
POOL_NAME
: nama node pool baru pilihan Anda.CLUSTER_NAME
: nama cluster.
Jika penskalaan otomatis diaktifkan, output-nya akan mirip dengan berikut ini:
autoscaling:
enabled: true
Konsol
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diverifikasi.
Klik tab Nodes.
Di bagian Node Pools, pastikan status
Autoscalling
node pool.
Membuat node pool yang memprioritaskan pengoptimalan reservasi yang tidak digunakan
Anda dapat menggunakan flag --location_policy=ANY
saat membuat node pool untuk
menginstruksikan autoscaler cluster agar
memprioritaskan pemanfaatan reservasi yang tidak digunakan:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--location_policy=ANY
Ganti kode berikut:
POOL_NAME
: nama node pool baru pilihan Anda.CLUSTER_NAME
: nama cluster.
Menonaktifkan penskalaan otomatis untuk node pool yang sudah ada
Anda dapat menonaktifkan penskalaan otomatis untuk node pool yang sudah ada menggunakan gcloud CLI atau konsol Google Cloud.
gcloud
Guna menonaktifkan penskalaan otomatis untuk node pool tertentu, gunakan flag --no-enable-autoscaling
:
gcloud container clusters update CLUSTER_NAME \
--no-enable-autoscaling \
--node-pool=POOL_NAME \
--region=COMPUTE_REGION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster yang akan diperbarui.POOL_NAME
: nama node pool yang diinginkan.COMPUTE_REGION
: region Compute Engine untuk cluster baru. Untuk cluster zona, gunakan--zone=COMPUTE_ZONE
.
Ukuran cluster tetap sesuai ukuran node pool default cluster saat ini, yang dapat diperbarui secara manual.
Konsol
Untuk menonaktifkan penskalaan otomatis bagi node pool tertentu:
Buka halaman Google Kubernetes Engine di konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Klik tab Nodes.
Di bagian Node Pools, klik nama node pool yang ingin Anda ubah, lalu klik edit Edit.
Di bagian Size, hapus centang pada kotak Enable autoscaling.
Klik Simpan.
Mengubah ukuran node pool
Untuk cluster yang mengaktifkan penskalaan otomatis, autoscaler cluster akan otomatis mengubah ukuran node pool dalam batas yang ditentukan oleh nilai ukuran minimum (--min-nodes
) dan ukuran maksimum (--max-nodes
) atau ukuran total
minimum (--total-min-nodes
) dan ukuran total maksimum (--total-max-nodes
). Kedua flag ini tidak dapat muncul bersamaan. Anda tidak dapat mengubah ukuran node pool secara manual dengan mengubah nilai-nilai ini.
Jika Anda ingin mengubah ukuran node pool secara manual di cluster dengan penskalaan otomatis yang diaktifkan, lakukan hal berikut:
- Nonaktifkan penskalaan otomatis pada node pool.
- Ubah ukuran cluster secara manual.
- Aktifkan kembali penskalaan otomatis dan tentukan ukuran minimum dan maksimum node pool.
Mencegah penjadwalan Pod pada node yang dipilih
Anda dapat menggunakan taint startup
atau status
untuk mencegah penjadwalan Pod pada node yang dipilih, bergantung pada kasus penggunaan.
Fitur ini tersedia di GKE dalam versi 1.28 dan yang lebih baru.
Taint startup
Gunakan taint startup
saat ada operasi yang harus diselesaikan sebelum Pod dapat berjalan di node. Misalnya, Pod tidak boleh berjalan sampai penginstalan driver pada node selesai.
Autoscaler cluster memperlakukan node yang di-taint dengan taint startup
sebagai belum dibaca, tetapi diperhitungkan selama logika peningkatan skala, dengan asumsi node tersebut akan segera siap.
Taint startup didefinisikan sebagai semua taint dengan awalan startup-taint.cluster-autoscaler.kubernetes.io/
Taint status
Gunakan taint status
saat GKE tidak boleh menggunakan node tertentu untuk menjalankan Pod.
Autoscaler cluster memperlakukan node yang di-taint dengan taint status
sebagai siap, tetapi mengabaikannya selama logika peningkatan skala. Meskipun node yang di-taint sudah siap, Pod tidak boleh berjalan. Jika Pod memerlukan lebih banyak resource, GKE akan meningkatkan skala cluster dan mengabaikan node yang di-taint.
Taint status didefinisikan sebagai semua taint dengan awalan status-taint.cluster-autoscaler.kubernetes.io/
Abaikan taint
Abaikan taint didefinisikan sebagai semua taint dengan awalan ignore-taint.cluster-autoscaler.kubernetes.io/
Pemecahan masalah
Periksa apakah masalah yang Anda alami disebabkan oleh salah satu batasan untuk autoscaler cluster. Jika tidak, lihat informasi pemecahan masalah berikut untuk autoscaler cluster:
Skala cluster tidak dapat diperkecil
Setelah skala cluster ditingkatkan dengan benar lalu Anda berupaya untuk memperkecil skala, node yang kurang dimanfaatkan akan tetap diaktifkan dan mencegah cluster diperkecil skalanya. Error ini terjadi karena salah satu alasan berikut:
Pembatasan dapat mencegah node dihapus oleh autoscaler. GKE mungkin mencegah penghapusan node jika node tersebut berisi Pod dengan salah satu kondisi berikut:
- Aturan afinitas atau anti-afinitas Pod mencegah penjadwalan ulang.
- Pada GKE versi 1.21 dan yang lebih lama, Pod memiliki penyimpanan lokal.
- Pod tidak dikelola oleh Pengontrol seperti Deployment, StatefulSet, Job, atau ReplicaSet.
Untuk mengatasi masalah ini, siapkan penjadwalan autoscaler cluster dan aturan penghapusan di Pod Anda. Untuk informasi selengkapnya, lihat Gangguan dan penjadwalan Pod.
Pod Sistem berjalan di node. Untuk memastikan bahwa node Anda menjalankan pod
kube-system
, lakukan langkah-langkah berikut:Buka halaman Logs Explorer di konsol Google Cloud.
Klik Query builder.
Gunakan kueri berikut untuk menemukan semua data log kebijakan jaringan:
- resource.labels.location="CLUSTER_LOCATION" resource.labels.cluster_name="CLUSTER_NAME" logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fcluster-autoscaler-visibility" jsonPayload.noDecisionStatus.noScaleDown.nodes.node.mig.nodepool="NODE_POOL_NAME"
Ganti kode berikut:
CLUSTER_LOCATION
: Region tempat cluster Anda berada.CLUSTER_NAME
: Nama cluster Anda.PROJECT_ID
: ID project tempat cluster dibuat.NODE_POOL_NAME
: Nama node pool Anda.Jika ada pod
kube-system
yang berjalan di node pool Anda, output-nya akan mencakup hal berikut:"no.scale.down.node.pod.kube.system.unmovable"
Untuk mengatasi masalah ini, Anda harus:
- Menambahkan
PodDisruptionBudget
untuk Podkube-system
. Untuk informasi selengkapnya tentang menambahkanPodDisruptionBudget
secara manual untuk Podkube-system
, lihat FAQ tentang autoscaler cluster Kubernetes. - Menggunakan kombinasi taint dan toleransi node pool untuk memisahkan pod
kube-system
dari pod aplikasi Anda. Untuk informasi selengkapnya, lihat penyediaan otomatis node di GKE.
Ukuran node pool tidak cocok
Masalah berikut terjadi saat Anda mengonfigurasi ukuran node pool:
- Ukuran node pool yang sudah ada lebih kecil dari jumlah minimum node yang Anda tentukan untuk cluster.
Daftar berikut menjelaskan kemungkinan penyebab umum perilaku ini:
- Anda menentukan jumlah minimum node baru saat jumlah node yang sudah ada lebih tinggi.
- Anda memperkecil skala node pool atau Grup Instance Terkelola yang mendasarinya secara manual. Operasi manual ini menentukan jumlah node yang lebih rendah dari jumlah node minimum.
- Anda men-deploy Spot VM yang di-preempt dalam node pool.
- Pod memiliki penyimpanan lokal dan versi bidang kontrol GKE yang lebih rendah dari 1.22. Di cluster GKE dengan bidang kontrol 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"
.Untuk mengetahui langkah-langkah pemecahan masalah selengkapnya selama peristiwa penurunan skala, lihat Skala cluster tidak dapat diperkecil.
Saat memperkecil skala, autoscaler cluster akan mematuhi masa tenggang penghentian Pod, hingga maksimum 10 menit. Setelah 10 menit, Pod akan dihentikan secara paksa.
Anda mungkin mengamati ukuran node pool yang lebih kecil dari jumlah minimum node yang Anda tentukan untuk cluster. Perilaku ini terjadi karena autoscaler menggunakan jumlah minimum parameter node hanya saat autoscaler perlu menentukan penurunan skala. Berikut adalah daftar kemungkinan penyebab umum perilaku ini.
Untuk mengatasi masalah ini, tingkatkan ukuran node pool secara manual hingga setidaknya sama dengan jumlah minimum node. Untuk informasi selengkapnya, lihat cara mengubah ukuran cluster secara manual.
Untuk informasi selengkapnya tentang autoscaler cluster dan mencegah gangguan, lihat pertanyaan berikut di FAQ tentang autoscaler cluster Kubernetes:
- Bagaimana cara kerja penurunan skala?
- Apakah autoscaler cluster dapat berfungsi dengan PodDisruptionBudget saat memperkecil skala?
- Apa saja jenis Pod yang dapat mencegah autoscaler cluster menghapus node?