Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.Mevcut bir kümede VPA'yı etkinleştiriyorsanız,
kubectl
komutunu kullanarak AKS kümenize bağlanacak şekilde yüklendiğinden ve yapılandırıldığındanaz aks get-credentials
emin olun.az aks get-credentials --name <cluster-name> --resource-group <resource-group-name>
Yeni bir kümeye Dikey Pod Otomatik Ölçeklendiricisi'ni dağıtın
VPA'nın etkinleştirildiği yeni bir AKS kümesi oluşturmak için
az aks create
komutunu ve--enable-vpa
bayrağını kullanarak.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
Var olan bir kümeyi güncellemek için
az aks update
komutunu ve--enable-vpa
bayrağını kullanarak VPA'yi kullanın.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
Mevcut bir kümede VPA'yi devre dışı bırakmak için
az aks update
komutunu ve--disable-vpa
bayrağını kullanı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 kurulumunu 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.
hamster.yaml
adlı bir dosya oluşturun ve kubernetes/autoscaler GitHub deposundaki Vertical Pod Autoscaler örneğinin aşağıdaki bildirimi içine 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
Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtmak içinkubectl apply
komutunu kullanın.kubectl apply -f hamster.yaml
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
kubectl get
komutunu kullanarak ç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
"
kubectl describe
komutunu kullanarak podlardan birinin CPU ve Bellek ayırmalarını görüntüleyin." Çıkışınızda önceki adımda döndürülen pod kimliklerinden biriyle<example-pod>
değerini değiştirdiğinizden 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ış durumdadı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.
Podları
kubectl get
komutunu kullanarak izleyin.kubectl get --watch pods -l app=hamster
Yeni hamster pod başladığında,
kubectl describe
komutunu kullanarak güncelleştirilmiş CPU ve Bellek rezervasyonlarını görüntüleyebilirsiniz. Çıkışınızda önceki adımda döndürülen pod kimliklerinden biriyle<example-pod>
değerini değiştirdiğinizden 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'un kaynakları yetersizdi ve Vertical Pod Autoscaler, 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çeklendirici taleplerini ayarla
`VerticalPodAutoscaler
nesnesi, updateMode
değerine sahip Auto
podlarda kaynak isteklerini otomatik olarak ayarlar.` Gereksinimlerinize ve testlerinize bağlı olarak farklı bir değer ayarlayabilirsiniz. Bu örnekte, her biri içinde 100 miliCPU ve 50 MiB Bellek talep eden bir kapsayıcı çalıştıran iki pod içeren bir dağıtım bildirimini oluşturup test ediyoruz ve updateMode
'yi Recreate
olarak ayarlıyoruz.
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"]
kubectl create
komutunu kullanarak pod oluşturun.kubectl create -f azure-autodeploy.yaml
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
kubectl get
komutunu kullanarak ç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"
targetRef.name
değeri,vpa-auto-deployment
adlı bir dağıtım tarafından denetlenen herhangi bir podunVerticalPodAutoscaler
'ye ait olduğunu belirtir.updateMode
değerininRecreate
Dikey Pod Otomatik Ölçeklendiricisi denetleyicisinin bir podu silebileceği, CPU ve Bellek isteklerini ayarlayıp yeni bir pod oluşturabileceği anlamına gelir.kubectl apply
komutunu kullanarak bildirimi kümeye uygulayın.kubectl create -f azure-vpa-auto.yaml
Birkaç dakika bekledikten sonra
kubectl get
komutunu kullanarak ç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.<pod-name>
ile, önceki çıkışınızdaki podlarınızdan birinin adını değiştirdiğinizden 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 podun silinip yeni bir podla değiştirilmeyeceğine karar vermek için
lowerBound
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 Önerici 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ümlendirebilirsiniz.
Aşağıdaki örnekte ek bir Öneren oluşturacak, var olan bir AKS kümesine 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
Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtmak içinkubectl apply
komutunu kullanın.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"
Eğer
memory
içindecontrolledResources
belirtilmezse, Önerici OOM olaylarına yanıt vermez. Bu örnekte yalnızcacontrolledValues
içinde CPU'yu ayarlıyoruz.controlledValues
ile kapsayıcının kaynak isteklerini güncelleştirip güncelleştirmeyeceğinizi seçmenize olanak tanır; ayrıcaRequestsOnly
seçeneği ile hem kaynak isteklerini hem de sınırları güncelleştirip güncelleştirebilirsiniz veyaRequestsAndLimits
seçeneği ile bunu yapabilirsiniz. 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
örneğinikubectl apply
komutunu kullanarak dağıtın.kubectl apply -f hamster-extra-recommender.yaml
]
[kubectl get
komutunu kullanarak podlarınızı izleyin.kubectl get --watch pods -l app=hamster
Yeni hamster pod başladığında,
kubectl describe
komutunu kullanarak güncellenmiş CPU ve Bellek rezervasyonlarını görüntüleyin.<example-pod>
'yi pod kimliklerinizden biriyle değiştirdiğinizden 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
Vertical Pod Otomatik Ölçeklendiricisi'nin sorunlarını giderme
Dikey Pod Otomatik Ölçeklendiricisi ile ilgili sorunlarla karşılaşırsanız, sorunu belirlemek için sistem bileşenleri ve özel kaynak tanımını (CRD) inceleyerek sorunun kaynağını tespit edebilirsiniz.
Aşağıdaki komutu kullanarak tüm sistem bileşenlerinin çalıştığını doğrulayın:
kubectl get pods|grep vpa
Çıkışınızda üç pod listelenmelidir: recommender, updater ve admission-controller, hepsinin durumu
Running
olmalıdır.Önceki çıktınızdaki podlardan her biri için, sistem bileşenlerinin herhangi bir hata kaydedip kaydetmediğini aşağıdaki komutu kullanarak doğrulayın.
kubectl 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, Dikey Pod Otomatik Ölçekleyici API referansına bakın.
Azure Kubernetes Service