Azure Kubernetes Service'te (AKS) Dikey Pod Otomatik Ölçeklendiricisini kullanma
Bu makalede, Azure Kubernetes Service (AKS) kümenizde Dikey Pod Otomatik Ölçeklendiricisi'ni (VPA) nasıl kullanacağınız gösterilmektedir. VPA, podlarınızın CPU ve bellek isteklerini iş yüklerinizin kullanım düzenleriyle eşleşecek şekilde otomatik olarak ayarlar. Bu özellik, uygulamalarınızın performansını iyileştirmeye ve iş yüklerinizi AKS'de çalıştırma maliyetini azaltmaya yardımcı olur.
Daha fazla bilgi için bkz. Dikey Pod Otomatik Ölçeklendiricisi'ne genel bakış.
Başlamadan önce
Mevcut bir AKS kümeniz varsa Kubernetes sürüm 1.24 veya üzerini çalıştırdığından emin olun.
Azure CLI sürüm 2.52.0 veya üzerinin yüklü ve yapılandırılmış olması gerekir. Sürümü bulmak için
az --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.VPA mevcut bir kümede etkinleştiriliyorsa komutunu kullanarak AKS kümenize bağlanacak şekilde yüklendiğinden ve yapılandırıldığından
az aks get-credentials
emin olunkubectl
.az aks get-credentials --name <cluster-name> --resource-group <resource-group-name>
Dikey Pod Otomatik Ölçeklendiricisini yeni bir kümeye dağıtma
bayrağıyla komutunu
--enable-vpa
kullanarakaz aks create
VPA'nın etkinleştirildiği yeni bir AKS kümesi oluşturun.az aks create --name <cluster-name> --resource-group <resource-group-name> --enable-vpa --generate-ssh-keys
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Var olan bir kümeyi Dikey Pod Otomatik Ölçeklendiricisi'ni kullanacak şekilde güncelleştirme
bayrağıyla komutunu kullanarak VPA'yi kullanmak için mevcut bir kümeyi
az aks update
güncelleştirin--enable-vpa
.az aks update --name <cluster-name> --resource-group <resource-group-name> --enable-vpa
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Var olan bir kümede Dikey Pod Otomatik Ölçeklendiricisini devre dışı bırakma
bayrağıyla komutunu kullanarak mevcut bir kümede VPA'yi
az aks update
--disable-vpa
devre dışı bırakın.az aks update --name <cluster-name> --resource-group <resource-group-name> --disable-vpa
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Dikey Pod Otomatik Ölçeklendiricisi yüklemesini test edin
Aşağıdaki örnekte, her birinin 100 milicore isteyen ve 500 milicore'un biraz üzerinde işlem yapmaya çalışan tek bir kapsayıcı çalıştıran iki pod ile bir dağıtım oluştururuz. Ayrıca dağıtıma işaret eden bir VPA yapılandırması da oluştururuz. VPA podların davranışını gözlemler ve yaklaşık beş dakika sonra podları 500 milicore istemek üzere güncelleştirir.
adlı bir dosya
hamster.yaml
oluşturun ve kubernetes/autoscaler GitHub deposundaki Vertical Pod Autoscaler örneğinin aşağıdaki bildiriminde kopyalayın: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"
hamster.yaml
Komutunu kullanarak Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtınkubectl apply
.kubectl apply -f hamster.yaml
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
komutunu kullanarak
kubectl get
çalışan podları görüntüleyin.kubectl get pods -l app=hamster
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
hamster-78f9dcdd4c-hf7gk 1/1 Running 0 24s hamster-78f9dcdd4c-j9mc7 1/1 Running 0 24s
komutunu kullanarak podlardan birinde CPU ve Bellek ayırmalarını
kubectl describe
görüntüleyin. değerini önceki adımda çıkışınızda döndürülen pod kimliklerinden biriyle değiştirdiğinizden<example-pod>
emin olun.kubectl describe pod hamster-<example-pod>
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
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>
Bu örnekte pod 100 milicpu ve 50 Mibibayt Bellek ayrılmıştır. Bu örnek uygulama için podun çalışması için 100 milicpu'dan az olması gerekir, bu nedenle kullanılabilir CPU kapasitesi yoktur. Podlar ayrıca gerekenden daha az bellek ayırır. Dikey Pod Otomatik Ölçeklendirici vpa-recommender dağıtımı, CPU ve Bellek gereksinimlerinin uygun olup olmadığını görmek için hamster uygulamasını barındıran podları analiz eder. Ayarlamalar gerekiyorsa vpa-updater podları güncelleştirilmiş değerlerle yeniden başlatır.
komutunu kullanarak
kubectl get
podları izleyin.kubectl get --watch pods -l app=hamster
Yeni hamster pod başladığında, komutunu kullanarak
kubectl describe
güncelleştirilmiş CPU ve Bellek rezervasyonlarını görüntüleyebilirsiniz. değerini önceki adımda çıkışınızda döndürülen pod kimliklerinden biriyle değiştirdiğinizden<example-pod>
emin olun.kubectl describe pod hamster-<example-pod>
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Önceki çıkışta CPU ayırmasının 587 milicpu'ya yükseldiğini ve bunun özgün değerin beş katının üzerinde olduğunu görebilirsiniz. Bellek değeri 262.144 Kilobayt'a yükseltildi. Bu değer yaklaşık 250 Mibibayt veya özgün değerin beş katıdır. Bu pod kaynağı yetersizdi ve Dikey Pod Otomatik Ölçeklendiricisi tahmini çok daha uygun bir değerle düzeltti.
komutunu kullanarak
kubectl describe
VPA'nın güncelleştirilmiş önerilerini görüntüleyin ve hamster-vpa kaynak bilgilerini açıklayın.kubectl describe vpa/hamster-vpa
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Dikey Pod Otomatik Ölçeklendiricisi isteklerini ayarlama
nesnesi, VerticalPodAutoscaler
ile updateMode
Auto
podlarda kaynak isteklerini otomatik olarak ayarlar. Gereksinimlerinize ve testlerinize bağlı olarak farklı bir değer ayarlayabilirsiniz. Bu örnekte, her biri 100 miliCPU ve 50 MiB Bellek isteyen ve olarak ayarlayan updateMode
Recreate
bir kapsayıcı çalıştıran iki pod ile bir dağıtım bildirimi oluşturup test ediyoruz.
Adlı
azure-autodeploy.yaml
bir dosya oluşturun ve aşağıdaki bildirimde kopyalayın: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"]
komutunu kullanarak pod oluşturun
kubectl create
.kubectl create -f azure-autodeploy.yaml
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
komutunu kullanarak
kubectl get
çalışan podları görüntüleyin.kubectl get pods
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
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
Adlı
azure-vpa-auto.yaml
bir dosya oluşturun ve aşağıdaki bildirimde kopyalayın: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"
değeri adlı
targetRef.name
vpa-auto-deployment
bir dağıtım tarafından denetlenen podların öğesineVerticalPodAutoscaler
ait olduğunu belirtir. değeriRecreate
,updateMode
Dikey Pod Otomatik Ölçeklendiricisi denetleyicisinin bir podu sebileceği, CPU ve Bellek isteklerini ayarlayıp yeni bir pod oluşturabileceği anlamına gelir.komutunu kullanarak bildirimi kümeye
kubectl apply
uygulayın.kubectl create -f azure-vpa-auto.yaml
Birkaç dakika bekleyin ve komutunu kullanarak
kubectl get
çalışan podları görüntüleyin.kubectl get pods
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
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
komutunu kullanarak
kubectl get
çalışan podlarınızdan biri hakkında ayrıntılı bilgi edinin. değerini önceki çıkışınızdaki podlarınızdan birinin adıyla değiştirdiğinizden<pod-name>
emin olun.kubectl get pod <pod-name> --output yaml
Çıkışınız, VPA denetleyicisinin Bellek isteğini 262144k ve CPU isteğini 25 miliCPU'ya artırdığını gösteren aşağıdaki örnek çıkışa benzer olmalıdır:
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
Komutunu kullanarak
kubectl get
Dikey Pod Otomatik Ölçeklendiricisi ve CPU ve Bellek önerileri hakkında ayrıntılı bilgi edinin.kubectl get vpa vpa-auto --output yaml
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
recommendation: containerRecommendations: - containerName: mycontainer lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 230m memory: 262144k
Bu örnekte özniteliğindeki sonuçlar, kapsayıcının
target
en iyi şekilde çalışması için CPU veya Bellek hedefini değiştirmesinin gerekmediğini belirtir. Ancak sonuçlar uygulamaya ve kaynak kullanımına bağlı olarak farklılık gösterebilir.Dikey Pod Otomatik Ölçeklendiricisi, bir pod silinip
lowerBound
yeni bir podla değiştirilmeyeceğine karar vermek için veupperBound
özniteliklerini kullanır. Bir pod alt sınırdan küçük veya üst sınırdan büyük isteklere sahipse, Dikey Pod Otomatik Ölçeklendiricisi podu siler ve hedef özniteliği karşılayan bir podla değiştirir.
Dikey Pod Otomatik Ölçeklendiricisi için Ek Öneri
Öneren, gerçek zamanlı kaynak tüketimine göre kaynak kullanımına yönelik öneriler sağlar. Aks, bir küme VPA'yi etkinleştirdiğinde Bir Öneren dağıtır. Özelleştirilmiş bir Öneren veya varsayılan görüntüyle aynı görüntüye sahip ek bir Öneren dağıtabilirsiniz. Özelleştirilmiş bir Öneren'e sahip olmanın avantajı, öneri mantığınızı özelleştirebilmenizdir. Ek bir Öneren ile, FARKLı Önerenleri kullanmak için VPA'ları bölümleyebilirsiniz.
Aşağıdaki örnekte ek bir Recommender oluşturacak, var olan bir AKS clust'a uygulayacak ve VPA nesnesini ek Öneren'i kullanacak şekilde yapılandıracağız.
Adlı
extra_recommender.yaml
bir dosya oluşturun ve aşağıdaki bildirimde kopyalayın: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
extra-recomender.yaml
Komutunu kullanarak Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtınkubectl apply
.kubectl apply -f extra-recommender.yaml
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Adlı
hamster-extra-recommender.yaml
bir dosya oluşturun ve aşağıdaki bildirimde kopyalayın: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"
içinde
controlledResources
belirtilmezsememory
, Öneren OOM olaylarına yanıt vermez. Bu örnekte yalnızca içindecontrolledValues
CPU'ları ayarlayacağız.controlledValues
seçeneği kullanılarak kapsayıcının kaynak isteklerinin güncelleştirilip güncelleştirilmeyeceğini veya seçeneği kullanarakRequestsOnly
hem kaynak isteklerine hem de sınırlara göre güncelleştirilip güncelleştirilmeyeceğini seçmenizeRequestsAndLimits
olanak tanır. Varsayılan değer şudur:RequestsAndLimits
. seçeneğini kullanırsanızRequestsAndLimits
istekler gerçek kullanıma göre hesaplanır ve sınırlar geçerli pod'un istek ve sınır oranına göre hesaplanır.Örneğin, 2 CPU isteyen ve 4 CPU ile sınırlayan bir podla başlarsanız, VPA her zaman sınırı isteklerin iki katı olacak şekilde ayarlar. Aynı ilke Bellek için de geçerlidir. Modu kullandığınızda
RequestsAndLimits
, ilk uygulama kaynak istekleriniz ve sınırlarınız için bir şema görevi görebilir.HEM CPU hem de Bellek için mod ve bilgi işlem önerilerini kullanarak
Auto
VPA nesnesini basitleştirebilirsiniz.hamster-extra-recomender.yaml
komutunu kullanarak örneği dağıtınkubectl apply
.kubectl apply -f hamster-extra-recommender.yaml
]kubectl-get komutunu kullanarak
[kubectl get
podlarınızı izleyin.kubectl get --watch pods -l app=hamster
Yeni hamster pod başladığında komutunu kullanarak
kubectl describe
güncelleştirilmiş CPU ve Bellek rezervasyonlarını görüntüleyin. yerine<example-pod>
pod kimliklerinizden birini kullandığınızdan emin olun.kubectl describe pod hamster-<example-pod>
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
komutunu kullanarak
kubectl describe
VPA'dan güncelleştirilmiş önerileri görüntüleyin.kubectl describe vpa/hamster-vpa
Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:
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
Dikey Pod Otomatik Ölçeklendiricisi sorunlarını giderme
Dikey Pod Otomatik Ölçeklendiricisi ile ilgili sorunlarla karşılaşırsanız, sorunu belirlemek için sistem bileşenlerini ve özel kaynak tanımını giderebilirsiniz.
Aşağıdaki komutu kullanarak tüm sistem bileşenlerinin çalıştığını doğrulayın:
kubectl --namespace=kube-system get pods|grep vpa
Çıkışınızda üç pod listelenmelidir: recommender, updater ve admission-controller, tümü durumu .
Running
Önceki çıkışınızda döndürülen podların her biri için sistem bileşenlerinin aşağıdaki komutu kullanarak hataları günlüğe kaydeddiğini doğrulayın:
kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
Aşağıdaki komutu kullanarak özel kaynak tanımının oluşturulduğunu doğrulayın:
kubectl get customresourcedefinition | grep verticalpodautoscalers
Sonraki adımlar
VPA nesnesi hakkında daha fazla bilgi edinmek için bkz . Dikey Pod Otomatik ÖlçeklendiriciSI API başvurusu.
Azure Kubernetes Service