Meerdere knooppuntgroepen configureren met behulp van AKS-spot-knooppuntgroepen met de automatische schaalaanpassing van clusters
Azure biedt instanties van virtuele machines die schaalbaarheid en lagere kosten bieden en ideaal zijn voor workloads die kunnen worden onderbroken. Hoewel deze virtuele machines (VM's) ongebruikte Azure-rekencapaciteit tegen lagere prijzen gebruiken, bieden de VM's wel ondersteuning voor High-Performance Computing-scenario's.
De dronetraceringsoplossing van uw bedrijf is in Azure Kubernetes Service (AKS) geïmplementeerd als een groot aantal containertoepassingen en -services. Een van deze services is een batchverwerkingsservice waarmee vluchtroutes van drones worden gepland. Bij een plotselinge toename van uw klantenbestand wordt de batchverwerkingsservice overspoeld met aanvragen en ontstaat er een leveringsachterstand. Deze situatie veroorzaakt vertragingen en frustratie van klanten.
Automatisch schalen van het aantal batchverwerkingsservicereplica's zorgt voor tijdige orderverwerking. U moet echter ook meer knooppunten implementeren om de behoefte aan computingresources bij te houden. Door gebruikstrends in Azure Monitor te analyseren, merkt u dat deze knooppunten alleen op specifieke momenten en niet op kostenefficiënte wijze worden gebruikt. De batchverwerkingsservice is stateless en slaat geen gegevens over clientsessies op. U realiseert zich dat u op de volgende manieren geld kunt besparen:
- Goedkopere knooppuntexemplaren gebruiken.
- Automatisch schalen van het aantal knooppunten in de knooppuntgroep die is geconfigureerd voor batchverwerking.
Laten we eens kijken naar de onderliggende infrastructuur van deze kostenbesparende oplossing in AKS.
Wat is een virtuele spot-machine (spot-VM) in Azure?
Een virtuele spot-machine is een VM die met grote kortingen toegang biedt tot ongebruikte Azure-rekencapaciteit. Spot-VM's vervangen de bestaande virtuele machines met lage prioriteit in Azure. U kunt spot-VM's gebruiken voor de uitvoering van de volgende typen werkbelastingen:
High Performance Computing-scenario's, batchverwerking of toepassingen voor visuele weergave.
Grootschalige stateless toepassingen.
Ontwikkel- en testomgevingen, met inbegrip van CI- en CD-werkbelastingen (continue integratie en continue levering).
Beschikbaarheid van spot-VM
De beschikbaarheid van VM's is afhankelijk van factoren als capaciteitsgrootte, regio en tijdstip van de dag. Er worden in Azure alleen VM's toegewezen als er capaciteit beschikbaar is. Als gevolg hiervan is er geen SLA (Service Level Agreement) voor deze typen VM's en bieden ze geen garanties voor hoge beschikbaarheid.
Verwijderingsbeleid voor spot-VM
Het standaardverwijderingsbeleid voor spot-VM's is Toewijzing ongedaan maken. Azure verwijdert spot-VM's met 30 seconden kennisgeving wanneer de capaciteit in een regio beperkt wordt. Een VM die is ingesteld met het beleid Toewijzing ongedaan maken, krijgt de status 'gestopt - toewijzing ongedaan gemaakt' wanneer deze is verwijderd. U kunt een verwijderde VM opnieuw implementeren wanneer de capaciteit van de spot weer beschikbaar is. Een virtuele machine waarvan de toewijzing ongedaan is gemaakt, blijft meetellen voor het virtuele CPU-quotum (vCPU) van de spot en kosten voor de onderliggende toegewezen schijven blijven van toepassing.
Wat is een virtuele-machineschaalset voor spot-VM's?
Een virtuele-machineschaalset voor spot-VM's is een virtuele-machineschaalset die ondersteuning biedt voor virtuele spot-machines van Azure. Deze VM's gedragen zich op dezelfde manier als gewone spot-VM's, maar met één verschil: wanneer u gebruikmaakt van ondersteuning voor virtuele-machineschaalsets voor spot-VM's in Azure, kiest u uit twee verwijderingsbeleidsregels:
Toewijzing ongedaan maken: de toewijzing van het beleid wordt exact zoals eerder beschreven.
Verwijderen: Met het beleid Verwijderen kunt u de kosten van schijven voorkomen en quotumlimieten bereiken. Met het verwijderingsbeleid Verwijderen worden verwijderde VM's samen met de onderliggende schijven verwijderd. De functie voor automatisch schalen van de schaalset kan nu automatisch proberen te compenseren voor het verwijderen van vm's door nieuwe VM's te maken. Hoewel het maken van VM's niet wordt gegarandeerd, tellen de verwijderde VM's niet mee voor uw vCPU-quotum en brengen deze geen kosten met zich mee voor onderliggende schijven.
De best practice is om de functie voor automatische schaalaanpassing alleen te gebruiken wanneer u het verwijderingsbeleid voor de schaalset instelt op Verwijderen.
Wat is een spot-knooppuntgroep in Azure Kubernetes Service (AKS)?
Een spot-knooppuntgroep is een groep met gebruikersknooppunten die gebruikmaakt van een virtuele-machineschaalset voor spot-VM's. AKS biedt ondersteuning voor spot-VM's in de volgende situaties:
- U moet gebruikersknooppuntgroepen maken.
- U wilt profiteren van de kostenvoordelen voor ondersteuning van virtuele-machineschaalsets voor spot-VM's van Azure.
Gebruik steunknooppuntgroepen voor het volgende:
- Profiteren van ongebruikte capaciteit in Azure.
- Gebruikmaken van schaalsetfuncties met het verwijderingsbeleid Verwijderen.
- De maximale prijs definiëren die u per uur wilt betalen.
- De aanbevolen automatische schaalaanpassing van Kubernetes-clusters van AKS inschakelen bij gebruik van spot-knooppuntgroepen.
Als u bijvoorbeeld de batchverwerkingsservice van de toepassing voor het traceren van drones wilt ondersteunen, kunt u een spot-gebruikersknooppuntgroep maken en automatische schaalaanpassing van clusters inschakelen. Vervolgens kunt u de horizontale podschaalder configureren om meer batchverwerkingsservices te implementeren om aan de resourcevereisten te voldoen.
Als de vraag naar knooppunten toeneemt, kan de automatische schaalaanpassing van clusters het aantal knooppunten in de spot-knooppuntgroep omhoog en omlaag schalen. Als er knooppuntverwijzingen optreden, blijft de automatische schaalaanpassing van clusters proberen het aantal knooppunten omhoog te schalen als er nog extra knooppunten nodig zijn.
Beperkingen van spot-knooppuntgroepen
Houd rekening met de volgende beperkingen voordat u besluit een spot-gebruikersknooppuntgroep aan uw AKS-cluster toe te voegen:
- De onderliggende spot-schaalset wordt maar in één foutdomein geïmplementeerd en biedt geen garantie voor hoge beschikbaarheid.
- Voor het AKS-cluster moet ondersteuning van meerdere knooppuntgroepen zijn ingeschakeld.
- U kunt spot-knooppuntgroepen alleen als gebruikersknooppuntgroepen gebruiken.
- U kunt spot-knooppuntgroepen niet upgraden.
- Het maken van spot-VM's wordt niet gegarandeerd. Het maken van spot-knooppunten is afhankelijk van de capaciteit en de quotabeschikbaarheid in de Azure-regio waarin het cluster is geïmplementeerd.
Denk eraan dat het verstandig is spot-knooppuntgroepen alleen te gebruiken voor werkbelastingen die kunnen worden onderbroken.
Belangrijk
In een aantal abonnementen, zoals Sponsorship-abonnementen, is de mogelijkheid om spot-VM's en spot-knooppuntgroepen te maken beperkt. U kunt mogelijk geen spot-knooppuntgroep voor uw cluster maken.
Een spot-knooppuntgroep toevoegen aan een AKS-cluster
Een spot-knooppuntgroep kan geen systeemknooppuntgroep voor een AKS-cluster zijn. Eerst moet u uw cluster maken en vervolgens de az aks nodepool add
opdracht gebruiken om een nieuwe gebruikersknooppuntgroep toe te voegen.
Als u een nieuwe knooppuntgroep wilt configureren als een spot-knooppuntgroep, stelt u verschillende parameters voor de nieuwe knooppuntgroep in.
Prioriteit
De parameter --priority
is standaard ingesteld op Regular
voor een nieuwe knooppuntgroep. Stel de waarde in op Spot
om aan te geven dat de nieuwe groep die u maakt een spot-knooppuntgroep is. Deze waarde kan achteraf niet worden gewijzigd.
Verwijderingsbeleid
Een spot-knooppuntgroep moet gebruikmaken van een virtuele-machineschaalset. Zoals eerder gezegd, maakt de spot-knooppuntgroep gebruik van een spot-schaalset. Ingesteld --eviction-policy
om Delete
de schaalset toe te staan om zowel het knooppunt als de onderliggende, toegewezen schijf te verwijderen die door het knooppunt wordt gebruikt. U kunt deze waarde niet wijzigen nadat deze is gemaakt.
U kunt het verwijderingsbeleid Deallocate
instellen op, maar wanneer deze knooppunten worden verwijderd, tellen ze nog steeds mee met uw rekenquotum voor het schalen of upgraden van het cluster.
Maximumprijs voor spot-knooppunten
Spot-knooppuntgroepen optimaliseren de kosten door het maximumbedrag te beperken dat u per spot-knooppunt per uur wilt betalen. Gebruik de parameter --spot-max-price
om een veilig bedrag in te stellen. Nieuw gemaakte spot-knooppunten worden verwijderd als deze waarde wordt bereikt.
U kunt deze waarde instellen op een positief bedrag tot vijf decimalen of instellen op -1
. Het instellen van de --spot-max-price
waarde die -1
van invloed is op uw knooppuntgroep op de volgende manieren:
- Knooppunten worden niet verwijderd op basis van de prijs van het knooppunt.
- De kosten voor nieuwe knooppunten zijn gebaseerd op de huidige prijs voor spot-knooppunten of de prijs voor een standaardknooppunt, afhankelijk van wat lager is.
Als u bijvoorbeeld de waarde instelt op 0,98765, is de maximumprijs voor een knooppunt in USD 0,98765 per uur. Wanneer het verbruik van het knooppunt deze hoeveelheid overschrijdt, wordt het knooppunt verwijderd.
De automatische schaalaanpassing van clusters inschakelen
Het is raadzaam om de automatische schaalaanpassing van clusters in te schakelen met behulp van de parameter --enable-cluster-autoscaler
. Als u automatisch schaalaanpassing van clusters niet gebruikt, riskeert u als gevolg van capaciteitsbeperkingen van Azure dat het aantal knooppunten in de knooppuntgroep terugloopt naar nul als er knooppunten worden verwijderd.
Minimumaantal knooppunten
Stel het minimumaantal knooppunten in op een waarde tussen 1 en 100 met behulp van de parameter --min-count
. Een minimumaantal knooppunten is vereist als u de automatische schaalaanpassing van clusters inschakelt.
Maximumaantal knooppunten
Stel het maximumaantal knooppunten in op een waarde tussen 1 en 100 met behulp van de parameter --max-count
. Een maximumaantal knooppunten is vereist als u de automatische schaalaanpassing van clusters inschakelt.
Voorbeeldconfiguratie
Hier volgt een voorbeeldopdracht az aks nodepool add
waarmee een spot-knooppuntgroep wordt toegevoegd met een maximumaantal van 3 en een minimumaantal van 1. Let op het gebruik van het inschakelen van --enable-cluster-autoscaler
de spot-knooppuntfuncties.
az aks nodepool add \
--resource-group resourceGroup \
--cluster-name aksCluster \
--name spotpool01 \
--enable-cluster-autoscaler \
--max-count 3 \
--min-count 1 \
--priority Spot \
--eviction-policy Delete \
--spot-max-price -1 \
--no-wait
Pods implementeren in spot-knooppuntgroepen
Bij het implementeren van werkbelastingen in Kubernetes kunt u informatie aan de Scheduler verstrekken om aan te geven op welke knooppunten de werkbelastingen wel of niet mogen worden uitgevoerd. U regelt de planning van werkbelasting door taints, tolerantie of knooppuntaffiniteit te configureren. Spot-knooppunten worden geconfigureerd met een specifiek label en een taint.
Wat is een taint?
Een taint wordt op een knooppunt toegepast om aan te geven dat er alleen specifieke pods op kunnen worden gepland. Spot-knooppunten worden geconfigureerd met een label dat is ingesteld op kubernetes.azure.com/scalesetpriority:spot
.
Wat is tolerantie?
Tolerantie is een specificatie die wordt toegepast op een pod om toe te staan, maar niet te vereisen, dat een pod moet worden gepland op een knooppunt met de bijbehorende taint. Spot-knooppunten worden geconfigureerd met een knooppunt-taint die is ingesteld op kubernetes.azure.com/scalesetpriority=spot:NoSchedule
.
Notitie
Taints en toleranties garanderen niet dat een pod op een specifiek knooppunt wordt geplaatst. Als een knooppunt bijvoorbeeld geen taint heeft, is het mogelijk dat de pod met de tolerantie kan worden gepland op het niet-opgegeven knooppunt. Het opgeven van een affiniteit met taints en toleranties kan dit probleem oplossen.
Wat is knooppuntaffiniteit?
Met knooppuntaffiniteit kunt u beschrijven welke pods op een knooppunt zijn gepland. Affiniteit wordt opgegeven met behulp van labels die op het knooppunt zijn gedefinieerd. Zo worden in AKS bijvoorbeeld systeempods geconfigureerd met anti-affiniteit ten aanzien van spot-knooppunten om te voorkomen dat de pods op deze knooppunten worden gepland.
Tolerantie definiëren in een pod-manifestbestand
U geeft tolerantie voor node-taint op door een tolerations
woordenlijstvermelding te maken in het manifestbestand van de werkbelasting. In deze woordenlijst stelt u de volgende eigenschappen in voor elke knooppunt-taint die de werkbelasting in deze sectie moet tolereren:
Eigenschappen | Beschrijving |
---|---|
key |
Identificeert een sleutel-waardepaar van een knooppunt-taint voor het knooppunt. Bijvoorbeeld, voor een spot-knooppuntgroep is het sleutel-waardepaar kubernetes.azure.com/scalesetpriority:spot . De sleutel is kubernetes.azure.com/scalesetpriority . |
operator |
Zorgt ervoor dat de tolerantie overeenkomt met een taint. De standaardoperator is Equal . U kunt ook Exists opgeven voor overeenkomst met de tolerantie. Als u echter gebruikmaakt van Exists , geeft u de volgende eigenschap (value ) niet op. |
value |
Vertegenwoordigt het waardegedeelte van het sleutel-waardepaar node-taint dat is opgegeven op het knooppunt. Voor een spot-knooppuntgroep met een sleutel-waardepaar kubernetes.azure.com/scalesetpriority:spot is de waarde bijvoorbeeld spot . |
effect |
Geeft aan hoe het systeem omgaat met het plannen van een pod. Er zijn drie opties: NoSchedule , PreferNoSchedule en NoExecute . NoSchedule zorgt ervoor dat het systeem de pod niet kan plannen. Met PreferNoSchedule mag het systeem proberen de pod niet te plannen. Met NoExecute worden pods verwijderd die al op het tainted knooppunt worden uitgevoerd of wordt de pod helemaal niet gepland. |
Knooppuntaffiniteit definiëren in een podmanifestbestand
U geeft affiniteit op door een affinity
vermelding te maken in het manifestbestand van uw workload. In deze vermelding stelt u de volgende eigenschappen in voor elk knooppuntlabel dat aan een workload moet voldoen:
Eigenschappen | Beschrijving |
---|---|
nodeAffinity |
Beschrijft planningsregels voor knooppuntaffiniteit voor de pod. |
requiredDuringSchedulingIgnoredDuringExecution |
Als niet wordt voldaan aan de affiniteitsvereisten die door dit veld zijn opgegeven tijdens de planning, kan de pod niet worden gepland op het knooppunt. Als aan de door dit veld opgegeven affiniteitsvereisten op een bepaald moment niet meer worden voldaan tijdens het uitvoeren van pods (bijvoorbeeld vanwege een update), kan het systeem ervoor kiezen om de pod uit het knooppunt te verwijderen. |
nodeSelectorTerms |
Een lijst met knooppuntkiezertermen. Termen die worden geretourneerd, komen overeen met een van de filters, in plaats van alle filters. |
matchExpressions |
Een lijst met vereisten voor knooppuntkiezers op basis van labels van knooppunten. |
key |
De labelsleutel waarop de selector van toepassing is. De sleutel is kubernetes.azure.com/scalesetpriority |
operator |
Vertegenwoordigt de relatie van een sleutel met een set waarden. Geldige operatoren zijnIn , , , Exists en DoesNotExist Gt NotIn Lt |
values |
Vertegenwoordigt het waardegedeelte van het sleutel-waardepaar van het knooppunt dat is opgegeven op het knooppunt. Op een spot-knooppuntgroep met een sleutel-waardepaar van kubernetes.azure.com/scalesetpriority:spot , is spot de waarde . |
Hier volgt een voorbeeld van een workload waaraan tolerantie en affiniteit is toegevoegd voor spot-knooppuntgroepen.
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"