Azure Kubernetes Service'te (AKS) Dikey Pod Otomatik Ölçeklendirme

Bu makalede, açık kaynak Kubernetes sürümünü temel alan Azure Kubernetes Service'te (AKS) Dikey Pod Otomatik Ölçeklendiricisi'ne (VPA) genel bakış sağlanır. Yapılandırıldığında, geçmiş kullanıma göre iş yükü başına kapsayıcılar için kaynak isteklerini ve sınırlarını otomatik olarak ayarlar. VPA, diğer podlar için CPU ve Bellek boşaltarak AKS kümenizin etkili bir şekilde kullanılmasına yardımcı olur.

Dikey Pod otomatik ölçeklendirmesi, zaman içinde kaynak kullanımına yönelik öneriler sağlar. Kaynak kullanımındaki ani artışları yönetmek için, gerektiğinde pod çoğaltmalarının sayısını ölçeklendirin Yatay Pod Otomatik Ölçeklendiricisi'ni kullanın.

Sosyal haklar

Dikey Pod Otomatik Ölçeklendiricisi aşağıdaki avantajları sağlar:

  • Uygulamalarınızı doğru boyutlandırmak için işlemci ve bellek kaynaklarını analiz eder ve ayarlar. VPA yalnızca ölçeği artırmaktan değil, aynı zamanda zaman içindeki kaynak kullanımına göre ölçeği azaltmaktan da sorumludur.

  • Ölçeklendirme modu otomatik olarak ayarlandıysa veya yeniden oluşturacak şekilde ayarlandıysa, kaynak isteklerini değiştirmesi gerekiyorsa pod çıkarılır.

  • Kaynak ilkesi belirterek tek tek kapsayıcılar için CPU ve bellek kısıtlamalarını ayarlama

  • Düğümlerin pod zamanlaması için doğru kaynaklara sahip olmasını sağlar

  • İşlemci veya bellek kaynaklarında yapılan tüm ayarlamaların yapılandırılabilir günlüğe kaydedilmesi

  • Küme kaynak kullanımını geliştirin ve diğer podlar için CPU ve bellek boşaltın.

Sınırlamalar

  • Dikey Pod otomatik ölçeklendirmesi, küme başına nesnelerle VerticalPodAutoscaler ilişkilendirilmiş en fazla 1.000 pod destekler.

  • VPA, kümede bulunandan daha fazla kaynak önerebilir. Sonuç olarak, düğüm yeterli kaynaklara sahip olmadığından pod'un bir düğüme atanmasını ve çalıştırılmasını engeller. LimitRange değerini ad alanı başına kullanılabilir en fazla kaynak olarak ayarlayarak bu sınırlamanın üstesinden gelebilirsiniz. Bu, podların belirtilenden daha fazla kaynak istememesini sağlar. Ayrıca, bir VerticalPodAutoscaler nesnedeki pod başına izin verilen kaynak önerileri üst sınırını ayarlayabilirsiniz. VPA'nın yetersiz düğüm kaynak sorununu tam olarak çözemediğini unutmayın. Sınır aralığı sabittir, ancak düğüm kaynak kullanımı dinamik olarak değiştirilir.

  • Aynı CPU ve bellek kullanımı ölçümlerine göre ölçeklendirilen Yatay Pod Otomatik Ölçeklendiricisi ile Dikey Pod Otomatik Ölçeklendiricisi kullanılmasını önermeyiz.

  • VPA Recommender yalnızca sekiz güne kadar geçmiş verileri depolar.

  • VPA, iş yükünün gerçek bellek kullanımına yönelik sınırlı görünürlük nedeniyle JVM tabanlı iş yüklerini desteklemez.

  • VpA'nın bu yönetilen uygulamasıyla birlikte kendi VPA uygulamanızı çalıştırmanız önerilmez veya desteklenmez. Fazladan veya özelleştirilmiş bir öneri sahibi olması desteklenir.

  • AKS Windows kapsayıcıları desteklenmez.

Başlamadan önce

  • AKS kümesi Kubernetes sürüm 1.24 ve üzerini çalıştırır.

  • Azure CLI sürüm 2.52.0 veya üzeri yüklü ve yapılandırılmış. Sürümü bulmak için az --version komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

  • kubectl VPA'yi yüklemek istediğiniz kümeye bağlı olmalıdır.

VPA'ya genel bakış

API nesnesi

