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 het toevoegen van een spot-gebruikersknooppuntgroep met automatisch schalen 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 werkbelasting wordt geïmplementeerd met knooppuntaffiniteit ingeschakeld, zodat de pod wordt gepland op knooppunten in de spot-knooppuntgroep.
Een spot-knooppuntgroep maken
U moet een afzonderlijke knooppuntgroep maken die ondersteuning biedt voor de batchverwerkingsservice. Deze knooppuntgroep is een spot-knooppuntgroep die gebruikmaakt van het verwijderingsbeleid Verwijderen en een maximale spot-prijs van -1.
Voer dezelfde opdracht
az aks nodepool add
uit als in de vorige oefening om een nieuwe spot-knooppuntgroep aan uw cluster toe te voegen. 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
- Verwijderingsbeleid:
Delete
- Maximale spot-prijs:
-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 kan mislukken 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 wijken opvallend af van de waarden die u in vorige knooppuntgroepen hebt gezien. Laten we deze items eens bekijken:
De waarde van de eigenschap
enableAutoScaling
is ingesteld optrue
.De waarden
maxCount
enminCount
zijn beide ingesteld.De eigenschap
scaleSetEvictionPolicy
is ingesteld opDelete
.De eigenschap
scaleSetPriority
is ingesteld opSpot
.De eigenschap
spotMaxPrice
is ingesteld op-1
.nodeLabels
ennodeTaints
zijn toegepast op deze knooppuntgroep. U gebruikt deze waarden om werkbelastingen te plannen voor de knooppunten in de knooppuntgroep.
Een naamruimte configureren
Voer de
kubectl create namespace
opdracht uit om een naamruimte te maken die voor de toepassing wordt aangeroepencostsavings
. U gebruikt deze naamruimte om het selecteren van uw werkbelastingen te vergemakkelijken.kubectl create namespace costsavings
Dit is de uitvoer van de voorgaande opdracht:
namespace/costsavings created
Een pod plannen met spot-knooppuntaffiniteit
U kunt plannen dat een pod wordt uitgevoerd op een spot-knooppunt door een tolerantie en een affiniteit 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 kubernetes.azure.com/scalesetpriority=spot:NoSchedule
aan en een label dat gelijk is aan kubernetes.azure.com/scalesetpriority=spot
. Gebruik de informatie in dit sleutel-waardepaar in de tolerations
en affinity
sectie van het YAML-manifestbestand van uw workloads. Nu u de tweede batchverwerkingsgroep als een spot-knooppuntgroep hebt geconfigureerd, kunt u een implementatiebestand maken om werkbelastingen te plannen die in de groep moeten worden uitgevoerd.
Maak voor de Kubernetes-implementatie een manifestbestand met de naam
spot-node-deployment.yaml
met behulp van de geïntegreerde editor:code spot-node-deployment.yaml
Tip
Cloud Shell bevat een geïntegreerde bestandseditor. De Cloud Shell-editor ondersteunt functies, zoals het markeren van talen, het opdrachtpalet en een bestandsverkenner. Als u eenvoudig bestanden wilt maken en bewerken, start u de editor door
code .
uit te voeren in de Cloud Shell-terminal. Met deze actie wordt de editor geopend met uw actieve werkmapset in de terminal. Voercode spot-node-deployment.yaml
uit om het manifestbestand rechtstreeks te openen voor snelle bewerking. Met deze opdracht wordt de editor geopend zonder de bestandsverkenner.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
kubectl apply
opdracht 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 met behulp van de vlag bij het
-o wide
uitvoerenkubectl get pods
van de opdracht. In dit geval wilt u zien op welk knooppunt de pod is gepland. Zorg dat u de query voor pods uitvoert in de naamruimtecostsavings
.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>
U ziet de naam van het knooppunt,
aks-batchprocpl2-25254417-vmss000000
. Dit knooppunt maakt deel uit van de spot-knooppuntgroepbatchprocpl2
die u eerder hebt gemaakt.