Övning – Konfigurera skalningsuppsättningsnodpooler för VM med oanvänd kapacitet med autoskalning av kluster i ett AKS-kluster
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.
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.
- Namn:
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 tilltrue
.Värdena för både
maxCount
ochminCount
anges.Egenskapen
scaleSetEvictionPolicy
anges tillDelete
.Egenskapen
scaleSetPriority
anges tillSpot
.Egenskapen
spotMaxPrice
anges till-1
.nodeLabels
ochnodeTaints
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
kubectl create namespace
Kör kommandot för att skapa ett namnområde med namnetcostsavings
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=spot
lika 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.
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 ducode spot-node-deployment.yaml
. Det här kommandot öppnar redigeringsprogrammet utan filutforskaren.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"
Tryck på Ctrl+S för att spara filen och tryck sedan på Ctrl+Q för att stänga redigeraren.
kubectl apply
Kör kommandot för att tillämpa konfigurationen och distribuera programmet icostsavings
namnområdet:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
Här är utdata från föregående kommando:
pod/nginx created
Du kan hämta mer information om podden som körs med hjälp
-o wide
av flaggan när du körkubectl 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ådetcostsavings
.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 avbatchprocpl2
, den skalningsuppsättningsnodpool för VM med oanvänd kapacitet som du skapade tidigare.