Halaman ini menjelaskan cara menganalisis dan menyesuaikan permintaan CPU dan permintaan memori container di Google Kubernetes Engine (GKE) menggunakan penskalaan otomatis Pod vertikal.
Anda dapat menskalakan resource container secara manual melalui Google Cloud Console, menganalisis resource menggunakan objek VerticalPodAutoscaler
, atau mengonfigurasi penskalaan otomatis menggunakan penskalaan Pod vertikal.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
initialize
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Menganalisis permintaan resource
Autoscaler Pod Vertikal otomatis menganalisis container dan menyediakan permintaan resource yang disarankan. Anda dapat melihat permintaan resource ini menggunakan Google Cloud Console, Cloud Monitoring, atau Google Cloud CLI.
Konsol
Untuk melihat permintaan resource yang disarankan di konsol Google Cloud, Anda harus memiliki beban kerja yang di-deploy setidaknya selama 24 jam. Beberapa saran mungkin tidak tersedia atau relevan untuk workload tertentu, seperti yang dibuat dalam 24 jam terakhir, Pod mandiri, dan aplikasi yang ditulis di Java.
Buka halaman Workload di Konsol Google Cloud.
Dalam daftar workload, klik nama workload yang ingin diskalakan.
Klik list Actions > Scale > Edit resource requests.
Bagian Analisis data penggunaan resource menampilkan data penggunaan historis yang dianalisis oleh pengontrol Autoscaler Pod Vertikal untuk membuat permintaan resource yang disarankan di bagian Sesuaikan permintaan dan batas resource.
Cloud Monitoring
Untuk melihat permintaan resource yang disarankan di Cloud Monitoring, Anda harus memiliki beban kerja yang sudah di-deploy.
Buka halaman Metrics Explorer di Konsol Google Cloud.
Klik Configuration.
Luaskan menu Select a Metric.
Di menu Resource, pilih Kubernetes Scale.
Di menu Metric category, pilih Autoscaler.
Di menu Metric, pilih Recommended per replication request bytes dan Recommended per replication request core.
Klik Apply.
gcloud CLI
Untuk melihat permintaan resource yang disarankan, Anda harus membuat objek VerticalPodAutoscaler
dan Deployment.
Untuk cluster Standar, aktifkan penskalaan otomatis Pod vertikal untuk cluster Anda. Untuk cluster Autopilot, penskalaan otomatis Pod vertikal diaktifkan secara default.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Ganti
CLUSTER_NAME
dengan nama cluster Anda.Simpan manifes berikut sebagai
my-rec-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx
Manifes ini menjelaskan
Deployment
yang tidak memiliki permintaan CPU atau memori. Nilaicontainers.name
darimy-rec-deployment
menentukan bahwa semua Pod di Deployment adalah milikVerticalPodAutoscaler
.Terapkan manifes ke cluster:
kubectl create -f my-rec-deployment.yaml
Simpan manifes berikut sebagai
my-rec-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-rec-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-rec-deployment updatePolicy: updateMode: "Off"
Manifes ini menjelaskan
VerticalPodAutoscaler
. NilaiupdateMode
dariOff
berarti bahwa saat Pod dibuat, pengontrol Vertical Pod Autoscaler menganalisis kebutuhan CPU dan memori pada container dan mencatat rekomendasi tersebut dalam kolomstatus
sumber daya. Pengontrol Autoscaler Pod Vertikal tidak otomatis memperbarui permintaan resource untuk menjalankan container.Terapkan manifes ke cluster:
kubectl create -f my-rec-vpa.yaml
Setelah beberapa saat, lihat
VerticalPodAutoscaler
:kubectl get vpa my-rec-vpa --output yaml
Outputnya mirip dengan hal berikut ini:
... recommendation: containerRecommendations: - containerName: my-rec-container lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k upperBound: cpu: 7931m memory: 8291500k ...
Output ini menampilkan rekomendasi untuk permintaan CPU dan memori.
Menetapkan permintaan resource Pod secara manual
Anda dapat menetapkan permintaan resource Pod secara manual menggunakan Google Cloud CLI atau Google Cloud Console.
Konsol
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar workload, klik nama workload yang ingin diskalakan.
Klik list Actions > Scale > Edit resource requests.
- Bagian Sesuaikan permintaan dan batas resource menampilkan permintaan CPU dan memori saat ini untuk setiap container serta permintaan memori dan CPU yang disarankan.
Klik Apply Latest Suggestions untuk melihat permintaan yang disarankan untuk setiap container.
Klik Save Changes.
Klik Confirm.
gcloud
Guna menetapkan permintaan resource untuk Pod, tetapkan nilai requests.cpu dan memory.cpu dalam manifes Deployment Anda.Dalam contoh ini, Anda harus memodifikasi secara manual Deployment yang dibuat dalamMenganalisis permintaan resource dengan permintaan resource yang disarankan.
Simpan contoh manifes berikut sebagai
my-adjusted-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx resources: requests: cpu: 25m memory: 256Mi
Manifes ini menjelaskan Deployment yang memiliki dua Pod. Setiap Pod memiliki satu container yang meminta memori 25 miliCPU dan 256 MiB.
Terapkan manifes ke cluster:
kubectl apply -f my-adjusted-deployment.yaml
Anda juga dapat menerapkan perubahan secara manual dengan melakukan langkah-langkah berikut:
Buka halaman Workload di Konsol Google Cloud.
Dalam daftar workload, klik nama workload yang ingin diskalakan.
Klik list Actions > Scale > Edit resource requests.
Konfigurasikan permintaan container Anda.
Klik Get Equivalent YAML.
Klik Download Workload atau salin dan tempel manifes ke dalam file bernama
resource-adjusted.yaml
.Terapkan manifes ke cluster Anda:
kubectl create -f resource-adjusted.yaml
Menetapkan permintaan resource Pod secara otomatis
Penskalaan otomatis Pod vertikal menggunakan objek VerticalPodAutoscaler
untuk menetapkan permintaan resource secara otomatis pada Pod saat updateMode
adalah Auto
. Anda dapat mengonfigurasi VerticalPodAutoscaler
menggunakan gcloud CLI atau Konsol Google Cloud.
Konsol
Untuk menyetel permintaan resource secara otomatis, Anda harus memiliki cluster dengan fitur penskalaan otomatis Pod vertikal yang diaktifkan. Cluster Autopilot mengaktifkan fitur penskalaan otomatis Pod vertikal secara default.
Aktifkan Penskalaan Otomatis Pod Vertikal
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Di bagian Automation, klik edit Edit untuk opsi Vertical Pod Autoscaling.
Pilih kotak centang Enable Vertical Pod Autoscaling.
Klik Save changes.
Mengonfigurasi Penskalaan Otomatis Pod Vertikal
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar beban kerja, klik nama Deployment yang ingin Anda konfigurasi penskalaan otomatis Pod vertikalnya.
Klik list Actions > Autoscale > Vertical pod autoscaling.
Pilih mode penskalaan otomatis:
- Mode otomatis: Penskalaan otomatis Pod vertikal mengupdate permintaan memori dan CPU selama masa pakai Pod.
- Mode awal: Penskalaan otomatis Pod vertikal menetapkan permintaan resource hanya saat pembuatan Pod dan tidak pernah mengubahnya nanti.
(Opsional) Tetapkan kebijakan container. Opsi ini memungkinkan Anda memastikan bahwa rekomendasi tidak pernah ditetapkan di atas atau di bawah permintaan resource yang ditentukan.
- Klik expand_more Add Policy.
- Pilih Auto untuk Edit container mode.
- Di bagian Controlled resources, pilih resource yang ingin Anda lakukan penskalaan otomatis container secara otomatis.
- Klik Add rule untuk menetapkan satu atau beberapa rentang minimum atau maksimum untuk permintaan resource container:
- Min. allowed Memory: jumlah minimum memori yang harus selalu dimiliki container, dalam MiB.
- Min. allowed CPU: jumlah CPU minimum yang harus selalu dimiliki container, dalam mCPU.
- Max allowed Memory: jumlah maksimum memori yang harus selalu dimiliki container, dalam MiB.
- Max allowed CPU: jumlah CPU maksimum yang harus selalu dimiliki container, dalam mCPU.
Klik Done.
Klik Simpan.
gcloud
Untuk menyetel permintaan resource secara otomatis, Anda harus menggunakan cluster yang mengaktifkan fitur penskalaan otomatis Pod vertikal. Fitur ini diaktifkan secara default di cluster Autopilot.
Untuk cluster Standar, aktifkan penskalaan otomatis Pod vertikal untuk cluster Anda:
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Ganti
CLUSTER_NAME
dengan nama cluster Anda.Simpan manifes berikut sebagai
my-auto-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-auto-deployment spec: replicas: 2 selector: matchLabels: app: my-auto-deployment template: metadata: labels: app: my-auto-deployment spec: containers: - name: my-container image: registry.k8s.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
Manifes ini menjelaskan Deployment yang memiliki dua Pod. Setiap Pod memiliki satu container yang meminta 100 miliCPU dan memori 50 MiB.
Terapkan manifes ke cluster:
kubectl create -f my-auto-deployment.yaml
Daftar Pod yang berjalan:
kubectl get pods
Output menampilkan nama-nama Pod di
my-deployment
:NAME READY STATUS RESTARTS AGE my-auto-deployment-cbcdd49fb-d6bf9 1/1 Running 0 8s my-auto-deployment-cbcdd49fb-th288 1/1 Running 0 8s
Simpan manifes berikut sebagai
my-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-auto-deployment updatePolicy: updateMode: "Auto"
Manifes ini menjelaskan
VerticalPodAutoscaler
dengan properti berikut:targetRef.name
: menentukan bahwa setiap Pod yang dikontrol oleh Deployment bernamamy-deployment
adalah milikVerticalPodAutoscaler
ini.updateMode: Auto
: menentukan bahwa pengontrol Autoscaler Pod Vertikal dapat menghapus Pod, menyesuaikan permintaan CPU dan memori, lalu memulai Pod baru.
Anda juga dapat mengonfigurasi penskalaan otomatis Pod vertikal untuk menetapkan permintaan resource hanya pada waktu pembuatan Pod, menggunakan
updateMode: "Initial"
.Terapkan manifes ke cluster:
kubectl create -f my-vpa.yaml
Tunggu beberapa menit, lalu lihat Pod yang berjalan lagi:
kubectl get pods
Output menunjukkan bahwa nama Pod telah berubah:
NAME READY STATUS RESTARTS AGE my-auto-deployment-89dc45f48-5bzqp 1/1 Running 0 8s my-auto-deployment-89dc45f48-scm66 1/1 Running 0 8s
Jika nama Pod belum berubah, tunggu sedikit lebih lama, lalu lihat Pod yang berjalan lagi.
Melihat informasi tentang Autoscaler Pod Vertikal
Untuk melihat detail tentang Vertical Pod Autoscaler, lakukan hal berikut:
Dapatkan informasi mendetail tentang salah satu Pod yang berjalan:
kubectl get pod POD_NAME --output yaml
Ganti
POD_NAME
dengan nama salah satu Pod yang diambil di langkah sebelumnya.Outputnya mirip dengan hal berikut ini:
apiVersion: v1 kind: Pod metadata: annotations: vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request' ... spec: containers: ... resources: requests: cpu: 510m memory: 262144k ...
Output ini menunjukkan bahwa pengontrol Vertical Pod Autoscaler memiliki permintaan memori sebesar 262144k dan permintaan CPU sebesar 510 miliCPU.
Dapatkan informasi mendetail tentang
VerticalPodAutoscaler
:kubectl get vpa my-vpa --output yaml
Outputnya mirip dengan hal berikut ini:
... recommendation: containerRecommendations: - containerName: my-container lowerBound: cpu: 536m memory: 262144k target: cpu: 587m memory: 262144k upperBound: cpu: 27854m memory: "545693548"
Output ini menampilkan rekomendasi untuk permintaan CPU dan memori serta mencakup properti berikut:
target
: menentukan bahwa container harus berjalan secara optimal, container harus meminta 587 miliCPU dan 262144 kilobyte memori.lowerBound
danupperBound
: penskalaan otomatis Pod vertikal menggunakan properti ini untuk memutuskan apakah akan menghapus Pod dan menggantinya dengan Pod baru. Jika Pod memiliki permintaan yang lebih kecil dari batas bawah atau lebih besar dari batas atas, Autoscaler Pod Vertikal akan menghapus Pod dan menggantinya dengan Pod yang memenuhi atribut target.
Memilih tidak ikut container tertentu
Anda dapat mengecualikan container tertentu dari penskalaan otomatis Pod vertikal menggunakan gcloud CLI atau Google Cloud Console.
Konsol
Untuk mengecualikan container tertentu dari penskalaan otomatis Pod vertikal, Anda harus memiliki cluster dengan fitur penskalaan otomatis Pod vertikal yang diaktifkan. Fitur penskalaan otomatis Pod vertikal diaktifkan secara default di cluster Autopilot.
Aktifkan Penskalaan Otomatis Pod Vertikal
Buka halaman Google Kubernetes Engine di Konsol Google Cloud.
Di daftar cluster, klik nama cluster yang ingin diubah.
Di bagian Automation, klik edit Edit untuk opsi Vertical Pod Autoscaling.
Pilih kotak centang Enable Vertical Pod Autoscaling.
Klik Save changes.
Mengonfigurasi Penskalaan Otomatis Pod Vertikal
Buka halaman Workloads di Konsol Google Cloud.
Dalam daftar beban kerja, klik nama Deployment yang ingin Anda konfigurasi penskalaan otomatis Pod vertikalnya.
Klik list Actions > Autoscale > Vertical pod autoscaling.
Pilih mode penskalaan otomatis:
- Mode otomatis: Penskalaan otomatis Pod vertikal mengupdate permintaan memori dan CPU selama masa pakai Pod.
- Mode awal: Penskalaan otomatis Pod vertikal menetapkan permintaan resource hanya saat pembuatan Pod dan tidak pernah mengubahnya nanti.
Klik expand_more Add Policy.
Pilih container yang ingin Anda kecualikan.
Untuk Edit container mode, pilih Off.
Klik Done.
Klik Simpan.
gcloud
Untuk tidak menyertakan container tertentu dari penskalaan otomatis Pod vertikal, lakukan langkah-langkah berikut:
Simpan manifes berikut sebagai
my-opt-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-opt-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-opt-deployment updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: my-opt-sidecar mode: "Off"
Manifes ini menjelaskan
VerticalPodAutoscaler
. Nilaimode: "Off"
menonaktifkan rekomendasi untuk containermy-opt-sidecar
.Terapkan manifes ke cluster:
kubectl apply -f my-opt-vpa.yaml
Simpan manifes berikut sebagai
my-opt-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-opt-deployment spec: replicas: 1 selector: matchLabels: app: my-opt-deployment template: metadata: labels: app: my-opt-deployment spec: containers: - name: my-opt-container image: nginx - name: my-opt-sidecar image: busybox command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
Terapkan manifes ke cluster:
kubectl apply -f my-opt-deployment.yaml
Setelah beberapa waktu, lihat Vertical Pod Autoscaler:
kubectl get vpa my-opt-vpa --output yaml
Output menunjukkan rekomendasi untuk permintaan CPU dan memori:
... recommendation: containerRecommendations: - containerName: my-opt-container ...
Dalam output ini, hanya ada rekomendasi untuk satu container. Tidak ada rekomendasi untuk
my-opt-sidecar
.Autoscaler Pod Vertikal tidak pernah memperbarui resource pada container yang tidak diikutsertakan. Jika Anda menunggu beberapa menit, Pod akan dibuat ulang, tetapi hanya satu container yang memiliki permintaan resource yang diperbarui.
Langkah selanjutnya
- Pelajari lebih lanjut tentang Penskalaan otomatis Pod Vertikal
- Pelajari Praktik terbaik untuk menjalankan aplikasi Kubernetes yang hemat biaya di GKE.
- Pelajari cara Menetapkan Resource CPU ke container dan Pod.
- Pelajari cara Menetapkan resource memori ke container dan Pod.