Skalowanie automatyczne pionowych zasobników w usłudze Azure Kubernetes Service (AKS)

Ten artykuł zawiera omówienie rozwiązania Vertical Pod Autoscaler (VPA) w usłudze Azure Kubernetes Service (AKS), która jest oparta na wersji rozwiązania Kubernetes typu open source. Po skonfigurowaniu automatycznie ustawia żądania zasobów i limity dla kontenerów na obciążenie na podstawie wcześniejszego użycia. VpA zwalnia procesor i pamięć dla innych zasobników i pomaga efektywnie wykorzystać klaster usługi AKS.

Skalowanie automatyczne zasobników w pionie zawiera zalecenia dotyczące użycia zasobów w czasie. Aby zarządzać nagłymi wzrostami użycia zasobów, użyj narzędzia Horizontal Pod Autoscaler, który skaluje liczbę replik zasobników zgodnie z potrzebami.

Świadczenia

Narzędzie do automatycznego skalowania zasobników w pionie zapewnia następujące korzyści:

  • Analizuje i dostosowuje zasoby procesora i pamięci w celu odpowiedniego rozmiaru aplikacji. VpA jest nie tylko odpowiedzialny za skalowanie w górę, ale także skalowanie w dół na podstawie ich użycia zasobów w czasie.

  • Zasobnik jest eksmitowany, jeśli musi zmienić żądania zasobów, jeśli jego tryb skalowania został ustawiony na automatyczne lub ponownie utworzone.

  • Ustawianie ograniczeń procesora CPU i pamięci dla poszczególnych kontenerów przez określenie zasad zasobów

  • Zapewnia, że węzły mają poprawne zasoby na potrzeby planowania zasobników

  • Konfigurowalne rejestrowanie wszelkich korekt zasobów procesora lub pamięci

  • Zwiększ wykorzystanie zasobów klastra i zwalnia procesor i pamięć dla innych zasobników.

Ograniczenia

  • Automatyczne skalowanie zasobników w pionie obsługuje maksymalnie 1000 zasobników skojarzonych z obiektami VerticalPodAutoscaler na klaster.

  • VpA może zalecić więcej zasobów niż dostępnych w klastrze. W związku z tym uniemożliwia to przypisanie zasobnika do węzła i uruchomienie go, ponieważ węzeł nie ma wystarczających zasobów. To ograniczenie można przezwyciężyć, ustawiając wartość LimitRange na maksymalną dostępną ilość zasobów na przestrzeń nazw, co gwarantuje, że zasobniki nie pytają o więcej zasobów niż określono. Ponadto w obiekcie można ustawić maksymalne dozwolone zalecenia dotyczące zasobów na zasobnik VerticalPodAutoscaler . Należy pamiętać, że usługa VPA nie może w pełni przezwyciężyć problemu z niewystarczającym zasobem węzła. Zakres limitów jest stały, ale użycie zasobów węzła jest zmieniane dynamicznie.

  • Nie zalecamy używania narzędzia Vertical Pod Autoscaler z funkcją Horizontal Pod Autoscaler, która jest skalowana na podstawie tych samych metryk użycia procesora i pamięci.

  • Usługa VPA Recommender przechowuje tylko do ośmiu dni danych historycznych.

  • VpA nie obsługuje obciążeń opartych na maszynie JVM ze względu na ograniczony wgląd w rzeczywiste użycie pamięci obciążenia.

  • Nie zaleca się ani nie jest obsługiwane uruchamianie własnej implementacji vpA wraz z tą zarządzaną implementacją vpA. Obsługiwana jest dodatkowa lub niestandardowa rekomendacja.

  • Kontenery systemu Windows usługi AKS nie są obsługiwane.

Zanim rozpoczniesz

  • Klaster usługi AKS działa na platformie Kubernetes w wersji 1.24 lub nowszej.

  • Interfejs wiersza polecenia platformy Azure w wersji 2.52.0 lub nowszej został zainstalowany i skonfigurowany. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

  • kubectl powinien być połączony z klastrem, który chcesz zainstalować vpa.

