Gyakorlat – Az alkalmazás igény szerinti méretezése

Befejeződött

A Fruit Smoothies világszerte számos üzlettel és jelentős követői bázissal rendelkezik, a várt eredmény pedig az, hogy számos felhasználó fogja használni az értékelési webhelyet kedvenc smoothie-ízének véleményezésére. Az alkalmazás népszerűségének növekedésével szükség lesz az igényeknek megfelelő méretezésre. Gondoskodnia kell róla, hogy az alkalmazás az értékelések számának növekedése esetén is reagáljon.

Ebben a gyakorlatban a következőket fogja végrehajtani:

  • A podok horizontális felskálázási AKS-eszközének létrehozása
  • Terheléses teszt futtatása a podok horizontális felskálázási eszközének engedélyezésével
  • Az AKS-fürt automatikus skálázása

Diagram a fürt automatikus skálázójának és a pod automatikus skálázójának együttes működéséről az alkalmazás igényeinek való megfeleléshez.

A podok horizontális felskálázási eszközének létrehozása

A megnövekedett forgalom miatt a ratings-api tároló nem tud megbirkózni a beérkező kérelmek számával. A szűk keresztmetszet javításához több példányt is üzembe helyezhet a tárolóból.

A tárolópéldányok AKS-beli méretezéséhez két lehetőség közül választhatunk. Manuálisan növelheti az üzemelő példányban lévő replikák számát, vagy használhatja a podok horizontális felskálázási eszközét.

Mi a podok horizontális felskálázási eszköze (HPA)?

A horizontális felskálázási eszköz (HPA) vezérlője egy Kubernetes-beli vezérlőhurok, amellyel a Kubernetes-vezérlő felügyelője lekérdezheti a HorizontalPodAutoscaler definícióban megadott metrikák erőforrás-használatát. A HPA-vezérlő kiszámítja a definíciós fájlban megadott kívánt metrikaérték és az aktuálisan mért metrikaérték arányát. A HPA automatikusan fel- vagy leskálázza a podok számát a kiszámított érték alapján.

A HPA a CPU- és egyéb metrikák használatával lehetővé teszi az AKS számára, hogy észlelje az üzembe helyezett podok megnövekedett erőforrásigényét. A HPA ezt követően az igények teljesítéséhez további podokat ütemezhet a fürthöz. A HPA a kubectl autoscale parancs használatával konfigurálható, vagy megadhatja a HPA-objektumot egy YAML-fájlban.

  1. Hozzon létre egy ratings-api-hpa.yaml nevű fájlt az integrált szerkesztővel.

    code ratings-api-hpa.yaml
    
  2. Illessze a fájlba a következő szöveget.

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: ratings-api
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: ratings-api
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 30
    
  3. Tekintse át a fájlt a következő szempontok figyelembe vételével:

    • Méretezési cél. A méretezési cél a ratings-api üzemelő példánya.

    • Minimális és maximális replikák. Az üzembe helyezett replikák minimális és maximális száma.

    • Mutatókat. Az automatikus méretezés figyelt metrikája a 30%-ra beállított CPU-kihasználtság. Ha a kihasználtság meghaladja ezt a szintet, akkor a HPA további replikákat hoz létre.

  4. A fájl mentéshez nyomja le a Ctrl+S billentyűkombinációt. A szerkesztőt a Ctrl+Q billentyűkombinációval zárja be.

  5. Alkalmazza a konfigurációt az parancs kubectl apply futtatásával. Helyezze üzembe a HPA objektumot a ratingsapp névtérben.

    kubectl apply \
        --namespace ratingsapp \
        -f ratings-api-hpa.yaml
    

    A következőhöz hasonló kimenet fog megjelenni.

    horizontalpodautoscaler.autoscaling/ratings-api created
    

    Fontos

    A podok horizontális felskálázási eszközének működéséhez el kell távolítania minden explicit replikát a ratings-api környezetéből. Ne feledje, hogy a módosítások elvégzésekor újra üzembe kell helyeznie a környezetet.

Terheléses teszt futtatása a podok horizontális felskálázási eszközének engedélyezésével

A terheléses teszt létrehozásához a Docker Hubon elérhető, azch/artillery nevű, előre elkészített rendszerképet fogja használni. A rendszerkép egy artillery nevű eszközt tartalmaz, amely az API-ra irányuló adatforgalom küldésére szolgál. Az Azure Container Instances használatával tárolóként futtathatja a rendszerképet.