Dikey Pod Otomatik Ölçeklendiricisi, Kubernetes otomatik ölçeklendirme API grubundaki bir API kaynağıdır. Desteklenen sürüm 0,11 ve üzeridir ve Kubernetes otomatik ölçeklendirici deposunda bulunabilir.

VPA nesnesi üç bileşenden oluşur:

  • Önericisi : Geçerli ve geçmiş kaynak tüketimini izler ve buna bağlı olarak kapsayıcıların cpu ve bellek istekleri/sınırları için önerilen değerler sağlar. Öneren ölçüm geçmişini, Yetersiz Bellek (OOM) olaylarını ve VPA dağıtım belirtimini izler ve adil istekler önerir. Uygun bir kaynak isteği ve limit yapılandırması sağlayarak sınırlar yükseltilir ve azaltılır.

  • Güncelleştirici : Yönetilen podlardan hangilerinin doğru kaynaklara sahip olduğunu denetler ve ayarlanmadıysa, güncelleştirilmiş isteklerle denetleyicileri tarafından yeniden oluşturulabilmeleri için onları öldürür.

  • VPA Erişim denetleyicisi - yeni podlarda doğru kaynak isteklerini ayarlar (Güncelleştiricinin etkinliği nedeniyle denetleyicisi tarafından oluşturulur veya yeniden oluşturulur).

VPA erişim denetleyicisi

VPA erişim denetleyicisi, kendisini Mutating Admission Webhook olarak kaydeden bir ikili dosyadır. Oluşturulan her pod ile apiserver'dan bir istek alır ve eşleşen bir VPA yapılandırması olup olmadığını değerlendirir veya karşılık gelen bir tane bulup podda kaynak isteklerini ayarlamak için geçerli öneriyi kullanır.

Tek başına bir iş, ADLı overlay-vpa-cert-webhook-checkVPA erişim denetleyicisinin dışında çalışır. overlay-vpa-cert-webhook-check, sertifikaları oluşturmak ve yenilemek ve VPA erişim denetleyicisini olarak MutatingWebhookConfigurationkaydetmek için kullanılır.

Yüksek kullanılabilirlik için AKS iki erişim denetleyicisi çoğaltmasını destekler.

VPA nesne işlem modları

Otomatik olarak hesaplanan kaynak gereksinimlerine sahip olmasını istediğiniz her denetleyici için bir Dikey Pod Otomatik Ölçeklendiricisi kaynağı eklenir. Bu genellikle bir dağıtımdır. VPA'ların çalıştığı dört mod vardır:

  • Auto - VPA, pod oluşturma sırasında kaynak istekleri atar ve tercih edilen güncelleştirme mekanizmasını kullanarak mevcut podları güncelleştirir. Şu anda, Auto ile eşdeğerdir Recreateve varsayılan moddur. Pod isteklerinin yeniden başlatma ücretsiz ("yerinde") güncelleştirmesi kullanılabilir olduğunda, mod tarafından Auto tercih edilen güncelleştirme mekanizması olarak kullanılabilir. Modu kullanırken Recreate VPA, kaynak isteklerini değiştirmesi gerekiyorsa podu çıkartır. Podların bir kerede yeniden başlatılmasına ve dolayısıyla uygulama tutarsızlıklarına neden olabilir. PodDisruptionBudget kullanarak yeniden başlatmaları sınırlayabilir ve bu durumda tutarlılığı koruyabilirsiniz.
  • Recreate - VPA, pod oluşturma sırasında kaynak istekleri atar ve istenen kaynaklar yeni öneriden önemli ölçüde farklı olduğunda (tanımlanmışsa Pod KesintiSi Bütçesine uygun olarak) mevcut podları çıkararak mevcut podları güncelleştirir. Bu mod nadiren kullanılmalıdır, ancak kaynak isteği her değiştiğinde podların yeniden başlatıldığından emin olmanız gerekiyorsa. Aksi takdirde, Auto mod tercih edilir ve bu mod kullanılabilir olduğunda yeniden başlatmasız güncelleştirmelerden yararlanabilir.
  • Initial - VPA yalnızca pod oluşturma sırasında kaynak istekleri atar ve daha sonra hiçbir zaman değişmez.
  • Off - VPA, podların kaynak gereksinimlerini otomatik olarak değiştirmez. Öneriler hesaplanır ve VPA nesnesinde incelenebilir.

Uygulama geliştirme sırasında dağıtım düzeni

