Oefening: spot-knooppuntgroepen configureren met de automatische schaalaanpassing van clusters in een AKS-cluster
Spot-gebruikersknooppuntgroepen bieden u toegang tot ongebruikte Azure-rekencapaciteit tegen lagere prijzen met ondersteuning voor high-performance computingscenario's.
In de vorige oefening hebt u een standaardgroep voor gebruikersknooppunten gemaakt, de automatische schaalaanpassing van clusters gebruikt om het maken van knooppunten te beheren en het aantal knooppunten handmatig te schalen.
De volgende stap is om een spotgebruiker-knooppuntenpool toe te voegen met automatische schaalvergroting om de operationele kosten van uw cluster te verminderen. Het clustergebruik varieert op basis van de benodigde resources en is niet voorspelbaar, dus u stelt regels in om de pieken en dips vast te leggen. De workload wordt uitgerold met knooppuntaffiniteit ingeschakeld, zodat de pod wordt gepland op knooppunten in de spot-knooppuntpool.
Een spot-nodepool maken
U moet een afzonderlijke knooppuntgroep maken die ondersteuning biedt voor de batchverwerkingsservice. Deze nodepool is een spot-nodepool die gebruikmaakt van het verwijderingsbeleid Delete en een spot-maximumprijs van -1.
Voer dezelfde
az aks nodepool add
opdracht uit als in de vorige oefening om een nieuwe spot-knooppuntgroep toe te voegen aan uw cluster. U moet de naam van de knooppuntgroep wijzigen en nog enkele parameters toevoegen om deze knooppuntgroep te identificeren als spot-knooppuntgroep.Voer de volgende waarden in om de parameters van de knooppuntgroep in te stellen:
- Naam:
batchprocpl2
- Prioriteit:
Spot
- Uitzettingsbeleid:
Delete
- Maximumprijs spot:
-1
Voer de volgende opdracht uit om de spot-knooppuntgroep te maken:
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
Houd er rekening mee dat deze aanvraag mogelijk mislukt vanwege capaciteitsbeperkingen op de locatie die u hebt geselecteerd.
- Naam:
Voer de opdracht
az aks nodepool show
uit om de details van de nieuwe spot-knooppuntgroep voor de batchverwerkingsservice weer te geven:az aks nodepool show \ --resource-group $RESOURCE_GROUP \ --cluster-name $AKS_CLUSTER_NAME \ --name batchprocpl2
Hier volgt een voorbeeld van de uitvoer van de opdracht.
{ "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 }
Enkele waarden in dit resultaat verschillen duidelijk van wat u in de vorige knooppuntgroepen hebt gezien. Laten we deze items bekijken:
De eigenschapswaarde
enableAutoScaling
is ingesteld optrue
.Zowel de waarden
maxCount
alsminCount
zijn ingesteld.De eigenschap
scaleSetEvictionPolicy
is ingesteld opDelete
.De eigenschap
scaleSetPriority
is ingesteld opSpot
.De eigenschap
spotMaxPrice
is ingesteld op-1
.De
nodeLabels
ennodeTaints
worden toegepast op deze knooppuntgroep. U gebruikt deze waarden om workloads te plannen op de knooppunten in de knooppuntgroep.
Een naamruimte configureren
Voer de opdracht
kubectl create namespace
uit om een naamruimte te maken met de naamcostsavings
voor de toepassing. U gebruikt deze naamruimte om uw workloads gemakkelijker te selecteren.kubectl create namespace costsavings
Dit is de uitvoer van de voorgaande opdracht:
namespace/costsavings created
Een pod inplannen met spot-knooppuntaffiniteit
U kunt een pod zo plannen dat deze wordt uitgevoerd op een spot-knooppunt door toleranties en affiniteiten toe te voegen aan het manifestbestand van de pod. Wanneer de tolerantie en knooppuntaffiniteit overeenkomen met de taint en het label dat is toegepast op uw spot-knooppunten, wordt de pod gepland op deze knooppunten.
Aan de knooppunten in een spot-knooppuntgroep wordt een taint toegewezen die gelijk is aan kubernetes.azure.com/scalesetpriority=spot:NoSchedule
en een label dat gelijk is aan kubernetes.azure.com/scalesetpriority=spot
. Gebruik de informatie in dit sleutel-waardepaar in de sectie tolerations
en affinity
van het YAML-manifestbestand van uw workloads. Nu de tweede batchverwerkingsgroep is geconfigureerd als een spot-knooppuntgroep, kunt u nu een implementatiebestand maken om workloads te plannen die erop moeten worden uitgevoerd.
Maak een manifestbestand voor de Kubernetes-implementatie met de naam
spot-node-deployment.yaml
met behulp van de geïntegreerde editor:code spot-node-deployment.yaml
Advies
Cloud Shell bevat een geïntegreerde bestandseditor. De Cloud Shell-editor ondersteunt functies zoals taalmarkeringen, het opdrachtenpalet en een verkenner. Voor het eenvoudig maken en bewerken van bestanden start u de editor door
code .
uit te voeren in de Cloud Shell-terminal. Met deze actie opent u de editor met uw actieve werkmap ingesteld in de terminal. Als u het manifestbestand rechtstreeks wilt openen om snel te bewerken, voert ucode spot-node-deployment.yaml
uit. Met deze opdracht opent u de editor zonder de verkenner.Plak de volgende tekst in het bestand:
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"
Druk op Ctrl+S- om het bestand op te slaan en druk vervolgens op Ctrl+Q- om de editor te sluiten.
Voer de opdracht
kubectl apply
uit om de configuratie toe te passen en de toepassing in decostsavings
naamruimte te implementeren:kubectl apply \ --namespace costsavings \ -f spot-node-deployment.yaml
Dit is de uitvoer van de voorgaande opdracht:
pod/nginx created
U kunt meer informatie over de actieve pod ophalen door de vlag
-o wide
te gebruiken bij het uitvoeren van de opdrachtkubectl get pods
. In dit geval wilt u zien op welk knooppunt de pod is gepland. Zorg ervoor dat u een query uitvoert op pods in decostsavings
naamruimte.kubectl get pods --namespace costsavings -o wide
De uitvoer moet er ongeveer als volgt uitzien:
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>
Let op de naam van het knooppunt,
aks-batchprocpl2-25254417-vmss000000
. Dit knooppunt maakt deel uit van debatchprocpl2
spot-knooppuntgroep die u eerder hebt gemaakt.