Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak używać narzędzia Vertical Pod Autoscaler (VPA) w klastrze usługi Azure Kubernetes Service (AKS). VPA automatycznie dostosowuje żądania CPU i pamięci dla zasobników, aby dopasować je do wzorców użycia twoich obciążeń. Ta funkcja pomaga zoptymalizować wydajność aplikacji i zmniejszyć koszty związane z obsługą obciążeń w usłudze AKS.
Aby uzyskać więcej informacji, zobacz omówienie pionowego skalowacza zasobników.
Zanim rozpoczniesz
Jeśli masz istniejący klaster usługi AKS, upewnij się, że jest uruchomiony program Kubernetes w wersji 1.24 lub nowszej.
Musisz zainstalować i skonfigurować interfejs wiersza polecenia platformy Azure w wersji 2.52.0 lub nowszej. 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.Jeśli włączasz usługę VPA w istniejącym klastrze, upewnij się, że
kubectl
jest zainstalowany i skonfigurowany do połączenia z twoim klastrem AKS przy użyciu poleceniaaz aks get-credentials
.az aks get-credentials --name <cluster-name> --resource-group <resource-group-name>
Wdróż Vertical Pod Autoscaler w nowym klastrze
Utwórz nowy klaster AKS z włączonym VPA, używając polecenia
az aks create
z flagą--enable-vpa
.az aks create --name <cluster-name> --resource-group <resource-group-name> --enable-vpa --generate-ssh-keys
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Aktualizowanie istniejącego klastra w celu korzystania z narzędzia do automatycznego skalowania zasobników pionowych
Zaktualizuj istniejący klaster, aby używał VPA, używając polecenia
az aks update
z flagą--enable-vpa
.az aks update --name <cluster-name> --resource-group <resource-group-name> --enable-vpa
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Wyłącz Pionowy Autoskalator zasobników w istniejącym klastrze
Wyłącz VPA w istniejącym klasterze, używając polecenia
az aks update
z flagą--disable-vpa
.az aks update --name <cluster-name> --resource-group <resource-group-name> --disable-vpa
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Testowanie instalacji autoskalatora zasobnika pionowego
W poniższym przykładzie utworzymy wdrożenie z dwoma zasobnikami, z których każdy uruchamia pojedynczy kontener, który wymaga 100 milicorów i próbuje wykorzystać nieco ponad 500 milicorów. Tworzymy również konfigurację VPA wskazującą na wdrożenie. VpA obserwuje zachowanie zasobników, a po około pięciu minutach aktualizuje zasobniki, aby zażądać 500 milicores.
Utwórz plik o nazwie
hamster.yaml
i skopiuj poniższy manifest przykładu Vertical Pod Autoscaler z repozytorium kubernetes/autoscaler w serwisie GitHub.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"
Rozpocznij wdrażanie przykładu narzędzia Vertical Pod Autoscaler przy użyciu polecenia
kubectl apply
.kubectl apply -f hamster.yaml
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Wyświetl uruchomione zasobniki przy użyciu
kubectl get
polecenia .kubectl get pods -l app=hamster
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
hamster-78f9dcdd4c-hf7gk 1/1 Running 0 24s hamster-78f9dcdd4c-j9mc7 1/1 Running 0 24s
Wyświetl rezerwacje procesora i pamięci na jednym z zasobników używając polecenia
kubectl describe
. Upewnij się, że zastąpisz<example-pod>
jednym z identyfikatorów zasobników zwróconych w wynikach z poprzedniego kroku.kubectl describe pod hamster-<example-pod>
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
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. Zasobniki również rezerwują mniej pamięci, niż jest potrzebne. Wdrożenie systemu Vertical Pod Autoscaler vpa-recommender analizuje zasobniki hostujące aplikację chomika, aby sprawdzić, czy wymagania dotyczące procesora CPU i pamięci są odpowiednie. Jeśli potrzebne są korekty, vpa-updater ponownie uruchomi zasobniki ze zaktualizowanymi wartościami.
Monitoruj zasobniki przy użyciu polecenia
kubectl get
.kubectl get --watch pods -l app=hamster
Po uruchomieniu nowego zasobnika chomika można wyświetlić zaktualizowane rezerwacje zasobów CPU i pamięci przy użyciu
kubectl describe
. Upewnij się, że zastąpisz<example-pod>
jednym z identyfikatorów zasobników wygenerowanych w danych wyjściowych z poprzedniego kroku.kubectl describe pod hamster-<example-pod>
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
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 wzrosła do 587 milicpu, czyli ponad pięciokrotnie w stosunku do oryginalnej wartości. 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 wyposażony, a narzędzie Vertical Pod Autoscaler poprawiło szacunek na znacznie bardziej odpowiednią wartość.
Wyświetl zaktualizowane zalecenia z VPA przy użyciu polecenia
kubectl describe
do opisania informacji o zasobie hamster-vpa.kubectl describe vpa/hamster-vpa
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
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ń automatycznego skalowania zasobnika pionowego
Obiekt VerticalPodAutoscaler
automatycznie ustawia żądania zasobów na zasobnikach z updateMode
równym Auto
. Możesz ustawić inną wartość w zależności od wymagań i testowania. W tym przykładzie utworzymy i przetestujemy manifest wdrożenia z dwoma zasobnikami, z których każdy uruchamia kontener, który żąda 100 miliCPU i 50 MiB pamięci, a następnie ustawia updateMode
wartość na Recreate
.
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"]
Utwórz zasobnik za pomocą polecenia
kubectl create
.kubectl create -f azure-autodeploy.yaml
Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON.
Wyświetl uruchomione zasobniki przy użyciu
kubectl get
polecenia .kubectl get pods
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
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: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 pod kontrolowany przez wdrożenie o nazwievpa-auto-deployment
należy doVerticalPodAutoscaler
. WartośćupdateMode
Recreate
oznacza, że kontroler pionowego automatycznego skalowania zasobników może usunąć zasobnik, dostosować żądania zasobów CPU i pamięci, a następnie utworzyć nowy zasobnik.Zastosuj manifest do klastra za pomocą polecenia
kubectl apply
.kubectl create -f azure-vpa-auto.yaml
Poczekaj kilka minut, a następnie wyświetl uruchomione zasobniki za pomocą polecenia
kubectl get
.kubectl get pods
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
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 za pomocą polecenia
kubectl get
. Pamiętaj, aby zastąpić<pod-name>
nazwą jednego z zasobników z poprzedniego wyniku.kubectl get pod <pod-name> --output yaml
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych, które pokazują, że kontroler VPA 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
Uzyskaj szczegółowe informacje na temat Pionowego Autoskalowacza Zasobników i jego zaleceń dotyczących procesora i pamięci przy użyciu polecenia
kubectl get
.kubectl get vpa vpa-auto --output yaml
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
recommendation: containerRecommendations: - containerName: mycontainer lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 230m memory: 262144k
W tym przykładzie wyniki w atrybucie
target
określają, że nie trzeba zmieniać celu procesora ani pamięci, aby kontener działał optymalnie. Jednak wyniki mogą się różnić w zależności od aplikacji i jej wykorzystania zasobów.Pionowy Autoskaler Zasobników używa atrybutów
lowerBound
orazupperBound
, 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 rekomendator dla Vertical Pod Autoscaler
Rekomendator dostarcza rekomendacji dotyczących wykorzystania zasobów na podstawie ich konsumpcji w czasie rzeczywistym. Usługa AKS wdraża Rekomendator, gdy klaster włącza VPA. Możesz wdrożyć dostosowany moduł rekomendacji lub dodatkowy moduł rekomendacji z tym samym obrazem co domyślny. Zaletą dostosowanego modułu rekomendacji jest możliwość dostosowania logiki rekomendacji. Dzięki dodatkowi rekomendatora można podzielić VPAs na partycje, aby używać różnych Rekomendatorów.
W poniższym przykładzie utworzymy dodatkowy moduł polecający, zastosujemy go do istniejącego klastra usługi AKS i skonfigurujemy obiekt VPA, aby używał dodatkowego modułu zalecają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 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życiukubectl apply
polecenia .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
hamster-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 jest określony wcontrolledResources
elemecie , moduł rekomendacji nie odpowiada na zdarzenia OOM. W tym przykładzie ustawiamy tylko procesor CPU w elemenciecontrolledValues
.controlledValues
Umożliwia wybranie, czy żądania zasobów kontenera mają być aktualizowane przy użyciuRequestsOnly
opcji , czy też zarówno żądań zasobów, jak i limitów przy użyciuRequestsAndLimits
opcji . Domyślna wartość toRequestsAndLimits
. Jeśli używasz opcjiRequestsAndLimits
, żądania są obliczane na podstawie rzeczywistego użycia, a limity są obliczane na podstawie współczynnika żądania do limitu obecnie działającego poda.Jeśli na przykład zaczniesz od modułu, który wymaga 2 procesorów CPU i ustala limity do 4 procesorów CPU, VPA zawsze ustawia limit na dwa razy więcej niż wymagania. Ta sama zasada dotyczy pamięci. W przypadku korzystania z
RequestsAndLimits
trybu może on służyć jako schemat dla początkowych żądań i limitów zasobów aplikacji.Obiekt VPA można uprościć dzięki trybowi
Auto
i zaleceniom obliczeniowym dotyczącym zarówno CPU, jak i pamięci.hamster-extra-recomender.yaml
Wdróż przykład przy użyciukubectl apply
polecenia .kubectl apply -f hamster-extra-recommender.yaml
Monitoruj pody przy użyciu polecenia
[kubectl get
kubectl-get.kubectl get --watch pods -l app=hamster
Po uruchomieniu nowego zasobnika chomika, wyświetl zaktualizowane rezerwacje CPU i pamięci przy użyciu polecenia
kubectl describe
. Upewnij się, że zastąpisz<example-pod>
jednym z identyfikatorów zasobnika.kubectl describe pod hamster-<example-pod>
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Wyświetl zaktualizowane zalecenia VPA, używając polecenia
kubectl describe
.kubectl describe vpa/hamster-vpa
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
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 z pionowym autoskalerem zasobników
Jeśli wystąpią problemy z Pionowym Autoskalatorem Zasobników, możesz rozwiązać problemy związane ze składnikami systemu i niestandardową definicją zasobów w celu zidentyfikowania problemu.
Sprawdź, czy wszystkie składniki systemowe są uruchomione przy użyciu następującego polecenia:
kubectl get pods|grep vpa
Dane wyjściowe powinny zawierać trzy zasobniki: rekomendator, aktualizator i kontroler przyjęć, wszystkie ze stanem
Running
.Dla każdego zasobnika zwróconego w poprzednich danych wyjściowych sprawdź, czy składniki systemowe rejestrują wszelkie błędy przy użyciu następującego polecenia:
kubectl logs [pod name] | grep -e '^E[0-9]\{4\}'
Sprawdź, czy niestandardowa definicja zasobu została utworzona przy użyciu następującego polecenia:
kubectl get customresourcedefinition | grep verticalpodautoscalers
Następne kroki
Aby dowiedzieć się więcej na temat obiektu VPA, zobacz dokumentację interfejsu API pionowego automatycznego skalowania zasobników.
Azure Kubernetes Service