Omówienie vpa

Obiekt interfejsu API

Narzędzie Do automatycznego skalowania zasobników pionowych to zasób interfejsu API w grupie interfejsu API automatycznego skalowania kubernetes. Obsługiwana wersja to 0.11 i nowsza wersja. Można je znaleźć w repozytorium narzędzia do automatycznego skalowania Kubernetes.

Obiekt VPA składa się z trzech składników:

  • Moduł rekomendacji — monitoruje bieżące i wcześniejsze użycie zasobów, a na jego podstawie udostępnia zalecane wartości dla żądań/limitów procesora CPU i pamięci kontenerów. Moduł rekomendacji monitoruje historię metryk, zdarzenia poza pamięcią (OOM) oraz specyfikację wdrożenia VPA i sugeruje sprawiedliwe żądania. Zapewniając odpowiednią konfigurację żądań i limitów zasobów, limity są zgłaszane i obniżane.

  • Aktualizator — sprawdza, które z zarządzanych zasobników mają poprawne zestawy zasobów, a jeśli nie, zabija je, aby można je było odtworzyć za pomocą zaktualizowanych żądań przez kontrolery.

  • Kontroler wstępu VPA — ustawia prawidłowe żądania zasobów na nowych zasobnikach (utworzone lub ponownie utworzone przez ich kontroler z powodu działania aktualizatora).

Kontroler wstępu VPA

Kontroler wstępu VPA jest plikiem binarnym, który rejestruje się jako Mutating Admission Webhook. Po utworzeniu każdego zasobnika otrzymuje żądanie z serwera apiserver i ocenia, czy istnieje zgodna konfiguracja VPA, lub znajdź odpowiedni, i użyj bieżącego zalecenia, aby ustawić żądania zasobów w zasobniku.

Autonomiczne zadanie jest uruchamiane poza kontrolerem wstępu VPA o nazwie overlay-vpa-cert-webhook-check. Element overlay-vpa-cert-webhook-check służy do tworzenia i odnawiania certyfikatów oraz rejestrowania kontrolera dostępu vpA jako MutatingWebhookConfiguration.

W przypadku wysokiej dostępności usługa AKS obsługuje dwie repliki kontrolera dostępu.

Tryby operacji obiektu VPA

Zasób automatycznego skalowania zasobnika w pionie jest wstawiany dla każdego kontrolera, który ma mieć automatycznie obliczone wymagania dotyczące zasobów. Jest to najczęściej wdrożenie. Istnieją cztery tryby, w których działają vpA:

  • Auto - VPA przypisuje żądania zasobów podczas tworzenia zasobnika i aktualizuje istniejące zasobniki przy użyciu preferowanego mechanizmu aktualizacji. Auto Obecnie jest odpowiednikiem Recreateparametru , a także jest trybem domyślnym. Po ponownym uruchomieniu bezpłatne ("w miejscu") aktualizacja żądań zasobników jest dostępna, może być używana jako preferowany mechanizm aktualizacji w trybie Auto . W przypadku korzystania z Recreate trybu usługa VPA eksmituje zasobnik, jeśli musi zmienić żądania zasobów. Może to spowodować ponowne uruchomienie zasobników jednocześnie, co powoduje niespójności aplikacji. Możesz ograniczyć ponowne uruchomienia i zachować spójność w tej sytuacji przy użyciu zasobnika PodDisruptionBudget.
  • Recreate - VPA przypisuje żądania zasobów podczas tworzenia zasobnika, a także aktualizuje istniejące zasobniki, eksmitując je, gdy żądane zasoby różnią się znacznie od nowego zalecenia (z uwzględnieniem budżetu zakłócenia zasobnika, jeśli zostały zdefiniowane). Ten tryb należy używać rzadko, tylko wtedy, gdy trzeba się upewnić, że zasobniki są ponownie uruchamiane za każdym razem, gdy żądanie zasobu ulegnie zmianie. Auto W przeciwnym razie preferowany jest tryb, który może korzystać z aktualizacji bez ponownego uruchamiania po ich udostępnieniu.
  • Initial - VPA przypisuje tylko żądania zasobów podczas tworzenia zasobnika i nigdy później nie zmienia się.
  • Off - VPA nie zmienia automatycznie wymagań dotyczących zasobów zasobników. Zalecenia są obliczane i można je sprawdzić w obiekcie VPA.

