A függőleges podok automatikus skálázási funkciójának használata az Azure Kubernetes Service-ben (AKS)
Ez a cikk bemutatja, hogyan használhatja a függőleges pod automatikus skálázási (VPA) funkcióját az Azure Kubernetes Service (AKS) fürtön. A VPA automatikusan módosítja a podok processzor- és memóriakérelmeit a számítási feladatok használati mintáinak megfelelően. Ez a funkció segít optimalizálni az alkalmazások teljesítményét, és csökkenteni a számítási feladatok AKS-ben való futtatásának költségeit.
További információkért tekintse meg a Függőleges pod automatikus méretezési funkciójának áttekintését.
Mielőtt elkezdené
Ha már rendelkezik AKS-fürtel, győződjön meg arról, hogy a Kubernetes 1.24-es vagy újabb verzióját futtatja.
Telepítenie és konfigurálnia kell az Azure CLI 2.52.0-s vagy újabb verzióját. A verzió azonosításához futtassa a következőt:
az --version
. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.Ha egy meglévő fürtön engedélyezi a VPA-t, győződjön meg arról, hogy
kubectl
telepítve van és konfigurálva van az AKS-fürthöz való csatlakozáshoz aaz aks get-credentials
parancs használatával.az aks get-credentials --name <cluster-name> --resource-group <resource-group-name>
A függőleges podok automatikus skálázási skálázásának üzembe helyezése új fürtön
Hozzon létre egy új AKS-fürtöt, amelyen engedélyezve van a VPA a
az aks create
jelölővel ellátott--enable-vpa
paranccsal.az aks create --name <cluster-name> --resource-group <resource-group-name> --enable-vpa --generate-ssh-keys
Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.
Meglévő fürt frissítése a függőleges pod automatikus skálázási funkciójának használatára
Frissítsen egy meglévő fürtöt a VPA használatára a
az aks update
jelölővel ellátott--enable-vpa
paranccsal.az aks update --name <cluster-name> --resource-group <resource-group-name> --enable-vpa
Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.
A függőleges pod automatikus skálázásának letiltása meglévő fürtön
Tiltsa le a VPA-t egy meglévő fürtön a
az aks update
jelölővel ellátott--disable-vpa
paranccsal.az aks update --name <cluster-name> --resource-group <resource-group-name> --disable-vpa
Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.
Függőleges pod automatikus skálázási telepítésének tesztelése
Az alábbi példában két podot tartalmazó üzembe helyezést hozunk létre, amelyek mindegyike egyetlen tárolót futtat, amely 100 millicore-t kér le, és valamivel 500 millicore-osnál nagyobb értékeket próbál használni. Létrehozunk egy VPA-konfigurációt is, amely az üzembe helyezésre mutat. A VPA megfigyeli a podok viselkedését, és körülbelül öt perc elteltével frissíti a podokat, hogy 500 millicore-ot kérjen.
Hozzon létre egy fájlt,
hamster.yaml
és másolja a függőleges pod automatikus skálázási példájának alábbi jegyzékfájlját a Kubernetes/Autoscaler GitHub-adattárból: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"
Helyezze üzembe a
hamster.yaml
függőleges pod automatikus méretezési példáját akubectl apply
paranccsal.kubectl apply -f hamster.yaml
Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.
Tekintse meg a futó podokat a
kubectl get
paranccsal.kubectl get pods -l app=hamster
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
hamster-78f9dcdd4c-hf7gk 1/1 Running 0 24s hamster-78f9dcdd4c-j9mc7 1/1 Running 0 24s
A parancs használatával megtekintheti az egyik pod cpu- és memóriafoglalásait
kubectl describe
. Győződjön meg arról, hogy az előző lépés kimenetében visszaadott podazonosítók egyikére cseréli a műveletet<example-pod>
.kubectl describe pod hamster-<example-pod>
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
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>
A podban 100 millicpu és 50 Mibibytes memória van fenntartva ebben a példában. Ebben a mintaalkalmazásban a pod futtatásához kevesebb mint 100 millicpu szükséges, így nincs elérhető processzorkapacitás. A podok a szükségesnél kevesebb memóriát is fenntartanak. A függőleges pod automatikus skálázási vpa-recommender üzembe helyezése elemzi a hörcsögalkalmazást üzemeltető podokat, hogy megállapítsa, megfelelőek-e a processzor- és memóriakövetelmények. Ha kiigazításra van szükség, a vpa-updater újraindítja a podokat frissített értékekkel.
Monitorozza a podokat a
kubectl get
paranccsal.kubectl get --watch pods -l app=hamster
Az új hörcsög pod indításakor a parancs használatával
kubectl describe
megtekintheti a frissített CPU- és memóriafoglalásokat. Győződjön meg arról, hogy az előző lépés kimenetében visszaadott podazonosítók egyikére cseréli a műveletet<example-pod>
.kubectl describe pod hamster-<example-pod>
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Az előző kimenetben látható, hogy a CPU-foglalás 587 millicpu-ra nőtt, ami az eredeti érték több mint ötszöröse. A memória 262 144 kilobájtra nőtt, ami körülbelül 250 Mibibytes, vagyis az eredeti érték ötszöröse. Ez a pod erőforrás-alul volt, és a Függőleges pod automatikus skálázása sokkal megfelelőbb értékkel javította a becslést.
Tekintse meg a VPA frissített ajánlásait a
kubectl describe
parancs használatával a hörcsög-vpa erőforrás-információk leírásához.kubectl describe vpa/hamster-vpa
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
Függőleges pod automatikus skálázási kéréseinek beállítása
Az VerticalPodAutoscaler
objektum automatikusan beállítja az erőforrás-kérelmeket a podokon a következővel updateMode
Auto
: . A követelményektől és a teszteléstől függően más értéket is beállíthat. Ebben a példában létrehozunk és tesztelünk egy üzembehelyezési jegyzékfájlt két podtal, amelyek mindegyike egy tárolót futtat, amely 100 milliCPU-t és 50 MiB memóriát kér le, és a következőre állítja be a updateMode
következőt Recreate
: .
Hozzon létre egy fájlt,
azure-autodeploy.yaml
és másolja a következő jegyzékbe: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"]
Hozza létre a podot a
kubectl create
paranccsal.kubectl create -f azure-autodeploy.yaml
Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.
Tekintse meg a futó podokat a
kubectl get
paranccsal.kubectl get pods
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
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
Hozzon létre egy fájlt,
azure-vpa-auto.yaml
és másolja a következő jegyzékbe: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"
Az
targetRef.name
érték azt határozza meg, hogy a névvel ellátottvpa-auto-deployment
üzembe helyezés által szabályozott podok a következőhöz tartoznakVerticalPodAutoscaler
: AzupdateMode
értékRecreate
azt jelenti, hogy a függőleges pod automatikus skálázási vezérlője törölheti a podokat, módosíthatja a PROCESSZOR- és memóriakéréseket, majd létrehozhat egy új podot.Alkalmazza a jegyzékfájlt a fürtre a
kubectl apply
parancs használatával.kubectl create -f azure-vpa-auto.yaml
Várjon néhány percet, majd tekintse meg a futó podokat a
kubectl get
parancs használatával.kubectl get pods
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
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
A parancs használatával
kubectl get
részletes információkat kaphat az egyik futó podról. Ügyeljen arra, hogy az előző kimenet egyik podjának nevére cserélje le a helyére<pod-name>
.kubectl get pod <pod-name> --output yaml
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie, amely azt mutatja, hogy a VPA-vezérlő 262144k-ra növelte a memóriakérelmet, a CPU-kérést pedig 25 milliCPU-ra:
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
A parancs használatával
kubectl get
részletes információkat kaphat a függőleges pod automatikus skálázásáról, valamint a processzorra és a memóriára vonatkozó javaslatairól.kubectl get vpa vpa-auto --output yaml
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
recommendation: containerRecommendations: - containerName: mycontainer lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k uncappedTarget: cpu: 25m memory: 262144k upperBound: cpu: 230m memory: 262144k
Ebben a példában az
target
attribútum eredményei azt adják meg, hogy nem kell módosítania a tároló processzor- vagy memóriacélját az optimális futtatáshoz. Az eredmények azonban az alkalmazástól és az erőforrás-kihasználtságtól függően változhatnak.A Függőleges pod automatikus skálázása az és
upperBound
azlowerBound
attribútumok használatával dönti el, hogy töröl-e egy podot, és lecseréli-e egy új podra. Ha egy pod kérései kisebbek, mint az alsó vagy nagyobb, mint a felső határ, a függőleges pod automatikus skálázója törli a podot, és lecseréli egy podra, amely megfelel a célattribútumnak.
Extra ajánló a függőleges pod automatikus méretezéséhez
Az ajánló a valós idejű erőforrás-használaton alapuló erőforrás-használatra vonatkozó javaslatokat nyújt. Az AKS akkor helyez üzembe egy ajánlót, ha egy fürt engedélyezi a VPA-t. Testre szabott ajánlót vagy egy további ajánlót is üzembe helyezhet ugyanazzal a képpel, mint az alapértelmezett. A testre szabott ajánló előnye, hogy testre szabhatja a javaslatlogikát. Egy további ajánlóval particionálhatja a VPA-kat a különböző ajánlók használatára.
Az alábbi példában létrehozunk egy extra ajánlót, alkalmazunk egy meglévő AKS-tárolóra, és konfiguráljuk a VPA objektumot az extra ajánló használatára.
Hozzon létre egy fájlt,
extra_recommender.yaml
és másolja a következő jegyzékbe: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
Helyezze üzembe a
extra-recomender.yaml
függőleges pod automatikus méretezési példáját akubectl apply
paranccsal.kubectl apply -f extra-recommender.yaml
Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.
Hozzon létre egy fájlt,
hamster-extra-recommender.yaml
és másolja a következő jegyzékbe: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"
Ha
memory
nincs megadva,controlledResources
az ajánló nem válaszol az OOM-eseményekre. Ebben a példában csak a processzort állítjuk be.controlledValues
controlledValues
Lehetővé teszi a tároló erőforrás-kéréseinek frissítését aRequestsOnly
beállítással, vagy az erőforrás-kérelmek és a korlátok használatávalRequestsAndLimits
. Az alapértelmezett értékRequestsAndLimits
. Ha ezt a lehetőséget használja, aRequestsAndLimits
kérelmek kiszámítása a tényleges használat alapján történik, a korlátok pedig az aktuális pod kérési és korlátaránya alapján lesznek kiszámítva.Ha például egy 2 CPU-t és 4 CPU-t kérő podot kezd, a VPA mindig a kérések kétszeresére állítja be a korlátot. Ugyanez az elv vonatkozik a memóriára is. Ha a
RequestsAndLimits
módot használja, az tervként szolgálhat az alkalmazás kezdeti erőforrás-kérelmeihez és korlátaihoz.A VPA-objektumot a processzorra és a memóriára vonatkozó üzemmód- és számítási javaslatok használatával
Auto
egyszerűsítheti.Telepítse a
hamster-extra-recomender.yaml
példát akubectl apply
parancs használatával.kubectl apply -f hamster-extra-recommender.yaml
Monitorozza a podokat a
[kubectl get
]kubectl-get paranccsal.kubectl get --watch pods -l app=hamster
Az új hörcsög pod indításakor tekintse meg a frissített CPU- és memóriafoglalásokat a
kubectl describe
paranccsal. Győződjön meg arról, hogy az egyik podazonosítóra cseréli a helyére<example-pod>
.kubectl describe pod hamster-<example-pod>
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
State: Running Started: Wed, 28 Sep 2022 15:09:51 -0400 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k Environment: <none>
A parancs használatával megtekintheti a VPA frissített ajánlásait
kubectl describe
.kubectl describe vpa/hamster-vpa
A kimenetnek a következő példakimenethez hasonlóan kell kinéznie:
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
A függőleges podok automatikus skálázásának hibaelhárítása
Ha problémákat tapasztal a függőleges pod automatikus skálázásával kapcsolatban, a probléma azonosításához elháríthatja a rendszerösszetevőket és az egyéni erőforrásdefiníciót.
Ellenőrizze, hogy az összes rendszerösszetevő fut-e a következő paranccsal:
kubectl --namespace=kube-system get pods|grep vpa
A kimenetnek három podot kell felsorolnia: az ajánlót, a frissítőt és a beléptetőt, mindegyik állapota
Running
.Az előző kimenetben visszaadott podok mindegyikéhez ellenőrizze, hogy a rendszerösszetevők az alábbi paranccsal naplóznak-e hibákat:
kubectl --namespace=kube-system logs [pod name] | grep -e '^E[0-9]\{4\}'
Ellenőrizze, hogy az egyéni erőforrásdefiníció a következő paranccsal lett-e létrehozva:
kubectl get customresourcedefinition | grep verticalpodautoscalers
Következő lépések
A VPA-objektummal kapcsolatos további információkért tekintse meg a Függőleges pod automatikus skálázási API-referenciáját.
Azure Kubernetes Service