Meerdere knooppuntgroepen configureren met behulp van AKS-spot-knooppuntgroepen met de automatische schaalaanpassing van clusters

Voltooid

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 leidt tot vertragingen en gefrustreerde klanten.

Automatische schaling van het aantal servicereplica's voor batchverwerking voorziet in de tijdige verwerking van orders. 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. Dat betekent dat er voor deze typen VM's geen Service Level Agreement (SLA) beschikbaar is dat deze geen garantie bieden op hoge beschikbaarheid.

Verwijderingsbeleid voor spot-VM

Het standaardverwijderingsbeleid voor spot-VM's is Toewijzing ongedaan maken. In Azure worden spot-VM's met een kennisgeving van 30 seconden verwijderd als de capaciteit in een regio beperkt raakt. 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:

  • De toewijzing ongedaan maken: Het beleid Toewijzing ongedaan maken werkt precies zoals eerder is 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 automatische schaalaanpassing van de schaalset kan nu automatisch proberen om de verwijderde VM's te compenseren door nieuwe virtuele machines 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.

Zo kunt u ter ondersteuning van de batchverwerkingsservice van de toepassing voor het traceren van drones een spot-gebruikersknooppuntgroep maken en automatische schaalaanpassing van clusters inschakelen. Vervolgens configureert u de horizontale schaalaanpassing van pods om aanvullende batchverwerkingsservices te implementeren overeenkomstig de resourcebehoeften.

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 knooppunten worden verwijderd, blijft 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.
  • Spot-knooppuntgroepen kunnen niet worden geüpgraded.
  • 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.

Een spot-knooppuntgroep maken

Op het moment van het schrijven van deze module zijn spot-knooppuntgroepen in preview. Om de configuratie van de spot-knooppuntgroep te voltooien, moet u de preview-functie inschakelen via de resourceprovider Microsoft.ContainerService en de CLI-extensie aks-preview installeren.

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.

Preview-functies inschakelen voor uw abonnement

Als u spot-knooppuntgroepen wilt gebruiken, moet u de functie spotpoolpreview voor uw abonnement inschakelen en de nieuwste set service-uitbreidingen verstrekken wanneer u een cluster configureert.

Waarschuwing

Nadat u enkele preview-functies in Azure hebt ingeschakeld, kunnen er standaardwaarden worden gebruikt voor alle AKS-clusters die in het abonnement worden gemaakt. Test preview-functies in niet-productieabonnementen om onvoorziene neveneffecten in productie-implementaties te voorkomen.

U registreert de functie spotpoolpreview als volgt:

  1. Gebruik de opdracht az feature register om de functie spotpoolpreview te registreren. Deze opdracht heeft twee parameters: namespace geeft de resourceprovider waarbij u de functie registreert aan en name geeft de functie aan.

    U registreert de functie spotpoolpreview met de resourceprovider Microsoft Container Service.

    Met de resourceprovider Microsoft Container Service kunt u acties uitvoeren die van invloed zijn op het beheer van een AKS-cluster. Voorbeelden van acties zijn het maken, bijwerken en verwijderen van containerservices of het lezen van gegevens erover.

    Hier volgt een voorbeeld van de opdracht az feature register waarmee u de functie spotpoolpreview kunt registreren:

    az feature register --namespace "Microsoft.ContainerService" --name "spotpoolpreview"
    
  2. Voor registratie van de resourceprovider is vernieuwing vereist zodra de functie is geregistreerd. Als u de status van de registratie wilt controleren, moet u een query uitvoeren voor de functielijst van de resourceprovider. De query az feature list retourneert de waarde Geregistreerd als deze is voltooid. Hier volgt een voorbeeld van de queryopdracht:

    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/spotpoolpreview')].{Name:name,State:properties.state}"
    
  3. Wanneer de functie is geregistreerd, bestaat de laatste stap uit het doorgeven van de nieuwe registratie. Voer de opdracht az provider register uit met de parameter --namespace, die dezelfde resourceprovider aangeeft als hiervoor. Hier volgt een voorbeeld van de opdracht az provider register.

    az provider register --namespace Microsoft.ContainerService
    

De CLI-extensie aks-preview installeren

De opdrachtparameters voor de spot-knooppuntgroep van AKS zijn alleen beschikbaar in de CLI-extensie aks-preview. Als de extensie niet is geïnstalleerd, kunt u de preview-functies niet gebruiken.

U kunt de volgende opdrachten uitvoeren om de extensie te installeren of, als deze al is geïnstalleerd, om de versie ervan te controleren en bij te werken.

Als de extensie nog niet is geïnstalleerd, voert u deze opdracht uit om deze te installeren:

az extension add --name aks-preview

