Een Azure Spot-knooppuntgroep toevoegen aan een AKS-cluster (Azure Kubernetes Service)

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 ideaal voor workloads die onderbrekingen, vroegtijdige beëindigingen of verwijderingen kunnen afhandelen. 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 voor het gebruik van een spot-knooppuntgroep, moet het cluster virtuele-machineschaalsets gebruiken voor knooppuntgroepen en de Standard SKU-load balancer. 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 --version uit 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 virtuele-machineschaalsets gebruiken.
  • U kunt niet wijzigen ScaleSetPriority of SpotMaxPrice na het maken.
  • Bij het instellen SpotMaxPricemoet de waarde -1 of een positieve waarde met maximaal vijf decimalen zijn.
  • Een Spot-knooppuntgroep heeft het kubernetes.azure.com/scalesetpriority:spot label, de kubernetes.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 waarvoor meerdere knooppuntgroepen zijn ingeschakeld, maakt u standaard een knooppuntgroep priorityRegular . 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 priority van Spot de az aks nodepool add opdracht.

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name spotnodepool \
        --priority Spot \
        --eviction-policy Delete \
        --spot-max-price -1 \
        --enable-cluster-autoscaler \
        --min-count 1 \
        --max-count 3 \
        --no-wait
    

In de vorige opdracht wordt de prioritySpot knooppuntgroep een spot-knooppuntgroep. De eviction-policy parameter is ingesteld op Delete, wat de standaardwaarde is. Wanneer u het verwijderingsbeleidDeleteinstelt op, worden knooppunten in de onderliggende schaalset van de knooppuntgroep verwijderd wanneer ze worden verwijderd.

U kunt het verwijderingsbeleid Deallocateook instellen op, wat betekent dat de knooppunten in de onderliggende schaalset zijn ingesteld op de status gestopt-ongedaan gemaakt bij verwijdering. Knooppunten met het aantal gestopte toewijzingsstatussen ten opzichte van uw rekenquotum en kunnen problemen veroorzaken met 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 worden uitgevoerd, wordt het aantal knooppunten omhoog en omlaag geschaald door de automatische schaalaanpassing van clusters. 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 alleen workloads in spot-knooppuntgroepen die onderbrekingen kunnen afhandelen, zoals batchverwerkingstaken en testomgevingen. U wordt aangeraden taints en toleranties in uw Spot-knooppuntgroep in te stellen om ervoor te zorgen dat alleen workloads die knooppuntverzettingen kunnen verwerken, worden gepland in 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-knooppuntgroep controleren

  • Controleer of uw knooppuntgroep is toegevoegd met behulp van de az aks nodepool show opdracht en bevestig dat het scaleSetPriority is Spot.

    az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name spotnodepool
    

Een pod plannen om te worden uitgevoerd op het spot-knooppunt

Als u wilt plannen dat een pod wordt uitgevoerd op een Spot-knooppunt, kunt u een tolerantie en knooppuntaffiniteit toevoegen die overeenkomt met de taint die op uw Spot-knooppunt wordt 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 tolerantie en knooppuntaffiniteit implementeert, plant Kubernetes de pod op de knooppunten met de taint en het toegepaste label. 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 zijn spot.
  • Het knooppunt heeft bij voorkeur een label met de sleutel another-node-label-keyen de waarde van dat label moet zijn another-node-label-value.

Zie Pods toewijzen aan knooppunten voor meer informatie.

Een spot-knooppuntgroep upgraden

Wanneer u een spot-knooppuntgroep bijwerken, geeft AKS intern een cordon en een verwijderingsmelding uit, maar wordt er geen afvoer toegepast. 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. Zie Best practices voor geavanceerde scheduler-functies in AKS voor meer informatie over het beheren van pods in knooppuntgroepen.