Halaman ini menyediakan ringkasan tentang penskalaan otomatis Pod vertikal di Google Kubernetes Engine (GKE) dan menyediakan materi referensi untuk resource kustom VerticalPodAutoscaler
dan jenis terkait.
Penskalaan otomatis Pod vertikal memberikan rekomendasi untuk penggunaan resource dari waktu ke waktu. Untuk peningkatan penggunaan resource secara tiba-tiba, gunakan Horizontal Pod Autoscaler.
Untuk mempelajari cara menggunakan penskalaan otomatis Pod vertikal, lihat Menskalakan permintaan dan batas resource container.
Untuk mempelajari praktik terbaik penskalaan otomatis, lihat Praktik terbaik untuk menjalankan aplikasi Kubernetes yang hemat biaya di GKE.
Cara kerja penskalaan otomatis Pod vertikal
Penskalaan otomatis Pod vertikal dapat digunakan untuk menganalisis dan menetapkan resource CPU dan memori yang diperlukan oleh Pod. Daripada harus menetapkan permintaan dan batas CPU dan permintaan dan batas memori terbaru untuk penampung di Pod, Anda dapat mengonfigurasi penskalaan otomatis Pod vertikal untuk memberikan nilai yang direkomendasikan untuk permintaan dan batas CPU dan memori yang dapat Anda gunakan untuk mengupdate Pod secara manual, atau Anda dapat mengonfigurasi penskalaan otomatis Pod vertikal untuk memperbarui nilai secara otomatis.
Penskalaan otomatis Pod vertikal diaktifkan secara default di cluster Autopilot.
Penskalaan otomatis Pod vertikal dalam mode Otomatis
Karena keterbatasan Kubernetes, satu-satunya cara untuk mengubah permintaan resource pada Pod yang berjalan adalah dengan membuat ulang Pod. Jika Anda membuat objek VerticalPodAutoscaler
dengan updateMode
Auto
, VerticalPodAutoscaler
akan mengeluarkan Pod
jika perlu mengubah permintaan resource Pod.
Untuk membatasi jumlah restart Pod, gunakan Anggaran gangguan pod. Untuk memastikan bahwa cluster Anda dapat menangani ukuran baru workload, gunakan autoscaler cluster dan penyediaan otomatis node.
Penskalaan otomatis Pod vertikal memberi tahu autoscaler cluster sebelum update, dan menyediakan resource yang diperlukan untuk beban kerja yang diubah ukurannya sebelum membuat ulang beban kerja, untuk meminimalkan waktu gangguan.
Manfaat
Penskalaan otomatis Pod vertikal memberikan manfaat berikut:
- Menetapkan batas dan permintaan resource yang tepat untuk workload Anda akan meningkatkan stabilitas dan efisiensi biaya. Jika ukuran resource Pod lebih kecil dari workload yang diperlukan, aplikasi dapat di-throttle atau dapat gagal karena error kehabisan memori. Jika ukuran resource terlalu besar, Anda akan mengalami pemborosan dan oleh karena itu, tagihan akan lebih besar.
- Node cluster digunakan secara efisien karena Pod hanya menggunakan apa yang dibutuhkannya.
- Pod dijadwalkan ke node yang memiliki resource yang sesuai.
- Anda tidak perlu menjalankan tugas benchmark yang memakan waktu untuk menentukan nilai yang benar untuk permintaan CPU dan memori.
- Mengurangi waktu pemeliharaan karena autoscaler dapat menyesuaikan permintaan CPU dan memori dari waktu ke waktu tanpa Anda perlu melakukan tindakan apa pun.
Penskalaan otomatis Pod vertikal GKE memberikan manfaat berikut dibandingkan Autoscaler open source Kubernetes:
- Mempertimbangkan ukuran node maksimum dan kuota resource saat menentukan target rekomendasi.
- Memberi tahu autoscaler cluster untuk menyesuaikan kapasitas cluster.
- Menggunakan data historis, yang menyediakan metrik yang dikumpulkan sebelum Anda mengaktifkan Autoscaler Pod Vertikal.
- Menjalankan Pod Autoscaler Pod Vertikal sebagai proses bidang kontrol, bukan deployment pada node pekerja.
Batasan
- Untuk menggunakan penskalaan otomatis Pod vertikal dengan penskalaan Pod horizontal, gunakan penskalaan Pod multidimensi. Anda juga dapat menggunakan penskalaan otomatis Pod vertikal dengan penskalaan otomatis Pod horizontal pada metrik kustom dan eksternal.
- Penskalaan otomatis Pod vertikal belum siap digunakan untuk workload berbasis JVM karena visibilitas yang terbatas ke penggunaan memori aktual workload.
- Penskalaan otomatis Pod vertikal memiliki setelan default dua replika minimum untuk
Deployment guna mengganti Pod dengan nilai resource yang direvisi. Di
GKE versi 1.22 dan versi yang lebih baru, Anda dapat mengganti setelan ini dengan
menentukan nilai untuk
minReplicas
di kolom PodUpdatePolicy.
Praktik terbaik
- Untuk menghindari gangguan update cluster, sebaiknya pertahankan jumlah
objek
VerticalPodAutoscaler
per cluster di bawah 1.000. - Penskalaan otomatis Pod vertikal berfungsi paling optimal dengan workload homogen yang berjalan lama.
Referensi API
Ini adalah referensi API v1
. Kami sangat merekomendasikan penggunaan API versi ini.
VerticalPodAutoscaler v1 autoscaling.k8s.io
Kolom | |
---|---|
|
Grup, versi, dan jenis API. |
metadata |
Metadata objek standar. |
spec |
Perilaku |
status |
Status |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
Kolom | |
---|---|
targetRef |
Referensi ke pengontrol yang mengelola kumpulan Pod untuk dikontrol autoscaler, misalnya Deployment atau StatefulSet.
You can point a |
updatePolicy |
Menentukan apakah update yang direkomendasikan akan diterapkan saat Pod dimulai, dan apakah update yang direkomendasikan akan diterapkan selama masa pakai Pod. |
resourcePolicy |
Menentukan kebijakan tentang cara permintaan CPU dan memori disesuaikan untuk setiap container. Kebijakan resource dapat digunakan untuk menetapkan batasan pada rekomendasi untuk setiap penampung. Jika tidak ditentukan, autoscaler akan menghitung resource yang direkomendasikan untuk semua container di Pod, tanpa batasan tambahan. |
recommenders |
Pemberi rekomendasi bertanggung jawab untuk membuat rekomendasi untuk objek VPA ini. Biarkan kosong untuk menggunakan pemberi rekomendasi default yang disediakan oleh GKE. Jika tidak, daftar dapat berisi satu entri untuk pemberi rekomendasi alternatif yang diberikan pengguna. Didukung sejak GKE 1.22. |
VerticalPodAutoscalerList v1 autoscaling.k8s.io
Kolom | |
---|---|
|
Grup, versi, dan jenis API. |
metadata |
Metadata objek standar. |
items |
Daftar objek |
PodUpdatePolicy v1 autoscaling.k8s.io
Kolom | |
---|---|
updateMode |
Menentukan apakah update yang direkomendasikan akan diterapkan saat Pod dimulai, dan apakah update yang direkomendasikan akan diterapkan selama masa pakai Pod. Nilai yang mungkin adalah "Off", "Initial", "Recreate", dan "Auto". Setelan defaultnya adalah "Auto" jika Anda tidak menentukan nilai. |
minReplicas |
Jumlah minimal replika yang harus aktif agar Updater dapat mencoba penghapusan Pod (menunggu pemeriksaan lain seperti Anggaran Gangguan Pod). Hanya nilai positif yang diizinkan. Setelan defaultnya adalah flag '--min-replicas' global yang disetel ke 2 di GKE. Didukung sejak GKE 1.22. |
PodResourcePolicy v1 autoscaling.k8s.io
Kolom | |
---|---|
containerPolicies |
Array kebijakan resource untuk container individual. Hanya boleh ada maksimal satu entri untuk setiap container yang diberi nama dan secara opsional, satu entri karakter pengganti dengan `containerName = '*'`, yang menangani semua container yang tidak memiliki kebijakan individual. |
ContainerResourcePolicy v1 autoscaling.k8s.io
Kolom | |
---|---|
containerName |
Nama container tempat kebijakan diterapkan. Jika tidak ditentukan, kebijakan tersebut akan berfungsi sebagai kebijakan default. |
mode |
Menentukan apakah update yang direkomendasikan diterapkan ke container saat dimulai, dan apakah update yang direkomendasikan diterapkan selama masa pakai container. Nilai yang mungkin adalah "Off" dan "Auto". Setelan defaultnya adalah "Auto" jika Anda tidak menentukan nilai. |
minAllowed |
Menentukan permintaan CPU dan permintaan memori minimum yang diizinkan untuk container. Secara default, tidak ada batas minimum yang diterapkan. |
maxAllowed |
Menentukan permintaan CPU dan permintaan memori maksimum yang diizinkan untuk container. Secara default, tidak ada batas maksimum yang diterapkan. |
ControlledResources |
Menentukan jenis rekomendasi yang akan dihitung (dan
mungkin diterapkan) oleh |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
Kolom | |
---|---|
name |
Nama pemberi rekomendasi yang bertanggung jawab membuat rekomendasi untuk objek ini. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
Kolom | |
---|---|
recommendation |
Permintaan CPU dan memori yang direkomendasikan terkini. |
conditions |
Menjelaskan status |
RecommendedPodResources v1 autoscaling.k8s.io
Kolom | |
---|---|
containerRecommendation |
Array rekomendasi resource untuk setiap penampung. |
RecommendedContainerResources v1 autoscaling.k8s.io
Kolom | |
---|---|
containerName |
Nama container yang diterapkan oleh rekomendasi. |
target |
Permintaan CPU dan permintaan memori yang direkomendasikan untuk container. |
lowerBound |
Permintaan CPU dan permintaan memori minimum yang direkomendasikan untuk container. Jumlah ini tidak dijamin cukup untuk membuat aplikasi menjadi stabil. Menjalankan dengan permintaan CPU dan memori yang lebih kecil cenderung memiliki dampak signifikan terhadap performa atau ketersediaan. |
upperBound |
Permintaan CPU dan permintaan memori maksimum yang direkomendasikan untuk container. Permintaan CPU dan memori yang lebih tinggi dari nilai ini cenderung sia-sia. |
uncappedTarget |
Rekomendasi resource terbaru yang dihitung oleh autoscaler, berdasarkan penggunaan resource sebenarnya, tidak memperhitungkan ContainerResourcePolicy. Jika penggunaan resource yang sebenarnya menyebabkan target melanggar ContainerResourcePolicy, hal ini mungkin berbeda dengan rekomendasi terbatas. Kolom ini tidak memengaruhi penetapan resource yang sebenarnya. Kolom ini hanya digunakan sebagai indikasi status. |
VerticalPodAutoscalerCondition v1 autoscaling.k8s.io
Kolom | |
---|---|
type |
Jenis kondisi yang dijelaskan. Nilai yang mungkin adalah "RecommendationProvided", "LowConfidence", "NoPodsMatched", dan "FetchingHistory". |
status |
Status kondisi. Nilai yang mungkin adalah True (Benar), False (Salah), dan Unknown (Tidak diketahui). |
lastTransitionTime |
Terakhir kali kondisi melakukan transisi dari satu status ke status lainnya. |
reason |
Alasan untuk transisi terakhir dari satu status ke status lainnya. |
message |
String yang dapat dibaca manusia yang memberikan detail tentang transisi terakhir dari satu status ke status lainnya. |
Langkah berikutnya
- Pelajari cara Menskalakan permintaan dan batas resource container.
- Pelajari Autoscaler cluster.