U moet de CLI-extensie aks-preview versie 0.4.53 of later installeren om een AKS-cluster te maken dat gebruikmaakt van spot-knooppuntgroepen. Controleer de geïnstalleerde versie van de extensie als u de preview-versie al hebt geïnstalleerd. Voer de opdracht az extension show uit om de versie van de extensie op te vragen:

az extension show --name aks-preview --query [version]

Voer de opdracht az extension update uit als u de extensie eerder hebt geïnstalleerd en u deze moet bijwerken naar een nieuwere versie:

az extension update --name aks-preview

Een spot-knooppuntgroep toevoegen aan een AKS-cluster

Een spot-knooppuntgroep kan geen systeemknooppuntgroep voor een AKS-cluster zijn. Eerst maakt u uw cluster en vervolgens gebruikt u de opdracht az aks nodepool add 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 is beschreven, maakt de spot-knooppuntgroep gebruik van een spot-schaalset. Stel --eviction-policy in op Delete opdat de schaalset het knooppunt en de onderliggende toegewezen schijf kan verwijderen die door het knooppunt worden gebruikt. Deze waarde kan achteraf niet worden gewijzigd.

U kunt het verwijderingsbeleid instellen op Deallocate. Wanneer deze knooppunten echter worden verwijderd, tellen deze mee voor uw rekenquotum en zijn ze van invloed op latere clusterschaling of -upgrading.

Maximumprijs voor spot-knooppunten

Met spot-knooppuntgroepen kunt u kosten optimaliseren door het maximumbedrag in te stellen 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 willekeurig positief bedrag van maximaal vijf decimalen of deze instellen op -1. Als u de waarde van --spot-max-price instelt op -1, heeft dit de volgende invloed op uw knooppuntgroep:

  • Knooppunten worden niet verwijderd op basis van de prijs van het knooppunt.
  • De kosten voor nieuwe knooppunten zijn gelijk aan de huidige prijs voor spot-knooppunten of de prijs voor een standaardknooppunt, afhankelijk van wat lager is.

Stel dat u de waarde instelt op 0,98765, dan wordt de maximumprijs voor een knooppunt 0,98765 USD 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.

Hier volgt een voorbeeld van de opdracht az aks nodepool add waarmee een spot-knooppuntgroep wordt toegevoegd. Let op het gebruik van de aanvullende parameters voor het inschakelen van de functies van het spot-knooppunt.

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 is toegepast op een pod om toe te staan, maar niet te vereisen, dat een pod op een knooppunt met de bijbehorende taint moet worden gepland. 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 is gepland op het niet-bezette 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 de taint-tolerantie van een knooppunt 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:

Eigenschap 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 Staat voor het waarde-gedeelte van het sleutel-waardepaar van de taint voor 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 de pod niet wordt gepland door het systeem. 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 in uw workloadmanifestbestand te maken. In deze vermelding stelt u de volgende eigenschappen in voor elk knooppuntlabel dat aan een workload moet voldoen:

Eigenschap Beschrijving
nodeAffinity Beschrijft regels voor het plannen van knooppuntaffiniteit voor de pod.
requiredDuringSchedulingIgnoredDuringExecution Als niet wordt voldaan aan de affiniteitsvereisten die door dit veld zijn opgegeven tijdens de planning, wordt de pod niet gepland op het knooppunt. Als aan de affiniteitsvereisten die door dit veld zijn opgegeven, op een bepaald moment niet meer wordt voldaan tijdens het uitvoeren van pods (bijvoorbeeld vanwege een update), probeert het systeem de pod mogelijk al dan niet uiteindelijk uit het knooppunt te verwijderen.
nodeSelectorTerms Een lijst met knooppuntselectortermen. De termen zijn ORed in plaats van ANDed.
matchExpressions Een lijst met vereisten voor knooppuntselector 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, NotIn, en DoesNotExistGtExistsLt
values Vertegenwoordigt het waardegedeelte van het sleutel-waardepaar van het knooppuntlabel dat is opgegeven op het knooppunt. In een spot-knooppuntgroep met een sleutel-waardepaar van kubernetes.azure.com/scalesetpriority:spot, is spotde 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"

Kennis testen

1.

Stel dat u een stateless service hebt waarmee onlinebestellingen worden verwerkt en die wordt uitgevoerd in een AKS-cluster (Azure Kubernetes service). U besluit om op het AKS-cluster spot-knooppuntgroepen te gebruiken om de berekeningskosten op het cluster te optimaliseren. Hoe voegt u spot-knooppuntgroepen toe aan een AKS-cluster?

2.

Welk verwijderingsbeleid is de meest kostenefficiënte optie voor het configureren van de spot-knooppuntgroep voor de service die in de vorige vraag is beschreven?

3.

Hoe zorgt u ervoor dat er workloads worden gepland op de knooppunten van de spot-gebruikersknooppuntgroep voor de service die in de vorige vragen is beschreven?