Penskalaan otomatis Pod horizontal

Halaman ini memberikan ringkasan penskalaan otomatis Pod horizontal dan menjelaskan cara kerjanya di Google Kubernetes Engine (GKE). Anda juga dapat membaca cara mengonfigurasi dan menggunakan penskalaan otomatis Pod horizontal pada cluster Anda.

Horizontal Pod Autoscaler mengubah bentuk workload Kubernetes Anda dengan otomatis meningkatkan atau mengurangi jumlah Pod sebagai respons terhadap konsumsi CPU atau memori workload, atau sebagai respons terhadap metrik kustom yang dilaporkan dari dalam Kubernetes atau metrik eksternal dari sumber di luar cluster Anda.

Penskalaan otomatis Pod horizontal tidak mengubah jumlah node dalam cluster GKE. Untuk menskalakan jumlah node dalam cluster secara otomatis berdasarkan perubahan jumlah Pod, Anda dapat menggunakan cluster autoscaler.

Saat pertama kali men-deploy workload ke cluster Kubernetes, Anda mungkin tidak yakin dengan persyaratan resource-nya. Persyaratan ini juga dapat berubah seiring waktu, bergantung pada pola penggunaan, dependensi eksternal, atau faktor lainnya. Penskalaan otomatis Pod horizontal membantu memastikan bahwa workload berfungsi secara konsisten dalam berbagai situasi, dan memungkinkan Anda mengontrol biaya dengan membayar kapasitas ekstra hanya saat Anda membutuhkannya.

Tidak selalu mudah untuk memprediksi indikator yang menunjukkan kurangnya resource atau kurang dimanfaatkannya workload Anda. Horizontal Pod Autoscaler dapat secara otomatis menskalakan jumlah Pod dalam workload berdasarkan satu atau beberapa metrik dari jenis berikut:

  • Penggunaan resource sebenarnya: saat penggunaan CPU atau memori Pod tertentu melebihi nilai minimum. Hal ini dapat dinyatakan sebagai nilai mentah atau sebagai persentase jumlah yang diminta Pod untuk resource tersebut.

  • Metrik kustom: berdasarkan metrik yang dilaporkan oleh objek Kubernetes dalam cluster, seperti kecepatan permintaan klien per detik atau penulisan I/O per detik.

    Cara ini dapat berguna jika aplikasi Anda rentan terhadap bottleneck jaringan, bukan CPU atau memori.

  • Metrik eksternal: didasarkan pada metrik dari aplikasi atau layanan yang eksternal ke cluster Anda.

    Misalnya, workload Anda mungkin memerlukan lebih banyak CPU saat menyerap sejumlah besar permintaan dari pipeline seperti Pub/Sub. Anda dapat membuat metrik eksternal untuk ukuran antrean, dan mengonfigurasi Horizontal Pod Autoscaler agar otomatis meningkatkan jumlah Pod saat ukuran antrean mencapai batas yang ditentukan, dan untuk mengurangi jumlah Pod saat ukuran antrean menyusut.

Anda dapat menggabungkan Horizontal Pod Autoscaler dengan Vertical Pod Autoscaler, dengan beberapa batasan.

Cara kerja penskalaan otomatis Pod horizontal

Setiap penskalaan otomatis Pod horizontal yang dikonfigurasi beroperasi menggunakan loop kontrol. Horizontal Pod Autoscaler yang terpisah ada untuk setiap workload. Setiap horizontal Pod autoscaler secara berkala memeriksa metrik workload tertentu terhadap batas target yang Anda konfigurasikan, dan mengubah bentuk workload secara otomatis.

Resource Per Pod

Untuk resource yang dialokasikan per Pod, seperti CPU, pengontrol membuat kueri API metrik resource untuk setiap container yang berjalan di Pod.

  • Jika Anda menentukan nilai mentah untuk CPU atau memori, nilai tersebut akan digunakan.
  • Jika Anda menentukan nilai persentase untuk CPU atau memori, penskalaan otomatis Pod horizontal menghitung nilai penggunaan rata-rata sebagai persentase permintaan CPU atau memori Pod tersebut.
  • Metrik kustom dan eksternal dinyatakan sebagai nilai mentah atau nilai rata-rata.