Wzorzec wdrażania podczas tworzenia aplikacji

Typowy wzorzec wdrażania zalecany w przypadku, gdy nie znasz umowy VPA, należy wykonać następujące kroki podczas tworzenia aplikacji, aby zidentyfikować jego unikatowe cechy wykorzystania zasobów, przetestować vpa, aby sprawdzić, czy działa prawidłowo, i przetestować wraz z innymi składnikami Kubernetes w celu zoptymalizowania wykorzystania zasobów klastra.

  1. Ustaw wartość UpdateMode = "Off" w klastrze produkcyjnym i uruchom vpA w trybie rekomendacji, aby można było przetestować i poznać funkcję VPA. UpdateMode = "Wyłączone" może uniknąć wprowadzenia błędnej konfiguracji, która może spowodować awarię.

  2. Najpierw ustanów możliwość obserwacji, zbierając rzeczywiste dane telemetryczne wykorzystania zasobów w danym okresie. Pomaga to zrozumieć zachowanie i oznaki objawów lub problemów z zasobami kontenera i zasobnika, na które wpływają obciążenia uruchomione.

  3. Zapoznaj się z danymi monitorowania, aby zrozumieć charakterystykę wydajności. Na podstawie tych szczegółowych informacji należy odpowiednio ustawić żądane żądania/limity, a następnie w następnym wdrożeniu lub uaktualnieniu

  4. Ustaw updateMode wartość na Auto, Recreatelub Initial w zależności od wymagań.

Wdrażanie, uaktualnianie lub wyłączanie narzędzia VPA w klastrze

W tej sekcji wdrożysz, uaktualnisz lub wyłączysz narzędzie Do automatycznego skalowania pionowego zasobnika w klastrze.

  1. Aby włączyć vpA w nowym klastrze, użyj --enable-vpa parametru za pomocą polecenia az aks create .

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

    Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

  2. Opcjonalnie, aby włączyć vpA w istniejącym klastrze, użyj --enable-vpa polecenia [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update] .

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

    Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

  3. Opcjonalnie, aby wyłączyć vpA w istniejącym klastrze, użyj --disable-vpa polecenia [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update] .

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

    Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

  4. Aby sprawdzić, czy zasobniki narzędzia Vertical Pod Autoscaler zostały utworzone pomyślnie, użyj polecenia kubectl get .

kubectl get pods -n kube-system

Dane wyjściowe polecenia zawierają następujące wyniki specyficzne dla zasobników VPA. Zasobniki powinny wyświetlać stan działania .

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

Testowanie instalacji narzędzia Vertical Pod Autoscaler

