Gunakan Autoscaler Pod Vertikal di Azure Kubernetes Service (AKS)
Artikel ini menunjukkan cara menggunakan Vertical Pod Autoscaler (VPA) pada kluster Azure Kubernetes Service (AKS). VPA secara otomatis menyesuaikan permintaan CPU dan memori untuk pod Anda agar sesuai dengan pola penggunaan beban kerja Anda. Fitur ini membantu mengoptimalkan performa aplikasi Anda dan mengurangi biaya menjalankan beban kerja Anda di AKS.
Untuk informasi selengkapnya, lihat gambaran umum Penskala Otomatis Pod Vertikal.
Sebelum Anda mulai
Jika Anda memiliki kluster AKS yang ada, pastikan kluster tersebut menjalankan Kubernetes versi 1.24 atau yang lebih tinggi.
Anda memerlukan Azure CLI versi 2.52.0 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan
az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.Jika mengaktifkan VPA pada kluster yang ada, pastikan
kubectl
diinstal dan dikonfigurasi untuk terhubung ke kluster AKS Anda menggunakanaz aks get-credentials
perintah .az aks get-credentials --name <cluster-name> --resource-group <resource-group-name>
Menyebarkan Autoscaler Pod Vertikal pada kluster baru
Buat kluster AKS baru dengan VPA diaktifkan menggunakan
az aks create
perintah dengan--enable-vpa
bendera .az aks create --name <cluster-name> --resource-group <resource-group-name> --enable-vpa --generate-ssh-keys
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Perbarui kluster yang ada untuk menggunakan Penskala Otomatis Pod Vertikal
Perbarui kluster yang ada untuk menggunakan VPA menggunakan
az aks update
perintah dengan--enable-vpa
bendera .az aks update --name <cluster-name> --resource-group <resource-group-name> --enable-vpa
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Nonaktifkan Autoscaler Pod Vertikal pada kluster yang ada
Nonaktifkan VPA pada kluster yang ada menggunakan
az aks update
perintah dengan--disable-vpa
bendera .az aks update --name <cluster-name> --resource-group <resource-group-name> --disable-vpa
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Menguji penginstalan Autoscaler Pod Vertikal
Dalam contoh berikut, kami membuat penyebaran dengan dua pod, masing-masing menjalankan satu kontainer yang meminta 100 millicore dan mencoba menggunakan sedikit di atas 500 miliore. Kami juga membuat konfigurasi VPA yang menunjuk pada penyebaran. VPA mengamati perilaku pod, dan setelah sekitar lima menit, memperbarui pod untuk meminta 500 millicore.
Buat file bernama
hamster.yaml
dan salin dalam manifes berikut dari contoh Vertical Pod Autoscaler dari repositori GitHub kubernetes/autoscaler :apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"] --- apiVersion: apps/v1 kind: Deployment metadata: name: hamster spec: selector: matchLabels: app: hamster replicas: 2 template: metadata: labels: app: hamster spec: securityContext: runAsNonRoot: true runAsUser: 65534 containers: - name: hamster 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"
Sebarkan
hamster.yaml
contoh Autoscaler Pod Vertikal menggunakankubectl apply
perintah .kubectl apply -f hamster.yaml
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Lihat pod yang sedang berjalan menggunakan
kubectl get
perintah .kubectl get pods -l app=hamster
Output Anda akan terlihat mirip dengan contoh output berikut:
hamster-78f9dcdd4c-hf7gk 1/1 Running 0 24s hamster-78f9dcdd4c-j9mc7 1/1 Running 0 24s
Lihat reservasi CPU dan Memori pada salah satu pod menggunakan
kubectl describe
perintah . Pastikan Anda mengganti<example-pod>
dengan salah satu ID pod yang dikembalikan dalam output Anda dari langkah sebelumnya.kubectl describe pod hamster-<example-pod>
Output Anda akan terlihat mirip dengan contoh output berikut:
hamster: Container ID: containerd:// Image: k8s.gcr.io/ubuntu-slim:0.1 Image ID: sha256: Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Wed, 28 Sep 2022 15:06:14 -0400 Ready: True Restart Count: 0 Requests: cpu: 100m memory: 50Mi Environment: <none>
Pod memiliki 100 milikpu dan 50 Mibibyte Memori yang dicadangkan dalam contoh ini. Untuk aplikasi sampel ini, pod membutuhkan kurang dari 100 milikpu untuk dijalankan, sehingga tidak ada kapasitas CPU yang tersedia. Pod juga mencadangkan lebih sedikit memori daripada yang diperlukan. Penyebaran Vertical Pod Autoscaler vpa-recommender menganalisis pod yang menghosting aplikasi hamster untuk melihat apakah persyaratan CPU dan Memori sesuai. Jika penyesuaian diperlukan, vpa-updater akan menjalankan kembali pod dengan nilai yang diperbarui.
Pantau pod menggunakan
kubectl get
perintah .kubectl get --watch pods -l app=hamster
Ketika pod hamster baru dimulai, Anda dapat melihat reservasi CPU dan Memori yang diperbarui menggunakan
kubectl describe
perintah . Pastikan Anda mengganti<example-pod>
dengan salah satu ID pod yang dikembalikan dalam output Anda dari langkah sebelumnya.kubectl describe pod hamster-<example-pod>
Output Anda akan terlihat mirip dengan contoh output berikut:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Pada output sebelumnya, Anda dapat melihat bahwa reservasi CPU meningkat menjadi 587 milikpu, yang lebih dari lima kali nilai asli. Memori meningkat menjadi 262.144 Kilobyte, yaitu sekitar 250 Mibibyte, atau lima kali nilai asli. Pod ini kurang bersumber daya, dan Penskala Otomatis Pod Vertikal mengoreksi perkiraan dengan nilai yang jauh lebih tepat.
Lihat rekomendasi yang diperbarui dari VPA menggunakan
kubectl describe
perintah untuk menjelaskan informasi sumber daya hamster-vpa.kubectl describe vpa/hamster-vpa
Output Anda akan terlihat mirip dengan contoh output berikut:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Mengatur permintaan Penskala Otomatis Pod Vertikal
Objek VerticalPodAutoscaler
secara otomatis mengatur permintaan sumber daya pada pod dengan updateMode
dari Auto
. Anda dapat menetapkan nilai yang berbeda tergantung pada kebutuhan dan pengujian Anda. Dalam contoh ini, kami membuat dan menguji manifes penyebaran dengan dua pod, masing-masing menjalankan kontainer yang meminta 100 miliCPU dan 50 MiB Memori, dan mengatur updateMode
ke Recreate
.
Buat file bernama
azure-autodeploy.yaml
dan salin dalam manifes berikut:apiVersion: apps/v1 kind: Deployment metadata: name: vpa-auto-deployment spec: replicas: 2 selector: matchLabels: app: vpa-auto-deployment template: metadata: labels: app: vpa-auto-deployment spec: containers: - name: mycontainer image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
Buat pod menggunakan
kubectl create
perintah .kubectl create -f azure-autodeploy.yaml
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Lihat pod yang sedang berjalan menggunakan
kubectl get
perintah .kubectl get pods
Output Anda akan terlihat mirip dengan contoh output berikut:
NAME READY STATUS RESTARTS AGE vpa-auto-deployment-54465fb978-kchc5 1/1 Running 0 52s vpa-auto-deployment-54465fb978-nhtmj 1/1 Running 0 52s
Buat file bernama
azure-vpa-auto.yaml
dan salin dalam manifes berikut:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: vpa-auto spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: vpa-auto-deployment updatePolicy: updateMode: "Recreate"
Nilai
targetRef.name
menentukan bahwa setiap pod yang dikontrol oleh penyebaran bernamavpa-auto-deployment
milikVerticalPodAutoscaler
. NilaiupdateMode
Recreate
berarti bahwa pengontrol Vertikal Pod Autoscaler dapat menghapus pod, menyesuaikan permintaan CPU dan Memori, lalu membuat pod baru.Terapkan manifes ke kluster menggunakan
kubectl apply
perintah .kubectl create -f azure-vpa-auto.yaml
Tunggu beberapa menit lalu lihat pod yang sedang berjalan menggunakan
kubectl get
perintah .kubectl get pods
Output Anda akan terlihat mirip dengan contoh output berikut:
NAME READY STATUS RESTARTS AGE vpa-auto-deployment-54465fb978-qbhc4 1/1 Running 0 2m49s vpa-auto-deployment-54465fb978-vbj68 1/1 Running 0 109s
Dapatkan informasi terperinci tentang salah satu pod yang sedang berjalan menggunakan
kubectl get
perintah . Pastikan Anda mengganti<pod-name>
dengan nama salah satu pod dari output sebelumnya.kubectl get pod <pod-name> --output yaml
Output Anda akan terlihat mirip dengan contoh output berikut, yang menunjukkan bahwa pengontrol VPA meningkatkan permintaan Memori menjadi 262144k dan permintaan CPU menjadi 25 miliCPU:
apiVersion: v1 kind: Pod metadata: annotations: vpaObservedContainers: mycontainer vpaUpdates: 'Pod resources updated by vpa-auto: container 0: cpu request, memory request' creationTimestamp: "2022-09-29T16:44:37Z" generateName: vpa-auto-deployment-54465fb978- labels: app: vpa-auto-deployment spec: containers: - args: - -c - while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done command: - /bin/sh image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine imagePullPolicy: IfNotPresent name: mycontainer resources: requests: cpu: 25m memory: 262144k
Dapatkan informasi terperinci tentang Autoscaler Pod Vertikal dan rekomendasinya untuk CPU dan Memori menggunakan
kubectl get
perintah .kubectl get vpa vpa-auto --output yaml
Output Anda akan terlihat mirip dengan contoh output berikut:
recommendation: containerRecommendations: - containerName: mycontainer lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 230m memory: 262144k
Dalam contoh ini, hasil dalam
target
atribut menentukan bahwa tidak perlu mengubah CPU atau target Memori agar kontainer berjalan optimal. Namun, hasilnya dapat bervariasi tergantung pada aplikasi dan pemanfaatan sumber dayanya.Autoscaler Pod Vertikal menggunakan
lowerBound
atribut danupperBound
untuk memutuskan apakah akan menghapus pod dan menggantinya dengan pod baru. Jika pod memiliki permintaan yang kurang dari batas bawah atau lebih besar dari batas atas, Penskala Otomatis Pod Vertikal menghapus pod dan menggantinya dengan pod yang memenuhi atribut target.
Pemberi Rekomendasi Tambahan untuk Autoscaler Pod Vertikal
Pemberi Rekomendasi memberikan rekomendasi untuk penggunaan sumber daya berdasarkan konsumsi sumber daya real time. AKS menyebarkan Pemberi Rekomendasi saat kluster mengaktifkan VPA. Anda dapat menyebarkan Pemberi Rekomendasi yang dikustomisasi atau Pemberi Rekomendasi tambahan dengan gambar yang sama dengan yang default. Manfaat memiliki Pemberi Rekomendasi yang disesuaikan adalah Anda dapat menyesuaikan logika rekomendasi Anda. Dengan Pemberi Rekomendasi tambahan, Anda dapat mempartisi VPU untuk menggunakan Pemberi Rekomendasi yang berbeda.
Dalam contoh berikut, kami membuat Pemberi Rekomendasi tambahan, berlaku untuk clust AKS yang ada, dan mengonfigurasi objek VPA untuk menggunakan Pemberi Rekomendasi tambahan.
Buat file bernama
extra_recommender.yaml
dan salin dalam manifes berikut:apiVersion: apps/v1 kind: Deployment metadata: name: extra-recommender namespace: kube-system spec: replicas: 1 selector: matchLabels: app: extra-recommender template: metadata: labels: app: extra-recommender spec: serviceAccountName: vpa-recommender securityContext: runAsNonRoot: true runAsUser: 65534 containers: - name: recommender image: registry.k8s.io/autoscaling/vpa-recommender:0.13.0 imagePullPolicy: Always args: - --recommender-name=extra-recommender resources: limits: cpu: 200m memory: 1000Mi requests: cpu: 50m memory: 500Mi ports: - name: prometheus containerPort: 8942
Sebarkan
extra-recomender.yaml
contoh Autoscaler Pod Vertikal menggunakankubectl apply
perintah .kubectl apply -f extra-recommender.yaml
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Buat file bernama
hamster-extra-recommender.yaml
dan salin dalam manifes berikut:apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: recommenders: - name: 'extra-recommender' targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"] --- apiVersion: apps/v1 kind: Deployment metadata: name: hamster spec: selector: matchLabels: app: hamster replicas: 2 template: metadata: labels: app: hamster spec: securityContext: runAsNonRoot: true runAsUser: 65534 # nobody containers: - name: hamster image: k8s.gcr.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"
Jika
memory
tidak ditentukan dalamcontrolledResources
, Pemberi Rekomendasi tidak merespons peristiwa OOM. Dalam contoh ini, kami hanya mengatur CPU dicontrolledValues
.controlledValues
memungkinkan Anda untuk memilih apakah akan memperbarui permintaan sumber daya kontainer menggunakanRequestsOnly
opsi , atau dengan permintaan sumber daya dan batas menggunakanRequestsAndLimits
opsi . Nilai defaultnya adalahRequestsAndLimits
. Jika Anda menggunakan opsi ,RequestsAndLimits
permintaan dihitung berdasarkan penggunaan aktual, dan batasan dihitung berdasarkan rasio permintaan dan batas pod saat ini.Misalnya, jika Anda memulai dengan pod yang meminta 2 CPU dan membatasi 4 CPU, VPA selalu menetapkan batas menjadi dua kali lipat dari permintaan. Prinsip yang sama berlaku untuk Memori. Saat Anda menggunakan mode ini
RequestsAndLimits
, mode ini dapat berfungsi sebagai cetak biru untuk permintaan dan batas sumber daya aplikasi awal Anda.Anda dapat menyederhanakan objek VPA menggunakan
Auto
mode dan rekomendasi komputasi untuk CPU dan Memori.Sebarkan
hamster-extra-recomender.yaml
contoh menggunakankubectl apply
perintah .kubectl apply -f hamster-extra-recommender.yaml
Pantau pod Anda menggunakan
[kubectl get
perintah ]kubectl-get .kubectl get --watch pods -l app=hamster
Saat pod hamster baru dimulai, lihat reservasi CPU dan Memori yang diperbarui menggunakan
kubectl describe
perintah . Pastikan Anda mengganti<example-pod>
dengan salah satu ID pod Anda.kubectl describe pod hamster-<example-pod>
Output Anda akan terlihat mirip dengan contoh output berikut:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Lihat rekomendasi yang diperbarui dari VPA menggunakan
kubectl describe
perintah .kubectl describe vpa/hamster-vpa
Output Anda akan terlihat mirip dengan contoh output berikut:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none> Spec: recommenders: Name: customized-recommender
Memecahkan masalah Autoscaler Pod Vertikal
Jika Anda mengalami masalah dengan Penskala Otomatis Pod Vertikal, Anda dapat memecahkan masalah komponen sistem dan definisi sumber daya kustom untuk mengidentifikasi masalah.
Verifikasi bahwa semua komponen sistem berjalan menggunakan perintah berikut:
kubectl --namespace=kube-system get pods|grep vpa
Output Anda harus mencantumkan tiga pod: pemberi rekomendasi, updater, dan admission-controller, semuanya dengan status
Running
.Untuk setiap pod yang dikembalikan dalam output Anda sebelumnya, verifikasi bahwa komponen sistem mencatat kesalahan apa pun menggunakan perintah berikut:
kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
Verifikasi bahwa definisi sumber daya kustom dibuat menggunakan perintah berikut:
kubectl get customresourcedefinition | grep verticalpodautoscalers
Langkah berikutnya
Untuk mempelajari selengkapnya tentang objek VPA, lihat referensi VERTICAL Pod Autoscaler API.
Azure Kubernetes Service