Övning – Konfigurera spot-nodpooler med kluster-autoskalning 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 du lägger till en spot-användarnodpool 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 spot-nodpool
Du måste skapa en separat nodpool som stöder batchbearbetningstjänsten. Den här nodpoolen är en spot-nodpool som använder principen för borttagning vid vräkning och ett högsta spotpris på -1.
Kör samma
az aks nodepool add
-kommando som i föregående övning för att lägga till en ny spot nodpool 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 spot-nodpool.Ange följande värden för att ange nodpoolens parametrar:
- Namn:
batchprocpl2
- Prioritet:
Spot
- Borttagningsprincip:
Delete
- Maxpris på Spotmarknaden:
-1
Kör följande kommando för att skapa spot-nodpoolen:
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
för att visa information om den nya spot-nodpoolen 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 }
Några värden i det här resultatet skiljer sig tydligt från vad du har sett i tidigare nodpooler. Nu ska vi gå igenom följande:
Egenskapsvärdet
enableAutoScaling
är inställt påtrue
.Både värdena för
maxCount
ochminCount
anges.Egenskapen
scaleSetEvictionPolicy
är inställd påDelete
.Egenskapen
scaleSetPriority
är inställd påSpot
.Egenskapen
spotMaxPrice
är inställd på-1
.nodeLabels
ochnodeTaints
tillämpas på den här nodpoolen. Du använder dessa värden för att schemalägga arbetsbelastningar på noderna i nodpoolen.
Konfigurera ett namnområde
Kör kommandot
kubectl create namespace
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ägg en pod med spotnodtillhörighet
Du kan schemalägga en pod att köras på en spotnod genom att lägga till en tolerans och en tillhörighet i podens distributionsmanifestfil. När toleransen och nodtillhörigheten motsvarar de taints och etiketter som är applicerade på dina spot-noder, schemaläggs podden på dessa noder.
Noderna i en spotnodpool tilldelas en taint som är lika med kubernetes.azure.com/scalesetpriority=spot:NoSchedule
och en etikett som är lika med kubernetes.azure.com/scalesetpriority=spot
. Använd informationen i det här nyckel-/värdeparet i avsnitt tolerations
och affinity
i YAML-manifestfilen för dina arbetslaster. Med den andra batchbearbetningspoolen konfigurerad som en spot-nodpool 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
med hjälp av den integrerade redigeraren:code spot-node-deployment.yaml
Tips
Cloud Shell innehåller en integrerad filredigerare. Cloud Shell-redigeraren stöder funktioner som språkmarkering, kommandopaletten och en utforskare. Om du vill skapa och redigera filer enkelt startar du redigeraren genom att köra
code .
i Cloud Shell-terminalen. Den här åtgärden öppnar redigeraren med din aktiva arbetskatalog inställd i terminalen. Om du vill öppna manifestfilen direkt för snabbredigering kör ducode spot-node-deployment.yaml
. Det här kommandot öppnar redigeraren utan utforskaren.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.
Kör kommandot
kubectl apply
för att tillämpa konfigurationen och distribuera programmet icostsavings
namnområde: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 av flaggan
-o wide
när du kör kommandotkubectl get pods
. I det här fallet vill du se vilken nod podden är schemalagd för. Se till att fråga efter poddar icostsavings
namnrymd.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 namnet på noden
aks-batchprocpl2-25254417-vmss000000
. Den här noden är en del av denbatchprocpl2
spotnodpool som du skapade tidigare.