Aracılığıyla paylaş


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 kullanarak az 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.

  1. 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"
    
  2. 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.

  3. 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
    
  4. 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.

  5. komutunu kullanarak kubectl get podları izleyin.

    kubectl get --watch pods -l app=hamster
    
  6. 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.

  7. 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 Autopodlarda 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 Recreatebir kapsayıcı çalıştıran iki pod ile bir dağıtım bildirimi oluşturup test ediyoruz.

  1. 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"]
    
  2. 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.

  3. 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
    
  4. 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 öğesine VerticalPodAutoscalerait 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.

  5. komutunu kullanarak bildirimi kümeye kubectl apply uygulayın.

    kubectl create -f azure-vpa-auto.yaml
    
  6. 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
    
  7. 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
    
  8. 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 ve upperBound ö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.

  1. 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 
    
  2. 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.

  3. 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 controlledResourcesbelirtilmezsememory, Öneren OOM olaylarına yanıt vermez. Bu örnekte yalnızca içinde controlledValuesCPU'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çmenize RequestsAndLimits olanak tanır. Varsayılan değer şudur: RequestsAndLimits. seçeneğini kullanırsanız RequestsAndLimits 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.

  4. hamster-extra-recomender.yaml komutunu kullanarak örneği dağıtınkubectl apply.

    kubectl apply -f hamster-extra-recommender.yaml
    
  5. ]kubectl-get komutunu kullanarak [kubectl getpodlarınızı izleyin.

    kubectl get --watch pods -l app=hamster
    
  6. 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>
    
  7. 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.

  1. 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

  2. Ö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\}'
    
  3. 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.