Ha tárolópéldányként fut, érdemes elkerülni, hogy leállás után ismét újrainduljon. Az újraindulás elkerülése érdekében használja a --restart-policy paramétert, és állítsa be a Never értéket.

  1. A Azure Cloud Shell tárolja az előoldali API terheléses teszt végpontját egy Bash-változóban, és cserélje le a helyére a bejövő forgalom gazdagépnevét, például <frontend hostname> https: / /frontend.13.68.177.68.nip.io.

    LOADTEST_API_ENDPOINT=https://<frontend hostname>/api/loadtest
    

    Figyeljük meg egy terheléses teszt futtatásával, hogy a HPA miképpen méretezi az üzemelő példányt.

  2. Futtassa a terhelési tesztet a következő parancs futtatásával, amely a teszt időtartamát 120 másodpercre állítja be, és másodpercenként legfeljebb 500 kérést szimulál.

    az container create \
        -g $RESOURCE_GROUP \
        -n loadtest \
        --cpu 4 \
        --memory 1 \
        --image azch/artillery \
        --restart-policy Never \
        --command-line "artillery quick -r 500 -d 120 $LOADTEST_API_ENDPOINT"
    

    Előfordulhat, hogy a parancsot többször kell lefuttatnia.

  3. Figyelje meg a podok horizontális felskálázási eszközének működését.

    kubectl get hpa \
      --namespace ratingsapp -w
    

    Néhány másodpercen belül láthatja, hogy a HPA több replikát helyez üzembe. A rendszer a terheléshez igazodva elvégzi a felméretezést 1-ről 10-re. A figyelés leállításhoz nyomja le a Ctrl+C billentyűkombinációt.

    NAME          REFERENCE                TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    ratings-api   Deployment/ratings-api   0%/30%     1         10        1          19m
    ratings-api   Deployment/ratings-api   46%/30%    1         10        1          20m
    ratings-api   Deployment/ratings-api   46%/30%    1         10        2          20m
    ratings-api   Deployment/ratings-api   120%/30%   1         10        2          21m
    ratings-api   Deployment/ratings-api   120%/30%   1         10        4          21m
    ratings-api   Deployment/ratings-api   93%/30%    1         10        4          22m
    ratings-api   Deployment/ratings-api   93%/30%    1         10        8          22m
    ratings-api   Deployment/ratings-api   93%/30%    1         10        10         22m
    ratings-api   Deployment/ratings-api   0%/30%     1         10        10         23m
    

Automatikus fürtméretezés

A HPA igény szerint elvégzi a felméretezést az új podokkal. Végül azonban a fürt erőforrásai elfogynak, és az ütemezett podok függő állapotba kerülnek.

Mi az automatikus fürtméretező?

Az automatikus fürtméretező azokat a podokat figyeli, amelyek az erőforrásokra vonatkozó megkötések miatt nem ütemezhetők a csomópontokon. A fürt ezután automatikusan megnöveli a fürt csomópontjainak számát.