VPA'yı bilmiyorsanız yaygın olarak önerilen dağıtım desenlerinden biri, benzersiz kaynak kullanım özelliklerini tanımlamak için uygulama geliştirme sırasında aşağıdaki adımları gerçekleştirmek, düzgün çalıştığını doğrulamak için VPA'yı test etmek ve kümenin kaynak kullanımını iyileştirmek için diğer Kubernetes bileşenleriyle birlikte test etmektir.

  1. Üretim kümenizde UpdateMode = "Kapalı" değerini ayarlayın ve VPA'yı test etmek ve bilgi edinmek için öneri modunda çalıştırın. UpdateMode = "Kapalı", kesintiye neden olabilecek bir yanlış yapılandırmanın ortaya çıkmasını önleyebilir.

  2. Belirli bir süre boyunca gerçek kaynak kullanımı telemetrisini toplayarak önce gözlemlenebilirlik oluşturun. Bu, üzerinde çalışan iş yüklerinin etkilediği kapsayıcı ve pod kaynaklarından kaynaklanan belirtilerin veya sorunların davranışını ve işaretlerini anlamanıza yardımcı olur.

  3. Performans özelliklerini anlamak için izleme verilerini tanıyın. Bu içgörüye dayanarak, istenen istekleri/sınırları uygun şekilde ayarlayın ve sonraki dağıtım veya yükseltmede

  4. Değeri Auto, Recreateveya Initial gereksinimlerinize bağlı olarak olarak ayarlayınupdateMode.

Kümede VPA'yı dağıtma, yükseltme veya devre dışı bırakma

Bu bölümde, kümenizde Dikey Pod Otomatik Ölçeklendiricisi'ni dağıtır, yükselter veya devre dışı bırakırsınız.

  1. VPA'yı yeni bir kümede etkinleştirmek için az aks create komutuyla parametresini kullanın--enable-vpa.

    az aks create -n myAKSCluster -g myResourceGroup --enable-vpa
    

    Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.

  2. İsteğe bağlı olarak, VPA'yı mevcut bir kümede etkinleştirmek için [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update] komutuyla kullanın--enable-vpa.

    az aks update -n myAKSCluster -g myResourceGroup --enable-vpa 
    

    Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.

  3. İsteğe bağlı olarak, vpa'yı mevcut bir kümede devre dışı bırakmak için [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update] komutuyla kullanın--disable-vpa.

    az aks update -n myAKSCluster -g myResourceGroup --disable-vpa
    

    Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.

  4. Dikey Pod Otomatik Ölçeklendiricisi podlarının başarıyla oluşturulduğunu doğrulamak için kubectl get komutunu kullanın.

kubectl get pods -n kube-system

Komutun çıktısı VPA podlarına özgü aşağıdaki sonuçları içerir. Podlar bir çalışma durumu göstermelidir.

NAME                                        READY   STATUS    RESTARTS   AGE
vpa-admission-controller-7867874bc5-vjfxk   1/1     Running   0          41m
vpa-recommender-5fd94767fb-ggjr2            1/1     Running   0          41m
vpa-updater-56f9bfc96f-jgq2g                1/1     Running   0          41m

Dikey Pod Otomatik Ölçeklendiricisi yüklemenizi test etme

