Halaman ini menjelaskan cara menganalisis dan mengoptimalkan alokasi resource untuk meningkatkan efisiensi workload di Google Kubernetes Engine (GKE), menggunakan penskalaan otomatis Pod vertikal. Dengan menganalisis penggunaan sumber daya beban kerja Anda dari waktu ke waktu, Anda bisa mendapatkan rekomendasi pengoptimalan dan secara otomatis menyesuaikan permintaan CPU dan memori, serta batasan untuk kontainer di dalam Pod.
Di halaman ini, Anda akan mempelajari cara kerja autoscaling Pod vertikal, manfaat dan keterbatasannya, praktik terbaik untuk menggunakannya, dan mengaksesnya.Referensi API untukVerticalPodAutoscaler Sumber daya kustom dan tipe terkait.
Halaman ini ditujukan untuk Operator dan Pengembang yang menyediakan dan mengkonfigurasi sumber daya cloud, menerapkan beban kerja, dan mengelola penskalaan aplikasi. Untuk mempelajari lebih lanjut tentang peran umum, lihat Peran dan tugas pengguna GKE umum.
Sebelum membaca halaman ini, pastikan Anda memahami permintaan dan batasan sumber daya di Kubernetes.
Untuk kebutuhan penskalaan cepat sebagai respons terhadap penggunaan sumber daya yang tiba-tiba, gunakan Horizontal Pod Autoscaler.
Untuk mempelajari praktik terbaik untuk penskalaan otomatis, lihat Praktik terbaik untuk menjalankan aplikasi Kubernetes yang dioptimalkan biayanya 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. Alih-alih harus mengatur permintaan dan batasan CPU dan permintaan dan batasan memori yang terbaru untuk kontainer di Pod Anda, Anda dapat mengkonfigurasi penskalaan otomatis Pod vertikal untuk memberikan nilai yang direkomendasikan untuk permintaan dan batasan CPU dan memori yang dapat Anda gunakan untuk memperbarui Pod Anda secara manual, atau Anda dapat mengkonfigurasi penskalaan otomatis Pod vertikal untuk memperbarui nilai-nilai tersebut secara otomatis.
Penskalaan otomatis Pod vertikal diaktifkan secara default di cluster Autopilot.
Mode penskalaan otomatis Pod vertikal
Anda dapat mengkonfigurasi bagaimana penskalaan otomatis Pod vertikal menerapkan perubahan sumber daya dengan menerapkan mode pembaruan yang berbeda.
mode Auto (Recreate)
Dalam mode Recreate, penskalaan otomatis Pod vertikal akan mengeluarkan Pod jika perlu mengubah permintaan sumber daya Pod. Pengusiran (eviction) diperlukan karena, akibat keterbatasan Kubernetes pada versi sebelum 1.33, satu-satunya cara untuk memodifikasi permintaan sumber daya dari Pod yang sedang berjalan adalah dengan membuatnya ulang.
Untuk membatasi jumlah pembuatan ulang Pod, gunakan Anggaran gangguan Pod. Untuk memastikan bahwa cluster Anda dapat menangani ukuran baru workload, gunakan autoscaler cluster dan penyediaan otomatis node.
Autoscaling Pod vertikal memberi tahu autoscaler klaster sebelum pembaruan, dan menyediakan sumber daya yang dibutuhkan untuk beban kerja yang ukurannya diubah sebelum membuat ulang beban kerja, untuk meminimalkan waktu gangguan.
Mode Initial
Dengan Initial diaktifkan, penskalaan otomatis Pod vertikal hanya menetapkan permintaan resource saat pembuatan Pod dan tidak pernah mengubahnya nanti.
Mode InPlaceOrRecreate
Mode InPlaceOrRecreate bertujuan untuk mengurangi gangguan layanan dengan mencoba memperbarui sumber daya Pod tanpa membuat ulang Pod. Meskipun mode ini tidak menjamin tidak ada gangguan sama sekali, mode ini dapat membantu mengurangi gangguan sekaligus tetap mendapatkan manfaat dari penskalaan otomatis Pod vertikal.
Untuk menggunakan mode InPlaceOrRecreate, atur bidang spec.updatePolicy.updateMode ke "InPlaceOrRecreate" di objek VerticalPodAutoscaler Anda.
Jika penskalaan otomatis Pod vertikal menentukan bahwa pembaruan di tempat tidak memungkinkan, maka akan kembali ke perilaku mode Auto, yang mengeluarkan dan membuat ulang Pod untuk menerapkan perubahan.
Mode InPlaceOrRecreate tersedia pada Kubernetes versi 1.34.0-gke.2011000 dan yang lebih baru.
Untuk detail selengkapnya mengenai perilaku dan batasan yang ada pada mode InPlaceOrRecreate, lihat pengumuman Kubernetes untuk pembaruan di tempat.
Mode Off
Dalam mode Off, penskalaan otomatis Pod vertikal tidak secara otomatis menerapkan perubahan apa pun ke Pod.
Anda masih dapat melihat nilai yang direkomendasikan untuk permintaan dan batasan CPU dan memori berdasarkan penggunaan historis, tetapi rekomendasi ini tidak diterapkan untuk Anda. Anda dapat menerapkan nilai yang direkomendasikan secara manual ke Pod Anda, jika diperlukan.
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
minReplicasdi kolom PodUpdatePolicy. - Jika Anda menggunakan mode update
InPlaceOrRecreatepenskalaan otomatis Pod vertikal dan update di tempat tidak memungkinkan (misalnya, saat meningkatkan skala Pod di luar kapasitas node), penskalaan otomatis Pod vertikal akan mengeluarkan dan membuat ulang Pod untuk menerapkan rekomendasi. Pengusiran dan pembuatan ulang terjadi bahkan untuk Pod yang memilikiresizePolicyyang ditetapkan dalam spesifikasinya untuk menghindari pembuatan ulang. Perilaku ini terjadi untuk permintaan pengubahan ukuran Autopilot, termasuk saat menerapkan batasan rasio CPU:memori dan resource minimum. - Penskalaan otomatis Pod vertikal memerlukan objek workload yang mengelola Pod, seperti Deployment, StatefulSet, ReplicaSet, atau ReplicationController. Anda tidak dapat menggunakan penskalaan otomatis Pod vertikal dengan Pod mandiri karena pengontrol workload diperlukan untuk mengelola proses pembuatan ulang Pod.
Praktik terbaik
- Batasi jumlah objek
VerticalPodAutoscaler. Untuk menghindari gangguan update cluster, sebaiknya pertahankan jumlah objekVerticalPodAutoscalerper cluster di bawah 1.000. - Penskalaan otomatis Pod vertikal berfungsi paling optimal dengan workload homogen yang berjalan lama.
- Berjalan lama: Workload yang berjalan selama minimal 24 jam. Penskalaan otomatis Pod vertikal memerlukan data historis dalam jumlah yang signifikan untuk menghasilkan rekomendasi dengan tingkat keyakinan yang tinggi. Dalam mode
AutoatauRecreate, update biasanya terjadi setelah Pod berusia minimal 24 jam, yang membantu mencegah seringnya Pod dimulai ulang dan churn. - Homogen: Pod yang ditargetkan oleh satu objek
VerticalPodAutoscaler(seperti semua replika dalam Deployment) harus menunjukkan pola konsumsi resource yang serupa. Penskalaan otomatis Pod vertikal membuat rekomendasi dengan menggabungkan data penggunaan di semua Pod yang ditargetkan. Jika replika Anda memiliki penggunaan yang heterogen, misalnya, beberapa Pod tidak ada aktivitas dan yang lain sangat sibuk, penskalaan otomatis Pod vertikal dapat memberikan rekomendasi yang menyediakan Pod tidak ada aktivitas secara berlebihan atau menyediakan Pod yang sibuk secara kurang.
- Berjalan lama: Workload yang berjalan selama minimal 24 jam. Penskalaan otomatis Pod vertikal memerlukan data historis dalam jumlah yang signifikan untuk menghasilkan rekomendasi dengan tingkat keyakinan yang tinggi. Dalam mode
- Gunakan penskalaan otomatis Pod horizontal untuk workload dengan lonjakan permintaan yang tiba-tiba. Autoscaling Vertical Pod dirancang untuk penyesuaian ukuran yang stabil dan bukan solusi untuk lonjakan sumber daya yang tiba-tiba dan berumur pendek. Untuk workload dengan fluktuasi traffic atau permintaan CPU atau memori yang cepat, gunakan horizontal Pod autoscaler sebagai gantinya.
- Manfaatkan perlindungan OOM. Meskipun penskalaan otomatis Pod vertikal bersifat reaktif, penskalaan ini mencakup perlindungan otomatis terhadap peristiwa Kehabisan Memori (OOM). Jika sebuah Pod bernilai
OOMKilled, autoscaler Pod vertikal akan segera mengamati kejadian tersebut dan meningkatkan rekomendasi memori sekitar 20% (atau 100 MB, mana yang lebih besar) untuk meningkatkan stabilitas saat Pod dibuat ulang.
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 memungkinkan adalah sebagai berikut:
|
minReplicas |
Jumlah minimum replika yang harus tetap aktif untuk mencoba pengusiran Pod (dengan mempertimbangkan pemeriksaan lain seperti Anggaran Gangguan Pod).
Hanya nilai positif yang diizinkan. Nilai defaultnya adalah |
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 mengonfigurasi Penskalaan Otomatis Pod Vertikal.
- Pelajari lebih lanjut tentang Penskalaan otomatis Pod horizontal.
- Pelajari Autoscaler cluster lebih lanjut.
- Pelajari cara mengonfigurasi Penskalaan Otomatis Pod Horizontal.
- Pelajari caraOptimalkan penskalaan otomatis Pod berdasarkan metrik. .