Poniższe kroki umożliwiają utworzenie wdrożenia z dwoma zasobnikami, z których każdy uruchamia pojedynczy kontener, który żąda 100 milicores i próbuje wykorzystać nieco ponad 500 milisekund. Ponadto jest tworzona konfiguracja VPA wskazująca wdrożenie. VpA obserwuje zachowanie zasobników, a po około pięciu minutach są aktualizowane przy użyciu wyższego żądania procesora CPU.

  1. Utwórz plik o nazwie hamster.yaml i skopiuj w poniższym manifeście przykładu vertical Pod Autoscaler z repozytorium kubernetes/autoscaler GitHub.

  2. Wdróż przykład narzędzia Do automatycznego skalowania pionowego hamster.yaml zasobnika przy użyciu polecenia kubectl apply i określ nazwę manifestu YAML:

    kubectl apply -f hamster.yaml
    

    Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

  3. Uruchom następujące polecenie kubectl get , aby pobrać zasobniki z aplikacji przykładowej chomika:

    kubectl get pods -l app=hamster
    

    Przykładowe dane wyjściowe są podobne do następujących:

    hamster-78f9dcdd4c-hf7gk   1/1     Running   0          24s
    hamster-78f9dcdd4c-j9mc7   1/1     Running   0          24s
    
  4. Użyj polecenia kubectl describe na jednym z zasobników, aby wyświetlić jego rezerwację procesora i pamięci. Zastąp ciąg "exampleID" jednym z identyfikatorów zasobników zwróconych w danych wyjściowych z poprzedniego kroku.

    kubectl describe pod hamster-exampleID
    

    Przykładowe dane wyjściowe to fragment informacji o klastrze:

     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>
    

    Zasobnik ma 100 milicpu i 50 mibibajtów pamięci zarezerwowanej w tym przykładzie. W przypadku tej przykładowej aplikacji zasobnik potrzebuje mniej niż 100 milicpu do uruchomienia, więc nie ma dostępnej pojemności procesora CPU. Zasobniki również rezerwuje znacznie mniej pamięci niż jest to potrzebne. Wdrożenie modułu vpa-recommender vertical Pod Autoscaler analizuje zasobniki obsługujące aplikację chomika, aby sprawdzić, czy wymagania dotyczące procesora i pamięci są odpowiednie. Jeśli potrzebne są korekty, vpa-updater ponownie uruchomi zasobniki ze zaktualizowanymi wartościami.

  5. Poczekaj, aż vpa-updater uruchom nowy zasobnik chomika, który powinien potrwać kilka minut. Zasobniki można monitorować za pomocą polecenia kubectl get .

    kubectl get --watch pods -l app=hamster
    
  6. Po uruchomieniu nowego zasobnika chomika opisz zasobnik z uruchomionym poleceniem kubectl describe i wyświetl zaktualizowane rezerwacje procesora i pamięci.

    kubectl describe pod hamster-<exampleID>
    

    Przykładowe dane wyjściowe to fragment informacji opisujących zasobnik:

    State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    

    W poprzednich danych wyjściowych widać, że rezerwacja procesora CPU wzrosła do 587 milicpu, czyli ponad pięć razy więcej niż oryginalna wartość. Pamięć wzrosła do 262 144 kilobajtów, czyli około 250 mibibajtów lub pięć razy więcej niż oryginalna wartość. Ten zasobnik był niedostatecznie zasób, a narzędzie Vertical Pod Autoscaler poprawiło oszacowanie o znacznie bardziej odpowiednią wartość.

  7. Aby wyświetlić zaktualizowane zalecenia z poziomu vpA, uruchom polecenie kubectl describe , aby opisać informacje o zasobie hamster-vpa.

    kubectl describe vpa/hamster-vpa
    

    Przykładowe dane wyjściowe to fragment informacji o wykorzystaniu zasobów:

     State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    

Ustawianie żądań autoskalatora zasobników

