Menskalakan cluster secara otomatis


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:

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Klik Create.

  3. Konfigurasikan cluster Anda sesuai keinginan.

  4. Dari panel navigasi, di bagian Node Pools, klik default-pool.

  5. Centang kotak Enable autoscaling.

  6. Ubah nilai minimum node pada kolom Minimum number of nodes dan nilai maksimum node pada kolom Maximum number of nodes sesuai keinginan.

  7. 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:

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Klik Add Node Pool.

  4. Konfigurasikan node pool sesuai keinginan.

  5. Di bagian Size, pilih kotak centang Enable autoscaling.

  6. Ubah nilai minimum node pada kolom Minimum number of nodes dan nilai maksimum node pada kolom Maximum number of nodes sesuai keinginan.

  7. 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, berikan default-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:

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Klik tab Nodes.

  4. Di bagian Node Pools, klik nama node pool yang ingin Anda ubah, lalu klik Edit.

  5. Di bagian Size, pilih kotak centang Enable autoscaling.

  6. Ubah nilai minimum node pada kolom Minimum number of nodes dan nilai maksimum node pada kolom Maximum number of nodes sesuai keinginan.

  7. 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

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diverifikasi.

  3. Klik tab Nodes.

  4. 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:

  1. Buka halaman Google Kubernetes Engine di konsol Google Cloud.

    Buka Google Kubernetes Engine

  2. Di daftar cluster, klik nama cluster yang ingin diubah.

  3. Klik tab Nodes.

  4. Di bagian Node Pools, klik nama node pool yang ingin Anda ubah, lalu klik Edit.

  5. Di bagian Size, hapus centang pada kotak Enable autoscaling.

  6. 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:

  1. Nonaktifkan penskalaan otomatis pada node pool.
  2. Ubah ukuran cluster secara manual.
  3. 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:

    1. Buka halaman Logs Explorer di konsol Google Cloud.

      Buka Logs Explorer

    2. Klik Query builder.

    3. 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 Pod kube-system. Untuk informasi selengkapnya tentang menambahkan PodDisruptionBudget secara manual untuk Pod kube-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:

Langkah selanjutnya