Penskalaan otomatis Pod Vertikal


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 menetapkan permintaan dan batas CPU terbaru serta permintaan dan batas memori untuk container di Pod, Anda dapat mengonfigurasi penskalaan otomatis Pod vertikal guna memberikan nilai yang direkomendasikan untuk permintaan CPU dan memori serta batas yang bisa digunakan untuk mengupdate Pod secara manual, atau Anda dapat mengonfigurasi penskalaan otomatis Pod vertikal agar otomatis mengupdate nilai tersebut.

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 workload, 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

  • 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

TypeMeta

Grup, versi, dan jenis API.

metadata

ObjectMeta

Metadata objek standar.

spec

VerticalPodAutoscalerSpec

Perilaku VerticalPodAutoscaler yang diinginkan.

status

VerticalPodAutoscalerStatus

Status VerticalPodAutoscaler yang terakhir diamati.

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

Kolom
targetRef

CrossVersionObjectReference

Referensi ke pengontrol yang mengelola kumpulan Pod untuk dikontrol autoscaler, misalnya Deployment atau StatefulSet. You can point a VerticalPodAutoscaler ke pengontrol mana pun yang memiliki subresource Scale. Biasanya, VerticalPodAutoscaler mengambil kumpulan Pod dari ScaleStatus pengontrol. Untuk beberapa pengontrol yang biasa digunakan, misalnya DaemonSet, VerticalPodAutoscaler akan mengambil kumpulan Pod dari spesifikasi pengontrol.

updatePolicy

PodUpdatePolicy

Menentukan apakah update yang direkomendasikan akan diterapkan saat Pod dimulai, dan apakah update yang direkomendasikan akan diterapkan selama masa pakai Pod.

resourcePolicy

PodResourcePolicy

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

VerticalPodAutoscalerRecommenderSelector array

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

TypeMeta

Grup, versi, dan jenis API.

metadata

ObjectMeta

Metadata objek standar.

items

VerticalPodAutoscaler array

Daftar objek VerticalPodAutoscaler.

PodUpdatePolicy v1 autoscaling.k8s.io

Kolom
updateMode

string

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

int32

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

ContainerResourcePolicy array

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

string

Nama container tempat kebijakan diterapkan. Jika tidak ditentukan, kebijakan tersebut akan berfungsi sebagai kebijakan default.

mode

ContainerScalingMode

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

ResourceList

Menentukan permintaan CPU dan permintaan memori minimum yang diizinkan untuk container. Secara default, tidak ada batas minimum yang diterapkan.

maxAllowed

ResourceList

Menentukan permintaan CPU dan permintaan memori maksimum yang diizinkan untuk container. Secara default, tidak ada batas maksimum yang diterapkan.

ControlledResources

[]ResourceName

Menentukan jenis rekomendasi yang akan dihitung (dan mungkin diterapkan) oleh VerticalPodAutoscaler. Jika kosong, default dari [ResourceCPU, ResourceMemory] akan digunakan.

VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io

Kolom
name

string

Nama pemberi rekomendasi yang bertanggung jawab membuat rekomendasi untuk objek ini.

VerticalPodAutoscalerStatus v1 autoscaling.k8s.io

Kolom
recommendation

RecommendedPodResources

Permintaan CPU dan memori yang direkomendasikan terkini.

conditions

VerticalPodAutoscalerCondition array

Menjelaskan status VerticalPodAutoscaler saat ini.

RecommendedPodResources v1 autoscaling.k8s.io

Kolom
containerRecommendation

RecommendedContainerResources array

Array rekomendasi resource untuk setiap penampung.

RecommendedContainerResources v1 autoscaling.k8s.io

Kolom
containerName

string

Nama container yang diterapkan oleh rekomendasi.

target

ResourceList

Permintaan CPU dan permintaan memori yang direkomendasikan untuk container.

lowerBound

ResourceList

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

ResourceList

Permintaan CPU dan permintaan memori maksimum yang direkomendasikan untuk container. Permintaan CPU dan memori yang lebih tinggi dari nilai ini cenderung sia-sia.

uncappedTarget

ResourceList

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

VerticalPodAutoscalerConditionType

Jenis kondisi yang dijelaskan. Nilai yang mungkin adalah "RecommendationProvided", "LowConfidence", "NoPodsMatched", dan "FetchingHistory".

status

ConditionStatus

Status kondisi. Nilai yang mungkin adalah True (Benar), False (Salah), dan Unknown (Tidak diketahui).

lastTransitionTime

Time

Terakhir kali kondisi melakukan transisi dari satu status ke status lainnya.

reason

string

Alasan untuk transisi terakhir dari satu status ke status lainnya.

message

string

String yang dapat dibaca manusia yang memberikan detail tentang transisi terakhir dari satu status ke status lainnya.

Langkah selanjutnya