Megosztás a következőn keresztül:


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 a az 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.

  1. 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"
    
  2. Helyezze üzembe a hamster.yaml függőleges pod automatikus méretezési példáját a kubectl 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.

  3. 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
    
  4. 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.

  5. Monitorozza a podokat a kubectl get paranccsal.

    kubectl get --watch pods -l app=hamster
    
  6. 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.

  7. 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: .

  1. 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"]
    
  2. 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.

  3. 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
    
  4. 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átott vpa-auto-deployment üzembe helyezés által szabályozott podok a következőhöz tartoznak VerticalPodAutoscaler: Az updateMode érték Recreate 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.

  5. Alkalmazza a jegyzékfájlt a fürtre a kubectl apply parancs használatával.

    kubectl create -f azure-vpa-auto.yaml
    
  6. 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
    
  7. 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
    
  8. 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 az lowerBound 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.

  1. 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 
    
  2. Helyezze üzembe a extra-recomender.yaml függőleges pod automatikus méretezési példáját a kubectl 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.

  3. 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, controlledResourcesaz 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ával RequestsAndLimits . Az alapértelmezett érték RequestsAndLimits. Ha ezt a lehetőséget használja, a RequestsAndLimits 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.

  4. Telepítse a hamster-extra-recomender.yaml példát a kubectl apply parancs használatával.

    kubectl apply -f hamster-extra-recommender.yaml
    
  5. Monitorozza a podokat a [kubectl get]kubectl-get paranccsal.

    kubectl get --watch pods -l app=hamster
    
  6. 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>
    
  7. 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.

  1. 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 állapotaRunning.

  2. 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\}'
    
  3. 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.