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 odpowiednikiemRecreate
parametru , 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 trybieAuto
. W przypadku korzystania zRecreate
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.
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ę.
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.
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
Ustaw
updateMode
wartość naAuto
,Recreate
lubInitial
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.
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.
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.
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.
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.
Utwórz plik o nazwie
hamster.yaml
i skopiuj w poniższym manifeście przykładu vertical Pod Autoscaler z repozytorium kubernetes/autoscaler GitHub.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.
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
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.
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
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ść.
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 Recreate
wartość .
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ąpmyResourceGroup
ciąg nazwą grupy zasobów, w której jest hostowany klaster.az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
Utwórz plik o nazwie
azure-autodeploy.yaml
i 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.
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.
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
Utwórz plik o nazwie
azure-vpa-auto.yaml
i skopiuj go w następującym manifeście, który opisujeVerticalPodAutoscaler
element :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 nazwievpa-auto-deployment
należy doVerticalPodAutoscaler
. WartośćupdateMode
Recreate
oznacza, że pionowy kontroler autoskalowania zasobnika może usunąć zasobnik, dostosować żądania procesora CPU i pamięci, a następnie utworzyć nowy zasobnik.Zastosuj manifest do klastra przy użyciu polecenia kubectl apply :
kubectl create -f azure-vpa-auto.yaml
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
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
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 iupperBound
, 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.
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
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.
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 wcontrolledResources
elemecie , moduł polecający nie odpowiada na zdarzenia OOM. W tym przypadku ustawiasz tylko procesor CPU w elemeciecontrolledValues
.controlledValues
Umożliwia wybranie, czy żądania zasobów kontenera mają być aktualizowane wedługRequestsOnly
opcji, czy żądania i limity zasobów przy użyciuRequestsAndLimits
opcji . Domyślna wartość toRequestsAndLimits
. Jeśli używaszRequestsAndLimits
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.
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
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
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>
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.
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
.
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\}'
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].