Pengontrol menggunakan nilai rata-rata atau mentah untuk metrik yang dilaporkan guna menghasilkan rasio, dan menggunakan rasio tersebut untuk menskalakan workload secara otomatis. Anda dapat membaca deskripsi algoritma horizontal Pod autoscaler dalam dokumentasi project Kubernetes.

Merespons beberapa metrik

Jika Anda mengonfigurasi workload untuk menskalakan otomatis berdasarkan beberapa metrik, horizontal Pod autoscaler akan mengevaluasi setiap metrik secara terpisah dan menggunakan algoritma penskalaan untuk menentukan skala workload baru berdasarkan setiap metrik. Skala terbesar dipilih untuk tindakan penskalaan otomatis.

Jika satu atau beberapa metrik tidak tersedia karena alasan tertentu, autoscaler Pod horizontal masih meningkatkan skala berdasarkan ukuran terbesar yang dihitung, tetapi tidak menurunkan skalanya.

Mencegah thrashing

Thrashing mengacu pada situasi saat penskalaan otomatis Pod horizontal mencoba melakukan tindakan penskalaan otomatis berikutnya sebelum workload selesai merespons tindakan penskalaan otomatis sebelumnya. Untuk mencegah thrashing, penskalaan otomatis Pod horizontal memilih rekomendasi terbesar dari periode stabilisasi yang ditentukan. Perilaku ini dikontrol oleh kolom scaleDown.stabilizationWindowSeconds dalam spesifikasi behavior HPA, yang secara default ditetapkan ke 300 detik (lima menit) di GKE.

Untuk mencegah fluktuasi kecil menyebabkan peristiwa penskalaan yang tidak perlu, penskalaan otomatis Pod horizontal menggunakan nilai toleransi 10%. Untuk target tertentu, tidak ada tindakan penskalaan yang dilakukan jika rasio nilai metrik saat ini terhadap nilai metrik target berada dalam 10% dari 1,0.

Penskalaan ke dan dari nol

Di GKE versi 1.37 atau yang lebih baru, Anda dapat mengonfigurasi penskalaan otomatis Pod horizontal untuk menskalakan workload hingga 0 replika saat tidak ada permintaan, dan menskalakan workload kembali secara otomatis saat permintaan berlanjut. Menskalakan ke dan dari nol mencakup perilaku berikut:

  • Pelewatan toleransi: saat workload berada pada 0 replika, GKE akan melewati pemeriksaan toleransi metrik standar (rasio 0,9 hingga 1,1). Nilai metrik apa pun yang lebih besar dari nol, seperti satu pesan dalam antrean, akan langsung memicu peningkatan skala ke setidaknya 1 replika tanpa menunggu untuk melewati batas toleransi.
  • Jendela stabilisasi: penskalaan ke atas secara default adalah 0 detik (scaleUp.stabilizationWindowSeconds: 0) untuk aktivasi langsung, sedangkan penskalaan ke bawah secara default adalah 300 detik (scaleDown.stabilizationWindowSeconds: 300) untuk membantu memastikan lima menit berkelanjutan tanpa permintaan sebelum melakukan penskalaan ke 0 replika.
  • Kondisi status: saat diskalakan ke 0 replika oleh HPA, pengontrol melaporkan kondisi ScaledToZero: True sambil tetap aktif (ScalingActive: True). Jika workload diskalakan secara manual ke 0 replika di luar HPA (seperti dengan perintah kubectl scale), penskalaan otomatis akan dijeda (ScalingActive: False) hingga workload diskalakan kembali ke 1 replika atau lebih.

Untuk mengetahui petunjuk langkah demi langkah, lihat Menskalakan workload GKE ke dan dari nol menggunakan HPA.