Automatyczne skalowanie zasobników w VerticalPodAutoscaler pionie używa obiektu do automatycznego ustawiania żądań zasobów na zasobnikach, gdy właściwość updateMode jest ustawiona na wartość Auto. Możesz ustawić inną wartość w zależności od wymagań i testowania. W tym przykładzie parametr updateMode jest ustawiony na Recreatewartość .

  1. Włącz usługę VPA dla klastra, uruchamiając następujące polecenie. Zastąp nazwę klastra nazwą myAKSCluster klastra usługi AKS i zastąp myResourceGroup ciąg nazwą grupy zasobów, w której jest hostowany klaster.

    az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
    
  2. Utwórz plik o nazwie azure-autodeploy.yamli skopiuj go w następującym manifeście.

    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"]
    

    W tym manifeście opisano wdrożenie z dwoma zasobnikami. Każdy zasobnik ma jeden kontener, który żąda 100 miliCPU i 50 MiB pamięci.

  3. Utwórz zasobnik za pomocą polecenia kubectl create , jak pokazano w poniższym przykładzie:

    kubectl create -f azure-autodeploy.yaml
    

    Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

  4. Uruchom następujące polecenie kubectl get , aby pobrać zasobniki:

    kubectl get pods
    

    Dane wyjściowe przypominają następujący przykład pokazujący nazwę i stan zasobników:

    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. Utwórz plik o nazwie azure-vpa-auto.yamli skopiuj go w następującym manifeście, który opisuje VerticalPodAutoscalerelement :

    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"
    

    Wartość targetRef.name określa, że każdy zasobnik kontrolowany przez wdrożenie o nazwie vpa-auto-deployment należy do VerticalPodAutoscaler. Wartość updateModeRecreate oznacza, że pionowy kontroler autoskalowania zasobnika może usunąć zasobnik, dostosować żądania procesora CPU i pamięci, a następnie utworzyć nowy zasobnik.

  6. Zastosuj manifest do klastra przy użyciu polecenia kubectl apply :

    kubectl create -f azure-vpa-auto.yaml
    
  7. Zaczekaj kilka minut i ponownie wyświetl uruchomione zasobniki, uruchamiając następujące polecenie kubectl get :

    kubectl get pods
    

    Dane wyjściowe przypominają następujący przykład pokazujący, że nazwy zasobników zostały zmienione i stan zasobników:

    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. Uzyskaj szczegółowe informacje o jednym z uruchomionych zasobników przy użyciu polecenia Kubectl get . Zastąp podName ciąg nazwą jednego z zasobników pobranych w poprzednim kroku.

    kubectl get pod podName --output yaml
    

    Dane wyjściowe przypominają poniższy przykład pokazujący, że pionowy kontroler automatycznego skalowania zasobników zwiększył żądanie pamięci do 262144k, a żądanie procesora CPU do 25 miliCPU.

    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. Aby uzyskać szczegółowe informacje na temat narzędzia Autoscaler pionowych zasobników i jego zaleceń dotyczących procesora CPU i pamięci, użyj polecenia kubectl get :

    kubectl get vpa vpa-auto --output yaml
    

    Dane wyjściowe przypominają następujący przykład:

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

    Wyniki pokazują target , że atrybut określa, że aby kontener działał optymalnie, nie musi zmieniać procesora CPU ani docelowego miejsca docelowego pamięci. Wyniki mogą się różnić w zależności od tego, gdzie docelowe zalecenie dotyczące procesora CPU i pamięci są wyższe.

    Narzędzie Autoscaler pionowych zasobników używa lowerBound atrybutów i upperBound , aby zdecydować, czy usunąć zasobnik i zamienić go na nowy zasobnik. Jeśli zasobnik ma żądania mniejsze niż dolna granica lub większa niż górna granica, narzędzie Vertical Pod Autoscaler usuwa zasobnik i zastępuje go zasobnikem spełniającym atrybut docelowy.

Dodatkowy moduł polecający do automatycznego skalowania pionowych zasobników

W przypadku vpA jeden z podstawowych składników jest modułem polecania. Zawiera on zalecenia dotyczące użycia zasobów na podstawie użycia zasobów w czasie rzeczywistym. Usługa AKS wdraża moduł polecający, gdy klaster włącza vpa. Możesz wdrożyć dostosowany moduł polecający lub dodatkowy moduł polecający z tym samym obrazem co domyślny. Zaletą dostosowania rekomendacji jest możliwość dostosowania logiki rekomendacji. Dzięki dodatkowemu rekomendatorowi można podzielić moduły VPA na wiele rekomendacji, jeśli istnieje wiele obiektów VPA.

