Övning – Konfigurera skalningsuppsättningsnodpooler för VM med oanvänd kapacitet med autoskalning av kluster i ett AKS-kluster

Slutförd

Med skalbara användarnodpooler kan du komma åt outnyttjad Azure-beräkningskapacitet till lägre priser med stöd för scenarier med högpresterande databehandling.

I föregående övning skapade du en standardpool för användarnoder, använde autoskalning av kluster för att hantera skapande av noder och skalade antalet noder manuellt.

Nästa steg är att lägga till en användarnodpool för oanvänd kapacitet med automatisk skalning för att minska klustrets driftskostnader. Klusteranvändningen varierar beroende på vilka resurser som behövs och är inte förutsägbara, så du konfigurerar regler för att samla in toppar och dalar. Arbetsbelastningen distribueras med nodtillhörighet aktiverad så att podden schemaläggs på noder i nodpoolen för oanvänd kapacitet.

Skapa en skalningsuppsättningsnodpool för VM med oanvänd kapacitet

Du måste skapa en separat nodpool som stöder batchbearbetningstjänsten. Den här nodpoolen är en skalningsuppsättningsnodpool för VM med oanvänd kapacitet som använder avlägsnandeprincipen Ta bort och ett högsta pris för oanvänd kapacitet på -1.

  1. Kör samma az aks nodepool add-kommando som i föregående övning för att lägga till en ny skalningsuppsättningsnodpool för VM med oanvänd kapacitet i klustret. Du måste ändra namnet på nodpoolen och lägga till några fler parametrar för att identifiera den här nodpoolen som en skalningsuppsättningsnodpool.

    Ange följande värden för att ange nodpoolens parametrar:

    • Namn: batchprocpl2
    • Prioritet: Spot
    • Avlägsnandeprincip: Delete
    • Maximalt pris för oanvänd kapacitet: -1

    Kör följande kommando när du vill skapa skalningsuppsättningsnodpoolen för VM med oanvänd kapacitet:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2 \
        --enable-cluster-autoscaler \
        --max-count 3 \
        --min-count 1 \
        --priority Spot \
        --eviction-policy Delete \
        --spot-max-price -1 \
        --node-vm-size Standard_DS2_v2 \
        --no-wait
    

    Tänk på att den här begäran kan misslyckas på grund av kapacitetsbegränsningar på den plats som du har valt.

  2. Kör kommandot az aks nodepool show om du vill visa information om den nya skalningsuppsättningsnodpoolen för VM med oanvänd kapacitet för batchbearbetningstjänsten:

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl2
    

    Här är ett exempel på utdata från kommandot.

    {
    "agentPoolType": "VirtualMachineScaleSets",
    "availabilityZones": null,
    "count": 3,
    "enableAutoScaling": true,
    "enableNodePublicIp": false,
    "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl2",
    "maxCount": 3,
    "maxPods": 110,
    "minCount": 1,
    "mode": "User",
    "name": "batchprocpl2",
    "nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
    "nodeLabels": {
        "kubernetes.azure.com/scalesetpriority": "spot"
    },
    "nodeTaints": [
        "kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
    ],
    "orchestratorVersion": "1.17.9",
    "osDiskSizeGb": 128,
    "osType": "Linux",
    "provisioningState": "Creating",
    "proximityPlacementGroupId": null,
    "resourceGroup": "akscostsavinggrp",
    "scaleSetEvictionPolicy": "Delete",
    "scaleSetPriority": "Spot",
    "spotMaxPrice": -1.0,
    "tags": null,
    "type": "Microsoft.ContainerService/managedClusters/agentPools",
    "upgradeSettings": {
        "maxSurge": null
    },
    "vmSize": "Standard_DS2_v2",
    "vnetSubnetId": null
    }
    

    Det finns några värden i det här resultatet som är annorlunda jämfört med det du har sett i tidigare nodpooler. Vi går igenom dessa objekt:

    • Värdet för egenskapen enableAutoScaling anges till true.

    • Värdena för både maxCount och minCount anges.

    • Egenskapen scaleSetEvictionPolicy anges till Delete.

    • Egenskapen scaleSetPriority anges till Spot.

    • Egenskapen spotMaxPrice anges till -1.

    • nodeLabels och nodeTaints tillämpas på den här nodpoolen. Du använder dessa värden för att schemalägga arbetsbelastningar i noderna i nodpoolen.