Batasan

  • Kecuali jika Anda menggunakan penyesuaian ukuran HPA dengan VPA (Pratinjau), jangan gunakan penskalaan otomatis Pod horizontal bersama dengan penskalaan otomatis Pod vertikal standar pada CPU atau memori. Anda dapat menggunakan penskalaan otomatis Pod horizontal dengan penskalaan otomatis Pod vertikal untuk metrik lainnya, atau mengonfigurasi penskalaan otomatis Pod multidimensi untuk menskalakan secara horizontal pada CPU dan secara vertikal pada memori secara bersamaan.
  • Jika Anda memiliki Deployment, jangan mengonfigurasi penskalaan otomatis Pod horizontal pada ReplicaSet atau Pengontrol Replikasi yang mencadangkannya. Saat Anda melakukan update berkelanjutan pada Pengontrol Deployment atau Replikasi, update tersebut akan diganti dengan Pengontrol Replikasi yang baru. Sebagai gantinya, konfigurasikan penskalaan otomatis Pod horizontal pada Deployment itu sendiri.
  • Anda tidak dapat menggunakan penskalaan otomatis Pod horizontal untuk workload yang tidak dapat diskalakan, seperti DaemonSets.
  • Penskalaan otomatis Pod horizontal mengekspos metrik sebagai resource Kubernetes, yang membatasi nama metrik seperti tidak boleh ada karakter huruf besar atau '/'. Adaptor metrik Anda mungkin mengizinkan penggantian nama. Misalnya, lihat operator prometheus-adapter as.
  • Horizontal Pod Autoscaler tidak memperkecil skala jika salah satu metrik yang dikonfigurasi untuk dipantau tidak tersedia. Untuk memeriksa apakah Anda memiliki metrik yang tidak tersedia, lihat Melihat detail tentang autoscaler Pod horizontal.

Skalabilitas

Meskipun penskalaan otomatis Pod horizontal tidak memiliki batas pasti jumlah objek HPA yang didukung, performanya dapat terpengaruh seiring bertambahnya jumlah ini. Secara khusus, periode di antara penghitungan ulang HPA mungkin menjadi lebih lama dari 15 detik standar.

  • Di GKE versi minor 1.31 atau 1.32, jika profil HPA Performa dikonfigurasi, periode penghitungan ulang harus berlangsung dalam rentang 15 detik dengan maksimal 1.000 objek HPA. Pelajari cara mengonfigurasi profil HPA Performa.
  • Di GKE versi minor 1.33 atau yang lebih baru, jika profil HPA Performa dikonfigurasi, periode penghitungan ulang harus berlangsung dalam rentang 15 detik dengan maksimal 5.000 objek HPA. Profil HPA Performa diaktifkan secara default di semua cluster yang memenuhi persyaratan.
  • Jika profil HPA Performa tidak dikonfigurasi, periode penghitungan ulang harus berlangsung dalam rentang 15 detik dengan maksimal 300 objek HPA.

Faktor berikut juga dapat memengaruhi performa:

  • Menskalakan beberapa metrik: setiap metrik menambahkan panggilan pengambilan untuk penghitungan rekomendasi, yang memengaruhi periode penghitungan ulang.
  • Latensi stack metrik kustom: waktu respons di atas sekitar 50 milidetik akan lebih banyak daripada yang biasanya diamati dengan metrik Kubernetes standar, yang memengaruhi periode penghitungan ulang.

Berinteraksi dengan objek HorizontalPodAutoscaler

Anda dapat mengonfigurasi Horizontal Pod Autoscaler untuk workload dan mendapatkan informasi tentang peristiwa penskalaan otomatis dan hal yang menyebabkannya, dengan mengunjungi halaman Workload di konsol Google Cloud .

Setiap horizontal Pod autoscaler ada di cluster sebagai objek HorizontalPodAutoscaler. Anda dapat menggunakan perintah seperti kubectl get hpa atau kubectl describe hpa HPA_NAME untuk berinteraksi dengan objek ini.

Anda juga dapat membuat objek HorizontalPodAutoscaler menggunakan perintah kubectl autoscale.

Langkah berikutnya