Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel voegt u een secundaire Spot-knooppuntgroep toe aan een bestaand AKS-cluster (Azure Kubernetes Service).
Een spot-knooppuntgroep is een knooppuntgroep die wordt ondersteund door een virtuele-machineschaalset van Azure Spot. Met spot-VM's in uw AKS-cluster kunt u profiteren van niet-gebruikte Azure-capaciteit met aanzienlijke kostenbesparingen. De hoeveelheid beschikbare niet-gebruikte capaciteit varieert op basis van veel factoren, zoals de grootte van het knooppunt, de regio en het tijdstip van de dag.
Wanneer u een Spot-knooppuntgroep implementeert, wijst Azure de Spot-knooppunten toe als er capaciteit beschikbaar is en implementeert u een Spot-schaalset waarmee de spot-knooppuntgroep in één standaarddomein wordt ondersteund. Er is geen SLA voor de Spot-knooppunten. Er zijn geen garanties voor hoge beschikbaarheid. Als Azure capaciteit terug nodig heeft, verwijdert de Azure-infrastructuur de Spot-knooppunten.
Spot-knooppunten zijn zeer geschikt voor workloads die bestand zijn tegen onderbrekingen, vroegtijdige beëindiging of evicties. Workloads zoals batchverwerkingstaken, ontwikkel- en testomgevingen en grote rekenworkloads kunnen bijvoorbeeld goede kandidaten zijn om te plannen in een Spot-knooppuntgroep.
Voordat u begint
- In dit artikel wordt ervan uitgegaan dat u basiskennis hebt van Kubernetes- en Azure Load Balancer-concepten. Zie Kubernetes-kernconcepten voor Azure Kubernetes Service (AKS) voor meer informatie.
- Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
- Wanneer u een cluster maakt om een Spot-knooppuntgroep te gebruiken, moet het cluster Virtual Machine Scale Sets voor knooppuntgroepen gebruiken en de load balancer van de SKU Standard. U moet ook een andere knooppuntgroep toevoegen nadat u uw cluster hebt gemaakt. Dit wordt besproken in deze zelfstudie.
- Voor dit artikel moet u Azure CLI versie 2.14 of hoger uitvoeren. Voer
az --versionuit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.
Beperkingen
De volgende beperkingen gelden wanneer u AKS-clusters maakt en beheert met een Spot-knooppuntgroep:
- Een spot-knooppuntgroep kan geen standaardknooppuntgroep zijn, maar kan alleen worden gebruikt als secundaire pool.
- U kunt het besturingsvlak en de knooppuntgroepen niet tegelijkertijd upgraden. U moet ze afzonderlijk upgraden of de spot-knooppuntgroep verwijderen om het besturingsvlak en de resterende knooppuntgroepen tegelijkertijd te upgraden.
- Een Spot-knooppuntgroep moet gebruikmaken van Virtual Machine Scale Sets.
- U kunt niet wijzigen
ScaleSetPriorityofSpotMaxPricena het maken. - Bij het instellen
SpotMaxPricemoet de waarde -1 of een positieve waarde met maximaal vijf decimalen zijn. - Een Spot-nodegroep heeft het
kubernetes.azure.com/scalesetpriority:spot-label, dekubernetes.azure.com/scalesetpriority=spot:NoSchedule-taint, en de systeempods hebben antiaffiniteit. - U moet een overeenkomstige tolerantie en affiniteit toevoegen om workloads in een Spot-knooppuntgroep te plannen.
Een Spot-knooppuntgroep toevoegen aan een AKS-cluster
Wanneer u een Spot-knooppuntgroep toevoegt aan een bestaand cluster, moet dit een cluster zijn waarvoor meerdere knooppuntgroepen zijn ingeschakeld. Wanneer u een AKS-cluster maakt met meerdere ingeschakelde knooppuntgroepen, maakt u standaard een knooppuntgroep met een priority van Regular. Als u een spot-knooppuntgroep wilt toevoegen, moet u opgeven Spot als de waarde voor priority. Zie meerdere knooppuntgroepen gebruiken voor meer informatie over het maken van een AKS-cluster met meerdere knooppuntgroepen.
- Maak een knooppuntgroep met een
priorityvanSpotmet de opdrachtaz aks nodepool add.
export SPOT_NODEPOOL="spotnodepool"
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $AKS_CLUSTER \
--name $SPOT_NODEPOOL \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--enable-cluster-autoscaler \
--min-count 1 \
--max-count 3 \
--no-wait
In het vorige commando maakt de priority van Spot de knooppuntgroep tot een Spot-knooppuntgroep. De eviction-policy parameter is ingesteld op Delete, wat de standaardwaarde is. Wanneer u het ontruimingsbeleid instelt op Delete, worden knooppunten in de onderliggende schaalset van de nodepool verwijderd wanneer deze worden ontruimd.
U kunt het ontruimingsbeleid ook instellen op Deallocate, wat betekent dat de knooppunten in de onderliggende schaalset bij ontruiming worden ingesteld op de status stopped-deallocated. Knooppunten met de status stopped-deallocated tellen mee voor uw rekenquotum en kunnen problemen veroorzaken bij het schalen of upgraden van clusters. De priority en eviction-policy waarden kunnen alleen worden ingesteld tijdens het maken van een knooppuntgroep. Deze waarden kunnen later niet worden bijgewerkt.
Met de vorige opdracht wordt ook de automatische schaalaanpassing van clusters ingeschakeld, die u kunt gebruiken met Spot-knooppuntgroepen. Op basis van de workloads die in uw cluster draaien, schaalt de cluster-autoscaler het aantal knooppunten op en af. Voor Spot-knooppuntgroepen wordt met de automatische schaalaanpassing van clusters het aantal knooppunten omhoog geschaald na een verwijdering als er nog steeds meer knooppunten nodig zijn. Als u het maximum aantal knooppunten wijzigt dat een knooppuntgroep kan hebben, moet u ook de maxCount waarde aanpassen die is gekoppeld aan de automatische schaalaanpassing van clusters. Als u geen automatische schaalaanpassing van clusters gebruikt, neemt de spot-pool na verwijdering uiteindelijk af tot 0 en moet handmatige bewerking worden uitgevoerd om extra Spot-knooppunten te ontvangen.
Belangrijk
Plan workloads alleen op Spot-nodepools die tegen onderbrekingen bestand zijn, zoals batchverwerking en testomgevingen. We raden u aan om taints and tolerations in te stellen op uw Spot-knooppuntgroep, zodat alleen workloads die node-uitzettingen kunnen verwerken, worden gepland op een Spot-knooppuntgroep. Met de bovenstaande opdracht wordt bijvoorbeeld een taint van kubernetes.azure.com/scalesetpriority=spot:NoScheduletoegevoegd, zodat alleen pods met een overeenkomende tolerantie op dit knooppunt worden gepland.
De Spot-knooppuntpool verifiëren
- Controleer of uw knooppuntgroep is toegevoegd met behulp van de
az aks nodepool showopdracht en bevestig dat hetscaleSetPriorityisSpot.
az aks nodepool show --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER --name $SPOT_NODEPOOL
Resultaten:
{
"artifactStreamingProfile": null,
"availabilityZones": null,
"capacityReservationGroupId": null,
"count": 3,
"creationData": null,
"currentOrchestratorVersion": "1.30.10",
"eTag": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"enableAutoScaling": true,
"enableCustomCaTrust": false,
"enableEncryptionAtHost": false,
"enableFips": false,
"enableNodePublicIp": false,
"enableUltraSsd": false,
"gatewayProfile": null,
"gpuInstanceProfile": null,
"gpuProfile": null,
"hostGroupId": null,
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/xxxxxxxxxxxxxxxx/providers/Microsoft.ContainerService/managedClusters/xxxxxxxxxxxxxxxx/agentPools/xxxxxxxxxxxx",
"kubeletConfig": null,
"kubeletDiskType": "OS",
"linuxOsConfig": null,
"maxCount": 3,
"maxPods": 30,
"messageOfTheDay": null,
"minCount": 1,
"mode": "User",
"name": "xxxxxxxxxxxx",
"networkProfile": {
"allowedHostPorts": null,
"applicationSecurityGroups": null,
"nodePublicIpTags": null
},
"nodeImageVersion": "AKSUbuntu-2204gen2containerd-xxxxxxxx.xx.x",
"nodeInitializationTaints": null,
"nodeLabels": {
"kubernetes.azure.com/scalesetpriority": "spot"
},
"nodePublicIpPrefixId": null,
"nodeTaints": [
"kubernetes.azure.com/scalesetpriority=spot:NoSchedule"
],
"orchestratorVersion": "x.xx.xx",
"osDiskSizeGb": 128,
"osDiskType": "Managed",
"osSku": "Ubuntu",
"osType": "Linux",
"podIpAllocationMode": null,
"podSubnetId": null,
"powerState": {
"code": "Running"
},
"provisioningState": "Creating",
"proximityPlacementGroupId": null,
"resourceGroup": "xxxxxxxxxxxxxxxx",
"scaleDownMode": "Delete",
"scaleSetEvictionPolicy": "Delete",
"scaleSetPriority": "Spot",
"securityProfile": {
"enableSecureBoot": false,
"enableVtpm": false,
"sshAccess": "LocalUser"
},
"spotMaxPrice": -1.0,
"status": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters/agentPools",
"typePropertiesType": "VirtualMachineScaleSets",
"upgradeSettings": {
"drainTimeoutInMinutes": null,
"maxSurge": null,
"maxUnavailable": null,
"nodeSoakDurationInMinutes": null,
"undrainableNodeBehavior": null
},
"virtualMachineNodesStatus": null,
"virtualMachinesProfile": null,
"vmSize": "Standard_DS2_v2",
"vnetSubnetId": null,
"windowsProfile": null,
"workloadRuntime": "OCIContainer"
}
Een pod inplannen om te worden uitgevoerd op het Spot-knooppunt
Als u een pod op een Spot-knooppunt wilt plannen, kunt u een toleration en node affinity toevoegen die overeenkomen met de taint die op uw Spot-knooppunt is toegepast.
In het volgende voorbeeld ziet u een gedeelte van een YAML-bestand dat een tolerantie definieert die overeenkomt met de kubernetes.azure.com/scalesetpriority=spot:NoSchedule taint en een knooppuntaffiniteit die overeenkomt met het kubernetes.azure.com/scalesetpriority=spot label dat in de vorige stap is gebruikt met requiredDuringSchedulingIgnoredDuringExecution en preferredDuringSchedulingIgnoredDuringExecution regels voor knooppuntaffiniteit:
spec:
containers:
- name: spot-example
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"
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
Wanneer u een pod met deze toleratie en node affinity uitrolt, plaatst Kubernetes de pod met succes op de knooppunten waarop de taint en het label zijn toegepast. In dit voorbeeld zijn de volgende regels van toepassing:
- Het knooppunt moet een label hebben met de sleutel
kubernetes.azure.com/scalesetpriorityen de waarde van dat label moet zijnspot. - Het knooppunt heeft bij voorkeur een label met de sleutel
another-node-label-keyen de waarde van dat label moet zijnanother-node-label-value.
Zie Pods toewijzen aan knooppunten voor meer informatie.
Een spot-knooppuntgroep upgraden
Wanneer u een Spot-knooppuntgroep bijwerkt, vaardigt AKS intern een cordon en een ontruimingsmelding uit, maar er wordt geen drain uitgevoerd. Er zijn geen piekknooppunten beschikbaar voor spot-knooppuntpoolupgrades. Buiten deze wijzigingen is het gedrag bij het upgraden van Spot-knooppuntgroepen consistent met die van andere typen knooppuntgroepen.
Zie Een AKS-cluster upgraden voor meer informatie over het upgraden.
Maximumprijs voor een spot-pool
Prijzen voor Spot-exemplaren zijn variabel, op basis van regio en SKU. Zie prijsinformatie voor Linux en Windows voor meer informatie.
Met variabele prijzen hebt u de mogelijkheid om een maximumprijs in te stellen, in AMERIKAANSE dollars (USD) met maximaal vijf decimalen. De waarde 0,98765 is bijvoorbeeld een maximumprijs van $ 0,98765 USD per uur. Als u de maximumprijs instelt op -1, wordt het exemplaar niet verwijderd op basis van de prijs. Zolang er capaciteit en quota beschikbaar zijn, is de prijs voor het exemplaar de lagere prijs van de huidige prijs voor een Spot-exemplaar of voor een standaardexemplaren.
Volgende stappen
In dit artikel hebt u geleerd hoe u een Spot-knooppuntgroep toevoegt aan een AKS-cluster. Voor meer informatie over hoe u pods over knooppuntgroepen heen kunt aansturen, zie Best practices voor geavanceerde planningsfuncties in AKS.