Aşağıdaki adımlar, her birinde 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şturur. Ayrıca dağıtımı işaret eden bir VPA yapılandırması oluşturulur. VPA podların davranışını gözlemler ve yaklaşık beş dakika sonra daha yüksek bir CPU isteğiyle güncelleştirilir.

  1. adlı bir dosya hamster.yaml oluşturun ve kubernetes/autoscaler GitHub deposundaki Dikey Pod Otomatik Ölçeklendiricisi örneğinin aşağıdaki bildiriminde kopyalayın.

  2. hamster.yaml kubectl apply komutunu kullanarak Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtın ve YAML bildiriminizin adını belirtin:

    kubectl apply -f hamster.yaml
    

    Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.

  3. Podları hamster örnek uygulamasından almak için aşağıdaki kubectl get komutunu çalıştırın:

    kubectl get pods -l app=hamster
    

    Örnek çıktı aşağıdakine benzer:

    hamster-78f9dcdd4c-hf7gk   1/1     Running   0          24s
    hamster-78f9dcdd4c-j9mc7   1/1     Running   0          24s
    
  4. Cpu ve bellek ayırmasını görüntülemek için podlardan birinde kubectl describe komutunu kullanın. "exampleID" değerini önceki adımdaki çıkışınızda döndürülen pod kimliklerinden biriyle değiştirin.

    kubectl describe pod hamster-exampleID
    

    Örnek çıktı, küme hakkındaki bilgilerin bir parçacığı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 çok daha az bellek ayırır. Vertical Pod Autoscaler 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. Vpa-updater'ın birkaç dakika sürecek yeni bir hamster podunu başlatmasını bekleyin. kubectl get komutunu kullanarak podları izleyebilirsiniz.

    kubectl get --watch pods -l app=hamster
    
  6. Yeni bir hamster pod başlatıldığında kubectl describe komutunu çalıştıran podu açıklayın ve güncelleştirilmiş CPU ve bellek rezervasyonlarını görüntüleyin.

    kubectl describe pod hamster-<exampleID>
    

    Örnek çıktı, podu açıklayan bilgilerin bir parçacığı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 262.144 Kilobayta yükseltildi ve bu da yaklaşık 250 Mibibayt veya özgün değerin beş katı. Bu pod kaynağı yetersizdi ve Dikey Pod Otomatik Ölçeklendiricisi tahmini çok daha uygun bir değerle düzeltti.

  7. VPA'nın güncelleştirilmiş önerilerini görüntülemek için kubectl describe komutunu çalıştırarak hamster-vpa kaynak bilgilerini açıklayın.

    kubectl describe vpa/hamster-vpa
    

    Örnek çıktı, kaynak kullanımıyla ilgili bilgilerin bir parçacığı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>
    

Pod Otomatik Ölçeklendiricisi isteklerini ayarlama

Dikey Pod otomatik ölçeklendirme, updateMode otomatik olarak ayarlandığında podlardaki kaynak isteklerini otomatik olarak ayarlamak için nesnesini kullanırVerticalPodAutoscaler. Gereksinimlerinize ve testlerinize bağlı olarak farklı bir değer ayarlayabilirsiniz. Bu örnekte updateMode olarak ayarlanmıştır Recreate.

  1. Aşağıdaki komutu çalıştırarak kümeniz için VPA'yı etkinleştirin. Küme adını myAKSCluster AKS kümenizin adıyla, yerine de kümenin barındırılıyor olduğu kaynak grubunun adını yazın myResourceGroup .

    az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
    
  2. adlı azure-autodeploy.yamlbir 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"]
    

    Bu bildirim, iki pod içeren bir dağıtımı açıklar. Her pod 100 miliCPU ve 50 MiB bellek isteyen bir kapsayıcıya sahiptir.

  3. Aşağıdaki örnekte gösterildiği gibi kubectl create komutuyla 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.

  4. Podları almak için aşağıdaki kubectl get komutunu çalıştırın:

    kubectl get pods
    

    Çıktı, podların adını ve durumunu gösteren aşağıdaki örneğe benzer:

    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
    
  5. adlı azure-vpa-auto.yamlbir dosya oluşturun ve öğesini açıklayan VerticalPodAutoscaleraş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.namevpa-auto-deployment bir dağıtım tarafından denetlenen tüm podların öğesine VerticalPodAutoscalerait olduğunu belirtir. updateMode değeriRecreate, 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.

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

    kubectl create -f azure-vpa-auto.yaml
    
  7. Birkaç dakika bekleyin ve aşağıdaki kubectl get komutunu çalıştırarak çalışan podları yeniden görüntüleyin:

    kubectl get pods
    

    Çıktı, pod adlarının değiştiğini ve podların durumunu gösteren aşağıdaki örneğe benzer:

    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
    
  8. Kubectl get komutunu kullanarak çalışan podlarınızdan biri hakkında ayrıntılı bilgi edinin . değerini önceki adımda aldığınız podlarınızdan birinin adıyla değiştirin podName .

    kubectl get pod podName --output yaml
    

    Çıktı aşağıdaki örneğe benzer ve Dikey Pod Otomatik Ölçeklendiricisi denetleyicisinin bellek isteğini 262144k ve CPU isteğini 25 miliCPU'ya çıkardığını gösterir.

    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
    
  9. Dikey Pod Otomatik Ölçeklendiricisi ve CPU ve bellek önerileri hakkında ayrıntılı bilgi edinmek için kubectl get komutunu kullanın:

    kubectl get vpa vpa-auto --output yaml
    

    Çıkış aşağıdaki örneğe benzer:

     recommendation:
      containerRecommendations:
      - containerName: mycontainer
        lowerBound:
          cpu: 25m
          memory: 262144k
        target:
          cpu: 25m
          memory: 262144k
        uncappedTarget:
          cpu: 25m
          memory: 262144k
        upperBound:
          cpu: 230m
          memory: 262144k
    

    Sonuçlar, kapsayıcının target en iyi şekilde çalışması için CPU veya bellek hedefini değiştirmesinin gerekmediğini belirtir. Sonuçlarınız, hedef CPU ve bellek önerisinin daha yüksek olduğu yerlerde 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