W poniższym przykładzie przedstawiono dodatkową rekomendację, która ma zastosowanie do istniejącego klastra usługi AKS. Następnie należy skonfigurować obiekt VPA tak, aby używał dodatkowego modułu polecającego.

  1. Utwórz plik o nazwie extra_recommender.yaml i skopiuj go w następującym manifeście:

    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 Wdróż przykład narzędzia Vertical Pod Autoscaler przy użyciu polecenia kubectl apply i określ nazwę manifestu YAML.

    kubectl apply -f extra-recommender.yaml 
    

    Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.

  3. Utwórz plik o nazwie hamnster_extra_recommender.yaml i skopiuj go w następującym manifeście:

    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" 
    

    Jeśli memory parametr nie zostanie określony w controlledResourceselemecie , moduł polecający nie odpowiada na zdarzenia OOM. W tym przypadku ustawiasz tylko procesor CPU w elemecie controlledValues. controlledValues Umożliwia wybranie, czy żądania zasobów kontenera mają być aktualizowane według RequestsOnly opcji, czy żądania i limity zasobów przy użyciu RequestsAndLimits opcji . Domyślna wartość to RequestsAndLimits. Jeśli używasz RequestsAndLimits tej opcji, żądania są obliczane na podstawie rzeczywistego użycia, a limity są obliczane na podstawie współczynnika żądań i limitów bieżącego zasobnika.

    Jeśli na przykład zaczniesz od zasobnika, który żąda 2 procesorów CPU i limitów do 4 procesorów CPU, vpA zawsze ustawia limit na dwa razy więcej niż żądania. Ta sama zasada dotyczy pamięci. W przypadku korzystania z RequestsAndLimits trybu może on służyć jako strategia dla początkowych żądań i limitów zasobów aplikacji.

Obiekt VPA można uprościć przy użyciu trybu automatycznego i zaleceń obliczeniowych dotyczących procesora CPU i pamięci.

  1. hamster_extra-recomender.yaml Wdróż przykład przy użyciu polecenia kubectl apply i określ nazwę manifestu YAML.

    kubectl apply -f hamster_customized_recommender.yaml
    
  2. Poczekaj, aż vpa-updater uruchom nowy zasobnik chomika, który powinien potrwać kilka minut. Zasobniki można monitorować za pomocą polecenia kubectl get .

    kubectl get --watch pods -l app=hamster
    
  3. Po uruchomieniu nowego zasobnika chomika opisz zasobnik z uruchomionym poleceniem kubectl describe i wyświetl zaktualizowane rezerwacje procesora i pamięci.

    kubectl describe pod hamster-<exampleID>
    

    Przykładowe dane wyjściowe to fragment informacji opisujących zasobnik:

    State:          Running
      Started:      Wed, 28 Sep 2022 15:09:51 -0400
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        587m
      memory:     262144k
    Environment:  <none>
    
  4. Aby wyświetlić zaktualizowane zalecenia z poziomu vpA, uruchom polecenie kubectl describe , aby opisać informacje o zasobie hamster-vpa.

    kubectl describe vpa/hamster-vpa
    

    Przykładowe dane wyjściowe to fragment informacji o wykorzystaniu zasobów:

    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
    

Rozwiązywanie problemów

Aby zdiagnozować problemy z instalacją vpa, wykonaj następujące kroki.

  1. Sprawdź, czy wszystkie składniki systemowe są uruchomione przy użyciu następującego polecenia:

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

Dane wyjściowe powinny zawierać trzy zasobniki — rekomendator, aktualizator i kontroler wpływu danych ze stanem Running.

  1. Sprawdź, czy składniki systemowe rejestrują błędy. Dla każdego zasobnika zwróconego przez poprzednie polecenie uruchom następujące polecenie:

    kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
    
  2. Upewnij się, że utworzono niestandardową definicję zasobu, uruchamiając następujące polecenie:

    kubectl get customresourcedefinition | grep verticalpodautoscalers
    

Następne kroki

W tym artykule pokazano, jak automatycznie skalować wykorzystanie zasobów, takie jak procesor CPU i pamięć, węzłów klastra w celu spełnienia wymagań aplikacji.

  • Możesz również użyć narzędzia do automatycznego skalowania zasobników w poziomie, aby automatycznie dostosować liczbę zasobników, które uruchamiają aplikację. Aby uzyskać instrukcje dotyczące korzystania z narzędzia do automatycznego skalowania zasobników poziomych, zobacz Skalowanie aplikacji w usłudze AKS.

  • Aby dowiedzieć się więcej o definicjach powiązanych obiektów VPA, zobacz Pionowy narzędzie do automatycznego skalowania zasobników [dokumentacja interfejsu API].