Automatische schaalaanpassing van verticale pods in Azure Kubernetes Service (AKS)
Dit artikel bevat een overzicht van VPA (Vertical Pod Autoscaler) in Azure Kubernetes Service (AKS), dat is gebaseerd op de open source Kubernetes-versie . Wanneer deze is geconfigureerd, worden resourceaanvragen en limieten voor containers per workload automatisch ingesteld op basis van het eerdere gebruik. VPA maakt CPU en geheugen vrij voor de andere pods en helpt effectief gebruik te maken van uw AKS-cluster.
Automatische schaalaanpassing van verticale pods biedt aanbevelingen voor resourcegebruik in de loop van de tijd. Als u plotselinge toenamen in resourcegebruik wilt beheren, gebruikt u de horizontale automatische schaalaanpassing van pods, waarmee het aantal podreplica's naar behoefte wordt geschaald.
Vergoedingen
Verticale automatische schaalaanpassing van pods biedt de volgende voordelen:
Het analyseert en past processor- en geheugenbronnen aan om uw toepassingen de juiste grootte te geven . VPA is niet alleen verantwoordelijk voor omhoog schalen, maar ook voor omlaag schalen op basis van het resourcegebruik in de loop van de tijd.
Een pod wordt verwijderd als deze de resourceaanvragen moet wijzigen als de schaalmodus is ingesteld op automatisch of opnieuw maken.
CPU- en geheugenbeperkingen instellen voor afzonderlijke containers door een resourcebeleid op te geven
Zorgt ervoor dat knooppunten over de juiste resources beschikken voor het plannen van pods
Configureerbare logboekregistratie van eventuele aanpassingen aan processor- of geheugenresources
Verbeter het gebruik van clusterresources en maak CPU en geheugen vrij voor andere pods.
Beperkingen
Automatische schaalaanpassing van verticale pods ondersteunt maximaal 1000 pods die zijn gekoppeld aan
VerticalPodAutoscaler
objecten per cluster.VPA raadt mogelijk meer resources aan dan beschikbaar is in het cluster. Hierdoor voorkomt u dat de pod wordt toegewezen aan een knooppunt en wordt uitgevoerd, omdat het knooppunt niet over voldoende resources beschikt. U kunt deze beperking oplossen door LimitRange in te stellen op de maximaal beschikbare resources per naamruimte, waardoor pods niet om meer resources vragen dan is opgegeven. Daarnaast kunt u maximaal toegestane resourceaan aanbevelingen per pod instellen in een
VerticalPodAutoscaler
object. Houd er rekening mee dat VPA een onvoldoende probleem met knooppuntresources niet volledig kan oplossen. Het limietbereik is vast, maar het resourcegebruik van het knooppunt wordt dynamisch gewijzigd.Het wordt afgeraden verticale automatische schaalaanpassing van pods te gebruiken met horizontale automatische schaalaanpassing van pods, die worden geschaald op basis van dezelfde metrische gegevens over CPU- en geheugengebruik.
VPA Recommender slaat maximaal acht dagen aan historische gegevens op.
VPA biedt geen ondersteuning voor op JVM gebaseerde workloads vanwege beperkte zichtbaarheid van het werkelijke geheugengebruik van de workload.
Het wordt niet aanbevolen of ondersteund om uw eigen implementatie van VPA uit te voeren naast deze beheerde implementatie van VPA. Het gebruik van een extra of aangepaste aanbevelingsfunctie wordt ondersteund.
AKS Windows-containers worden niet ondersteund.
Voordat u begint
Een AKS-cluster voert Kubernetes versie 1.24 en hoger uit.
De Azure CLI versie 2.52.0 of hoger is geïnstalleerd en geconfigureerd. Voer
az --version
uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.kubectl
moet zijn verbonden met het cluster dat u VPA wilt installeren.
Overzicht van VPA
API-object
De verticale schaalaanpassing van pods is een API-resource in de Kubernetes-groep voor automatische schaalaanpassing van API's. De ondersteunde versie is 0.11 en hoger en vindt u in de kubernetes-opslagplaats voor automatische schaalaanpassing.
Het VPA-object bestaat uit drie onderdelen:
Aanbeveling: het bewaakt het huidige en eerdere resourceverbruik en biedt op basis daarvan aanbevolen waarden voor de CPU- en geheugenaanvragen/-limieten van de containers. De aanbevelingsfunctie bewaakt de metrische geschiedenis, OOM-gebeurtenissen (Out of Memory) en de VPA-implementatiespecificatie en stelt eerlijke aanvragen voor. Door een juiste configuratie van resourceaanvragen en limieten op te geven, worden de limieten verhoogd en verlaagd.
Updater : er wordt gecontroleerd welke van de beheerde pods de juiste resources hebben ingesteld en, zo niet, worden ze gedood zodat ze opnieuw kunnen worden gemaakt door hun controllers met de bijgewerkte aanvragen.
VPA-toegangscontroller : hiermee worden de juiste resourceaanvragen ingesteld op nieuwe pods (gemaakt of opnieuw gemaakt door hun controller vanwege de activiteit van de Updater).
VPA-toegangscontroller
VPA-toegangscontroller is een binair bestand dat zich registreert als een Mutating Admission Webhook. Wanneer elke pod is gemaakt, krijgt deze een aanvraag van de API-server en wordt geëvalueerd of er een overeenkomende VPA-configuratie is, of een overeenkomende pod wordt gevonden en de huidige aanbeveling wordt gebruikt om resourceaanvragen in te stellen in de pod.
Een zelfstandige taak wordt uitgevoerd buiten de VPA-toegangscontroller, genaamd overlay-vpa-cert-webhook-check
. Het overlay-vpa-cert-webhook-check
wordt gebruikt om de certificaten te maken en te vernieuwen en de VPA-toegangscontroller te registreren als een MutatingWebhookConfiguration
.
Voor hoge beschikbaarheid ondersteunt AKS twee toegangscontrollerreplica's.
VPA-objectbewerkingsmodi
Er wordt een verticale resource voor automatische schaalaanpassing van pods ingevoegd voor elke controller waarvoor automatisch resourcevereisten moeten worden berekend. Dit is meestal een implementatie. Er zijn vier modi waarin VPN's werken:
Auto
- VPA wijst resourceaanvragen toe tijdens het maken van pods en werkt bestaande pods bij met behulp van het aanbevolen updatemechanisme.Auto
Is momenteel gelijk aanRecreate
en is ook de standaardmodus. Zodra de update van podaanvragen opnieuw is opgestart ('in-place') is beschikbaar, kan deze worden gebruikt als het voorkeursupdatemechanisme door deAuto
modus. Wanneer u de modus gebruiktRecreate
, verwijdert VPA een pod als deze de resourceaanvragen moet wijzigen. Dit kan ertoe leiden dat de pods allemaal tegelijk opnieuw worden opgestart, waardoor toepassingsconsistentie ontstaat. U kunt herstarts beperken en consistentie in deze situatie behouden met behulp van een PodDisruptionBudget.Recreate
- VPA wijst resourceaanvragen toe tijdens het maken van pods en werkt bestaande pods bij door ze te verwijderen wanneer de aangevraagde resources aanzienlijk verschillen van de nieuwe aanbeveling (rekening houden met het budget voor podonderbreking, indien gedefinieerd). Deze modus moet zelden worden gebruikt, alleen als u ervoor moet zorgen dat de pods opnieuw worden opgestart wanneer de resourceaanvraag wordt gewijzigd. Anders heeft de modus deAuto
voorkeur, die kan profiteren van updates zonder opnieuw opstarten zodra deze beschikbaar zijn.Initial
- VPA wijst alleen resourceaanvragen toe tijdens het maken van de pod en wijzigt daarna nooit meer.Off
- VPA wijzigt niet automatisch de resourcevereisten van de pods. De aanbevelingen worden berekend en kunnen worden geïnspecteerd in het VPA-object.
Implementatiepatroon tijdens het ontwikkelen van toepassingen
Een algemeen implementatiepatroon dat voor u wordt aanbevolen als u niet bekend bent met VPA, is door de volgende stappen uit te voeren tijdens het ontwikkelen van toepassingen om de unieke kenmerken van het resourcegebruik te identificeren, VPA te testen om te controleren of deze goed werkt en naast andere Kubernetes-onderdelen te testen om het resourcegebruik van het cluster te optimaliseren.
Stel UpdateMode = 'Uit' in uw productiecluster in en voer VPA uit in de aanbevelingsmodus, zodat u VPA kunt testen en vertrouwd kunt raken met VPA. UpdateMode = "Uit" kan voorkomen dat er een onjuiste configuratie wordt ingevoerd die een storing kan veroorzaken.
Stel eerst waarneembaarheid vast door de telemetrie van het werkelijke resourcegebruik gedurende een bepaalde periode te verzamelen. Dit helpt u inzicht te krijgen in het gedrag en de tekenen van symptomen of problemen van container- en podbronnen die worden beïnvloed door de workloads die erop worden uitgevoerd.
Maak kennis met de bewakingsgegevens om inzicht te krijgen in de prestatiekenmerken. Stel op basis van dit inzicht de gewenste aanvragen/limieten in en vervolgens in de volgende implementatie of upgrade
Stel
updateMode
de waarde in opAuto
,Recreate
ofInitial
afhankelijk van uw vereisten.
VPA in een cluster implementeren, upgraden of uitschakelen
In deze sectie implementeert, upgradet of schakelt u de automatische schaalaanpassing van verticale pods in uw cluster uit.
Als u VPA wilt inschakelen op een nieuw cluster, gebruikt
--enable-vpa
u de parameter met de opdracht az aks create .az aks create -n myAKSCluster -g myResourceGroup --enable-vpa
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Als u VPA op een bestaand cluster wilt inschakelen, gebruikt u de
--enable-vpa
opdracht [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update] als u VPA wilt inschakelen.az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Als u VPA op een bestaand cluster wilt uitschakelen, gebruikt u de
--disable-vpa
opdracht [https://learn.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest#az-aks-update] om VPA uit te schakelen.az aks update -n myAKSCluster -g myResourceGroup --disable-vpa
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Gebruik de opdracht kubectl get om te controleren of de pods voor automatische schaalaanpassing voor verticale pods zijn gemaakt.
kubectl get pods -n kube-system
De uitvoer van de opdracht bevat de volgende resultaten die specifiek zijn voor de VPA-pods. De pods moeten een actieve status weergeven.
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
De installatie van de automatische schaalaanpassing van verticale pods testen
Met de volgende stappen maakt u een implementatie met twee pods, elk met één container die 100 millicores aanvraagt en probeert iets meer dan 500 millicores te gebruiken. Er wordt ook een VPA-configuratie gemaakt, die verwijst naar de implementatie. De VPA ziet het gedrag van de pods en na ongeveer vijf minuten worden ze bijgewerkt met een hogere CPU-aanvraag.
Maak een bestand met de naam
hamster.yaml
en kopieer dit in het volgende manifest van het voorbeeld van de verticale pod automatisch schalen vanuit de GitHub-opslagplaats kubernetes/autoscaler .Implementeer het voorbeeld van automatische
hamster.yaml
schaalaanpassing van verticale pods met behulp van de opdracht kubectl apply en geef de naam van uw YAML-manifest op:kubectl apply -f hamster.yaml
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Voer de volgende kubectl get-opdracht uit om de pods op te halen uit de voorbeeldtoepassing voor het voorbeeld van de notebook:
kubectl get pods -l app=hamster
De voorbeelduitvoer ziet er ongeveer als volgt uit:
hamster-78f9dcdd4c-hf7gk 1/1 Running 0 24s hamster-78f9dcdd4c-j9mc7 1/1 Running 0 24s
Gebruik de opdracht kubectl describe op een van de pods om de CPU- en geheugenreservering weer te geven. Vervang 'exampleID' door een van de pod-id's die zijn geretourneerd in de uitvoer van de vorige stap.
kubectl describe pod hamster-exampleID
De voorbeelduitvoer is een fragment van de informatie over het cluster:
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>
De pod heeft in dit voorbeeld 100 millicpu en 50 Mibibytes geheugen gereserveerd. Voor deze voorbeeldtoepassing heeft de pod minder dan 100 millicpu nodig om uit te voeren, zodat er geen CPU-capaciteit beschikbaar is. De pods reserveren ook veel minder geheugen dan nodig is. De implementatie van de verticale pod autoscaler vpa-recommender analyseert de pods die als host fungeren voor de databasetoepassing om te zien of de CPU- en geheugenvereisten geschikt zijn. Als er aanpassingen nodig zijn, start de vpa-updater de pods opnieuw met bijgewerkte waarden.
Wacht totdat de vpa-updater een nieuwe vm-updater start. Dit duurt enkele minuten. U kunt de pods bewaken met behulp van de opdracht kubectl get .
kubectl get --watch pods -l app=hamster
Wanneer een nieuwe cmdlet-pod wordt gestart, beschrijft u de pod waarop de kubectl-opdracht wordt uitgevoerd en bekijkt u de bijgewerkte CPU- en geheugenreserveringen.
kubectl describe pod hamster-<exampleID>
De voorbeelduitvoer is een fragment van de informatie die de pod beschrijft:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
In de vorige uitvoer ziet u dat de CPU-reservering is verhoogd tot 587 millicpu, wat meer dan vijf keer de oorspronkelijke waarde is. Het geheugen steeg tot 262.144 kilobytes, wat ongeveer 250 Mibibytes is, of vijf keer de oorspronkelijke waarde. Deze pod is onderresourced en de automatische schaalaanpassing van verticale pods corrigeerde de schatting met een veel geschiktere waarde.
Als u bijgewerkte aanbevelingen van VPA wilt weergeven, voert u de opdracht kubectl describe uit om de resourcegegevens van de cmdlet-vpa te beschrijven.
kubectl describe vpa/hamster-vpa
De voorbeelduitvoer is een fragment van de informatie over het resourcegebruik:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Aanvragen voor automatische schaalaanpassing van pods instellen
Bij automatisch schalen van verticale pods wordt het VerticalPodAutoscaler
object gebruikt om automatisch resourceaanvragen in te stellen op pods wanneer de updateMode is ingesteld op een auto. U kunt een andere waarde instellen, afhankelijk van uw vereisten en testen. In dit voorbeeld is updateMode ingesteld op Recreate
.
Schakel VPA in voor uw cluster door de volgende opdracht uit te voeren. Vervang de clusternaam
myAKSCluster
door de naam van uw AKS-cluster en vervang doormyResourceGroup
de naam van de resourcegroep waarin het cluster wordt gehost.az aks update -n myAKSCluster -g myResourceGroup --enable-vpa
Maak een bestand met de naam
azure-autodeploy.yaml
en kopieer dit in het volgende manifest.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"]
In dit manifest wordt een implementatie met twee pods beschreven. Elke pod heeft één container die 100 milliCPU en 50 MiB aan geheugen aanvraagt.
Maak de pod met de opdracht kubectl create , zoals wordt weergegeven in het volgende voorbeeld:
kubectl create -f azure-autodeploy.yaml
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Voer de volgende kubectl get-opdracht uit om de pods op te halen:
kubectl get pods
De uitvoer lijkt op het volgende voorbeeld met de naam en status van de pods:
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
Maak een bestand met de naam
azure-vpa-auto.yaml
en kopieer dit in het volgende manifest dat een beschrijving geeft van:VerticalPodAutoscaler
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
targetRef.name
waarde geeft aan dat een pod die wordt beheerd door een implementatie met de naamvpa-auto-deployment
behoort totVerticalPodAutoscaler
. DeupdateMode
waarde van betekent dat de controller voor automatische schaalaanpassing vanRecreate
verticale pods een pod kan verwijderen, de CPU- en geheugenaanvragen kan aanpassen en vervolgens een nieuwe pod kan maken.Pas het manifest toe op het cluster met behulp van de opdracht kubectl apply :
kubectl create -f azure-vpa-auto.yaml
Wacht enkele minuten en bekijk de actieve pods opnieuw door de volgende kubectl get-opdracht uit te voeren:
kubectl get pods
De uitvoer lijkt op het volgende voorbeeld met de podnamen zijn gewijzigd en de status van de pods:
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
Krijg gedetailleerde informatie over een van uw actieve pods met behulp van de opdracht Kubectl get . Vervang
podName
door de naam van een van uw pods die u in de vorige stap hebt opgehaald.kubectl get pod podName --output yaml
De uitvoer lijkt op het volgende voorbeeld, waarin wordt weergegeven dat de controller voor automatische schaalaanpassing van verticale pods de geheugenaanvraag heeft verhoogd naar 262144k en cpu-aanvraag tot 25 milliCPU.
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
Gebruik de opdracht kubectl get om gedetailleerde informatie te krijgen over de automatische schaalaanpassing van verticale pods en de aanbevelingen voor CPU en geheugen:
kubectl get vpa vpa-auto --output yaml
De uitvoer lijkt op het volgende voorbeeld:
recommendation: containerRecommendations: - containerName: mycontainer lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 230m memory: 262144k
In de resultaten ziet u dat het
target
kenmerk aangeeft dat de container optimaal moet worden uitgevoerd. Het is niet nodig om de CPU of het geheugendoel te wijzigen. Uw resultaten kunnen variëren waar de aanbeveling voor de doel-CPU en het geheugen hoger is.De verticale schaalaanpassing voor pods gebruikt de
lowerBound
enupperBound
kenmerken om te bepalen of een pod moet worden verwijderd en vervangen door een nieuwe pod. Als een pod aanvragen heeft die kleiner zijn dan de ondergrens of groter dan de bovengrens, verwijdert de verticale schaalaanpassing voor pods de pod en vervangt deze door een pod die voldoet aan het doelkenmerk.
Extra aanbeveling voor automatische schaalaanpassing van verticale pods
In de VPA is een van de kernonderdelen de Aanbevelingsfunctie. Het biedt aanbevelingen voor resourcegebruik op basis van realtime resourceverbruik. AKS implementeert een aanbevelingsfunctie wanneer een cluster VPA inschakelt. U kunt een aangepaste aanbevelingsfunctie of een extra aanbeveling implementeren met dezelfde installatiekopieën als de standaardinstallatiekopieën. Het voordeel van een aangepaste aanbevelingsfunctie is dat u uw aanbevelingslogica kunt aanpassen. Met een extra aanbeveling kunt u VPN's partitioneren naar meerdere aanbevelers als er veel VPA-objecten zijn.
Het volgende voorbeeld is een extra aanbeveling die u toepast op uw bestaande AKS-cluster. Vervolgens configureert u het VPA-object voor het gebruik van de extra aanbeveling.
Maak een bestand met de naam
extra_recommender.yaml
en kopieer dit in het volgende manifest: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
Implementeer het
extra-recomender.yaml
voorbeeld van automatische schaalaanpassing van verticale pods met behulp van de opdracht kubectl apply en geef de naam van uw YAML-manifest op.kubectl apply -f extra-recommender.yaml
Na enkele minuten is de opdracht voltooid en retourneert deze informatie over het cluster in JSON-indeling.
Maak een bestand met de naam
hamnster_extra_recommender.yaml
en kopieer dit in het volgende manifest: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"
Als
memory
dit niet is opgegeven,controlledResources
reageert de aanbevelingsfunctie niet op OOM-gebeurtenissen. In dit geval stelt u alleen DE CPU incontrolledValues
.controlledValues
hiermee kunt u kiezen of u de resourceaanvragen van de container op optie wilt bijwerken, of zowel resourceaanvragenRequestsOnly
als limieten met behulp van deRequestsAndLimits
optie. De standaardwaarde isRequestsAndLimits
. Als u deRequestsAndLimits
optie gebruikt, worden aanvragen berekend op basis van het werkelijke gebruik en worden limieten berekend op basis van de aanvraag- en limietverhouding van de huidige pod.Als u bijvoorbeeld begint met een pod die 2 CPU's en limieten aanvraagt tot 4 CPU's, stelt VPA altijd de limiet in op twee keer zoveel als aanvragen. Hetzelfde principe geldt voor geheugen. Wanneer u de
RequestsAndLimits
modus gebruikt, kan deze fungeren als blauwdruk voor uw eerste aanvraag en limieten voor toepassingsresources.
U kunt het VPA-object vereenvoudigen met behulp van de automodus en aanbevelingen voor computing voor zowel CPU als geheugen.
Implementeer het
hamster_extra-recomender.yaml
voorbeeld met behulp van de opdracht kubectl apply en geef de naam van uw YAML-manifest op.kubectl apply -f hamster_customized_recommender.yaml
Wacht totdat de vpa-updater een nieuwe vm-updater start. Dit duurt enkele minuten. U kunt de pods bewaken met behulp van de opdracht kubectl get .
kubectl get --watch pods -l app=hamster
Wanneer een nieuwe cmdlet-pod wordt gestart, beschrijft u de pod waarop de kubectl-opdracht wordt uitgevoerd en bekijkt u de bijgewerkte CPU- en geheugenreserveringen.
kubectl describe pod hamster-<exampleID>
De voorbeelduitvoer is een fragment van de informatie die de pod beschrijft:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Als u bijgewerkte aanbevelingen van VPA wilt weergeven, voert u de opdracht kubectl describe uit om de resourcegegevens van de cmdlet-vpa te beschrijven.
kubectl describe vpa/hamster-vpa
De voorbeelduitvoer is een fragment van de informatie over het resourcegebruik:
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
Problemen oplossen
Voer de volgende stappen uit om problemen met een VPA-installatie vast te stellen.
Controleer of alle systeemonderdelen worden uitgevoerd met behulp van de volgende opdracht:
kubectl --namespace=kube-system get pods|grep vpa
De uitvoer moet drie pods bevatten: aanbeveelaar, updater en toegangscontroller allemaal met de status met een status van Running
.
Controleer of de systeemonderdelen fouten registreren. Voer de volgende opdracht uit voor elk van de pods die door de vorige opdracht worden geretourneerd:
kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
Controleer of de definitie van de aangepaste resource is gemaakt door de volgende opdracht uit te voeren:
kubectl get customresourcedefinition | grep verticalpodautoscalers
Volgende stappen
In dit artikel hebt u gezien hoe u het resourcegebruik, zoals CPU en geheugen, van clusterknooppunten automatisch kunt schalen om te voldoen aan de toepassingsvereisten.
U kunt ook de horizontale automatische schaalaanpassing van pods gebruiken om het aantal pods waarop uw toepassing wordt uitgevoerd, automatisch aan te passen. Zie Toepassingen schalen in AKS voor stappen voor het gebruik van de horizontale automatische schaalaanpassing van pods.
Zie de [API-verwijzing] voor verticale pods voor meer informatie over de definities voor gerelateerde VPA-objecten.