Vezessünk be terhelést a fürtbe, hogy kikényszerítsük az automatikus skálázást. Ehhez a ratings-api üzemelő példányon belül mesterségesen cpu: "1000m"-re növeli a CPU request és limit erőforrását, majd újratelepíti a példányt. A podok így több erőforrást fognak kérni a fürtben, mint amennyi rendelkezésre áll. Ezután engedélyezheti az automatikus skálázást, és növelheti a podok futtatására rendelkezésre álló csomópontok számát.

  1. Szerkessze a(z) ratings-api-deployment.yaml nevű fájlt az integrált szerkesztővel.

    code ratings-api-deployment.yaml
    
  2. Módosítsa a tároló resources.requests és resources.limits értékét 1000m-re, ami egyetlen magot jelent. A szakasznak az alábbihoz kell hasonlítania.

    resources:
      requests: # minimum resources required
        cpu: 1000m
        memory: 64Mi
      limits: # maximum resources allocated
        cpu: 1000m
        memory: 256Mi
    
  3. A fájl mentéshez nyomja le a Ctrl+S billentyűkombinációt. A szerkesztőt a Ctrl+Q billentyűkombinációval zárja be.

  4. Alkalmazza a konfigurációt az parancs kubectl apply futtatásával. Helyezze üzembe az erőforrás frissítését a ratingsapp névtérben.

    kubectl apply \
        --namespace ratingsapp \
        -f ratings-api-deployment.yaml
    

    A következőhöz hasonló kimenet fog megjelenni.

    deployment.apps/ratings-api configured
    
  5. Tekintse át az újonnan bevezetett podokat. Kérdezze le a ratingsapp névtéren belül az app=ratings-api címkével ellátott podokat.

    kubectl get pods \
        --namespace ratingsapp \
        -l app=ratings-api -w
    

    Ekkor számos olyan podot láthat, amelyek a Pending állapotban maradtak, mert nincs elég kapacitás a fürtön az új podok ütemezéséhez.

    NAME                               READY   STATUS    RESTARTS   AGE
    ratings-api-7746bb6444-4k24p       0/1     Pending   0          5m42s
    ratings-api-7746bb6444-brkd8       0/1     Pending   0          5m42s
    ratings-api-7746bb6444-l7fdq       0/1     Pending   0          5m42s
    ratings-api-7746bb6444-nfbfd       0/1     Pending   0          5m42s
    ratings-api-7746bb6444-rmvb2       0/1     Pending   0          5m42s
    ratings-api-7cf598d48-7wmml        1/1     Running   0          35m
    ratings-api-7cf598d48-98mwd        1/1     Running   0          12m
    ratings-api-7cf598d48-clnbq        1/1     Running   0          11m
    ratings-api-7cf598d48-cmhk5        1/1     Running   0          10m
    ratings-api-7cf598d48-t6xtk        1/1     Running   0          10m
    ratings-api-7cf598d48-vs44s        1/1     Running   0          10m
    ratings-api-7cf598d48-xxhxs        1/1     Running   0          11m
    ratings-api-7cf598d48-z9klk        1/1     Running   0          10m
    ratings-mongodb-5c8f57ff58-k6qcd   1/1     Running   0          16d
    ratings-web-7bc649bccb-bwjfc       1/1     Running   0          99m
    ratings-web-7bc649bccb-gshn7       1/1     Running   0          99m
    

    A függő podok problémáját úgy oldhatja meg, hogy engedélyezi a fürtön az automatikus skálázást.

  6. Konfigurálja az automatikus fürtméretezőt. Elvileg a fürt kihasználtságától függően dinamikusan vesz fel és távolít el csomópontokat. Futtassa az aks update az parancsot az automatikus fürtméretozó engedélyezéséhez. Adjon meg egy minimum- és egy maximumértéket a csomópontok számánál. Az előzővel megegyező erőforráscsoportot használjon, például az aksworkshop nevűt.

    A következő példa a --min-count értéket 3-ra, a --max-count értéket pedig 5-re állítja.

    az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $AKS_CLUSTER_NAME  \
    --enable-cluster-autoscaler \
    --min-count 3 \
    --max-count 5
    

    Néhány percen belül a fürtöt konfigurálnia kell az automatikus fürtméretezőnek. Látni fogja a csomópontok számának növekedését.

  7. Ellenőrizze a csomópontok számának növekedését.

    kubectl get nodes -w
    

    Néhány percen belül látni fogja, hogy új csomópontok jelennek meg, és az állapot Ready állapotra módosul. A figyelés leállításhoz nyomja le a Ctrl+C billentyűkombinációt.

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-24503160-vmss000000   Ready    agent   50m   v1.15.7
    aks-nodepool1-24503160-vmss000001   Ready    agent   50m   v1.15.7
    aks-nodepool1-24503160-vmss000002   Ready    agent   50m   v1.15.7
    aks-nodepool1-24503160-vmss000003   Ready    agent   14s   v1.15.7
    aks-nodepool1-24503160-vmss000004   Ready    agent   21s   v1.15.7
    

Összefoglalás

Ebben a gyakorlatban létrehozott egy automatikus horizontális podméretozót, és egy terheléses tesztet futtatott a fürt podok horizontális felskálzálatára. Ezután a fürt automatikus méretezőjével megnövelte a fürt számítási kapacitását, és csomópontokat adott az AKS-fürthöz. Most már tudja, hogyan gondoskodhat arról, hogy a Fruit Smoothies AKS-környezete méretezhető legyen a felhasználói forgalom ingadozásaira reagálva.

Zárjuk le az eddig tanultakat.