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.

  • 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ığından az 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.

  1. 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"
    
  2. hamster.yaml Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtmak için kubectl 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.

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

  5. Podları kubectl get komutunu kullanarak izleyin.

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

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

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

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

    targetRef.name değeri, vpa-auto-deployment adlı bir dağıtım tarafından denetlenen herhangi bir podun VerticalPodAutoscaler'ye ait olduğunu belirtir. updateMode değerinin Recreate 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.

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

    kubectl create -f azure-vpa-auto.yaml
    
  6. 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
    
  7. 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
    
  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 podun silinip yeni bir podla değiştirilmeyeceğine karar vermek için lowerBound 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 Ö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.

  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 Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtmak için kubectl 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.

  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" 
    

    Eğer memory içinde controlledResources belirtilmezse, Önerici OOM olaylarına yanıt vermez. Bu örnekte yalnızca controlledValues 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ıca RequestsOnly seçeneği ile hem kaynak isteklerini hem de sınırları güncelleştirip güncelleştirebilirsiniz veya RequestsAndLimits seçeneği ile bunu yapabilirsiniz. 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 örneğini kubectl apply komutunu kullanarak dağıtın.

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

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

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.

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

  2. Ö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\}'
    
  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, Dikey Pod Otomatik Ölçekleyici API referansına bakın.