VPA'da temel bileşenlerden biri Öneren'dir. 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 öneride bulunur. Özelleştirilmiş bir öneren veya varsayılan görüntüyle aynı görüntüye sahip bir ek önericisi dağıtabilirsiniz. Özelleştirilmiş bir öneri oluşturucuya sahip olmanın avantajı, öneri mantığınızı özelleştirebilmenizdir. Ek bir öneri ile, çok sayıda VPA nesnesi varsa VPA'ları birden çok önericiye bölümleyebilirsiniz.

Aşağıdaki örnek, mevcut AKS kümenize uygulamanız için ek bir öneridir. Ardından VPA nesnesini ek öneriyi kullanacak şekilde yapılandırabilirsiniz.

  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 # nobody 
          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 Kubectl apply komutunu kullanarak Dikey Pod Otomatik Ölçeklendiricisi örneğini dağıtın ve YAML bildiriminizin adını belirtin.

    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ı hamnster_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 durumda, yalnızca içinde controlledValuesCPU'ları ayarlarsınız. controlledValues seçeneğiyle kapsayıcının kaynak isteklerini RequestsOnly mi yoksa hem kaynak isteklerini hem de sınırlarını mı güncelleştirebileceğinizi 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 Otomatik modu ve bilgi işlem önerilerini kullanarak VPA nesnesini basitleştirebilirsiniz.

  1. hamster_extra-recomender.yaml kubectl apply komutunu kullanarak örneği dağıtın ve YAML bildiriminizin adını belirtin.

    kubectl apply -f hamster_customized_recommender.yaml
    
  2. Vpa-updater'ın birkaç dakika sürecek yeni bir hamster podunu başlatmasını bekleyin. kubectl get komutunu kullanarak podları izleyebilirsiniz.

    kubectl get --watch pods -l app=hamster
    
  3. Yeni bir hamster pod başlatıldığında kubectl describe komutunu çalıştıran podu açıklayın ve güncelleştirilmiş CPU ve bellek rezervasyonlarını görüntüleyin.

    kubectl describe pod hamster-<exampleID>
    

    Örnek çıktı, podu açıklayan bilgilerin bir parçacığı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>
    
  4. VPA'nın güncelleştirilmiş önerilerini görüntülemek için kubectl describe komutunu çalıştırarak hamster-vpa kaynak bilgilerini açıklayın.

    kubectl describe vpa/hamster-vpa
    

    Örnek çıktı, kaynak kullanımıyla ilgili bilgilerin bir parçacığı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
    

Sorun giderme

VPA yüklemesiyle ilgili sorunları tanılamak için aşağıdaki adımları uygulayın.

  1. Aşağıdaki komutu kullanarak tüm sistem bileşenlerinin çalışıp çalışmadığını denetleyin:

    kubectl --namespace=kube-system get pods|grep vpa
    

Çıktıda üç pod listelenmelidir: önericisi, güncelleştiricisi ve erişim denetleyicisinin tümü durumunu gösteren durumdur Running.

  1. Sistem bileşenlerinin hataları günlüğe kaydedip kaydetmediğini onaylayın. Önceki komut tarafından döndürülen podların her biri için aşağıdaki komutu çalıştırın:

    kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
    
  2. Aşağıdaki komutu çalıştırarak özel kaynak tanımının oluşturulduğunu onaylayın:

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

Sonraki adımlar

Bu makalede, küme düğümlerinin CPU ve bellek gibi kaynak kullanımını uygulama gereksinimlerine uyacak şekilde otomatik olarak nasıl ölçeklendirdiğiniz gösterilir.

  • Uygulamanızı çalıştıran pod sayısını otomatik olarak ayarlamak için yatay pod otomatik ölçeklendiricisini de kullanabilirsiniz. Yatay pod otomatik ölçeklendiricisini kullanma adımları için bkz . AKS'de uygulamaları ölçeklendirme.

  • İlgili VPA nesnelerinin tanımları hakkında daha fazla bilgi edinmek için Dikey Pod Otomatik Ölçeklendiricisi [API başvurusu] bölümüne bakın.