Konfigurera ett namnområde

  1. kubectl create namespace Kör kommandot för att skapa ett namnområde med namnet costsavings för programmet. Du använder det här namnområdet för att göra det enklare att välja dina arbetsbelastningar.

    kubectl create namespace costsavings
    

    Här är utdata från föregående kommando:

    namespace/costsavings created
    

Schemalägga en podd med tillhörighet för nod för oanvänd kapacitet

Du kan schemalägga att en podd ska köras på en skalningsnod genom att lägga till en tolerans och en tillhörighet till poddens distributionsmanifestfil. När toleransen och nodtillhörigheten motsvarar den taint och etikett som tillämpas på dina skalningsnoder, schemaläggs podden på dessa noder.

Noderna i en skalningsuppsättningsnodpool tilldelas en taint som är lika kubernetes.azure.com/scalesetpriority=spot:NoSchedule med och en etikett som är kubernetes.azure.com/scalesetpriority=spotlika med . Använd informationen i det här nyckel/värde-paret i avsnittet och affinity i tolerations YAML-manifestfilen för arbetsbelastningar. Med den andra poolen för batchbearbetning konfigurerad som en skalningsuppsättningsnodpool för VM med oanvänd kapacitet kan du nu skapa en distributionsfil för att schemalägga arbetsbelastningar som ska köras på den.

  1. Skapa en manifestfil för Kubernetes-distributionen med namnet spot-node-deployment.yaml i det integrerade redigeringsprogrammet:

    code spot-node-deployment.yaml
    

    Dricks

    Cloud Shell innehåller ett integrerat filredigeringsprogram. Cloud Shell-redigeringsprogrammet stöder funktioner som språkmarkering, kommandopaletten och en filutforskare. Om du vill kunna skapa och redigera filer enkelt startar du redigeringsprogrammet genom att köra code . i Cloud Shell-terminalen. Då öppnas redigeringsprogrammet med den aktiva arbetskatalogen i terminalen. Om du vill öppna manifestfilen direkt för snabb redigering kör du code spot-node-deployment.yaml. Det här kommandot öppnar redigeringsprogrammet utan filutforskaren.

  2. Klistra in följande text i filen:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: "kubernetes.azure.com/scalesetpriority"
        operator: "Equal"
        value: "spot"
        effect: "NoSchedule"
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: "kubernetes.azure.com/scalesetpriority"
                operator: In
                values:
                - "spot"
    
  3. Tryck på Ctrl+S för att spara filen och tryck sedan på Ctrl+Q för att stänga redigeraren.

  4. kubectl apply Kör kommandot för att tillämpa konfigurationen och distribuera programmet i costsavings namnområdet:

    kubectl apply \
    --namespace costsavings \
    -f spot-node-deployment.yaml
    

    Här är utdata från föregående kommando:

    pod/nginx created
    
  5. Du kan hämta mer information om podden som körs med hjälp -o wide av flaggan när du kör kubectl get pods kommandot . I det här fallet vill du se vilken nod som podden är schemalagd i. Se till att söka efter poddar i namnområdet costsavings.

    kubectl get pods --namespace costsavings -o wide
    

    Utdata bör likna följande:

    NAME    READY   STATUS    RESTARTS   AGE   IP           NODE                                   NOMINATED NODE   READINESS GATES
    nginx   1/1     Running   0          43s   10.244.3.3   aks-batchprocpl2-25254417-vmss000000   <none>           <none>
    

    Observera nodens namn, aks-batchprocpl2-25254417-vmss000000. Den här noden är en del av batchprocpl2, den skalningsuppsättningsnodpool för VM med oanvänd kapacitet som du skapade tidigare.