Lägga till en Azure Spot-nodpool i ett AKS-kluster (Azure Kubernetes Service)

I den här artikeln lägger du till en sekundär nodpool för oanvänd kapacitet i ett befintligt AKS-kluster (Azure Kubernetes Service).

En nodpool för oanvänd kapacitet är en nodpool som backas upp av en skalningsuppsättning för virtuella Azure Spot-datorer. Med virtuella datorer med oanvänd kapacitet i AKS-klustret kan du dra nytta av outnyttad Azure-kapacitet med betydande kostnadsbesparingar. Mängden tillgänglig outnyttvänd kapacitet varierar beroende på många faktorer, till exempel nodstorlek, region och tid på dagen.

När du distribuerar en skalningspool för oanvänd kapacitet allokerar Azure de oanvända noderna om det finns tillgänglig kapacitet och distribuerar en skalningsuppsättning för oanvänd kapacitet som backar upp nodpoolen Spot i en enda standarddomän. Det finns inget serviceavtal för noderna För oanvänd kapacitet. Det finns inga garantier för hög tillgänglighet. Om Azure behöver kapacitet tillbaka avlägsnar Azure-infrastrukturen de oanvända noderna.

Noder med oanvänd kapacitet är bra för arbetsbelastningar som kan hantera avbrott, tidiga avslutningar eller borttagningar. Till exempel kan arbetsbelastningar som batchbearbetningsjobb, utvecklings- och testmiljöer och stora beräkningsarbetsbelastningar vara bra kandidater att schemalägga på en nodpool för oanvänd kapacitet.

Innan du börjar

  • Den här artikeln förutsätter en grundläggande förståelse av Kubernetes- och Azure Load Balancer-begrepp. Mer information finns i Viktiga koncept för Azure Kubernetes Service (AKS).
  • Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
  • När du skapar ett kluster för att använda en nodpool för oanvänd kapacitet måste klustret använda vm-skalningsuppsättningar för nodpooler och standard-SKU-lastbalanseraren . Du måste också lägga till en annan nodpool när du har skapat klustret, vilket beskrivs i den här självstudien.
  • Den här artikeln kräver att du kör Azure CLI version 2.14 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Begränsningar

Följande begränsningar gäller när du skapar och hanterar AKS-kluster med en nodpool för oanvänd kapacitet:

  • En nodpool för oanvänd kapacitet kan inte vara en standardnodpool. Den kan bara användas som en sekundär pool.
  • Du kan inte uppgradera kontrollplanet och nodpoolerna samtidigt. Du måste uppgradera dem separat eller ta bort nodpoolen Spot för att uppgradera kontrollplanet och återstående nodpooler samtidigt.
  • En nodpool för oanvänd kapacitet måste använda VM-skalningsuppsättningar.
  • Du kan inte ändra ScaleSetPriority eller SpotMaxPrice när du har skapat.
  • När du anger SpotMaxPricemåste värdet vara -1 eller ett positivt värde med upp till fem decimaler.
  • En nodpool för oanvänd kapacitet har kubernetes.azure.com/scalesetpriority:spot etiketten, kubernetes.azure.com/scalesetpriority=spot:NoSchedule tainten och systempoddarna har antitillhörighet.
  • Du måste lägga till motsvarande tolerans och tillhörighet för att schemalägga arbetsbelastningar i en nodpool för oanvänd kapacitet.

Lägga till en nodpool för oanvänd kapacitet i ett AKS-kluster

När du lägger till en nodpool för oanvänd kapacitet i ett befintligt kluster måste det vara ett kluster med flera nodpooler aktiverade. När du skapar ett AKS-kluster med flera nodpooler aktiverade skapar du en nodpool med en priority av Regular som standard. Om du vill lägga till en nodpool för oanvänd kapacitet måste du ange Spot som värde för priority. Mer information om hur du skapar ett AKS-kluster med flera nodpooler finns i Använda flera nodpooler.

  • Skapa en nodpool med hjälp priority av Spotaz aks nodepool add kommandot .

    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
    

I föregående kommando priority gör av Spot nodpoolen till en skalningsuppsättningsnodpool. Parametern eviction-policy är inställd på Delete, vilket är standardvärdet. När du anger borttagningsprincipen till Deletetas noder i den underliggande skalningsuppsättningen i nodpoolen bort när de tas bort.

Du kan också ange borttagningsprincipen till Deallocate, vilket innebär att noderna i den underliggande skalningsuppsättningen är inställda på tillståndet stoppad frigjord vid borttagning. Noder i det stoppade frigjorda tillståndet räknas mot din beräkningskvot och kan orsaka problem med klusterskalning eller uppgradering. Värdena priority och eviction-policy kan bara anges när nodpoolen skapas. Dessa värden kan inte uppdateras senare.

Det tidigare kommandot aktiverar även autoskalning av kluster, vilket vi rekommenderar att du använder med nodpooler med oanvänd kapacitet. Baserat på de arbetsbelastningar som körs i klustret skalar autoskalning av klustret upp och ned antalet noder. För nodpooler med oanvänd kapacitet skalar autoskalning av klustret upp antalet noder efter en borttagning om det fortfarande behövs fler noder. Om du ändrar det maximala antalet noder som en nodpool kan ha måste du också justera värdet maxCount som är associerat med autoskalning av klustret. Om du inte använder en autoskalning av kluster kommer spotpoolen så småningom att minska till 0 vid borttagning och kräva manuell åtgärd för att ta emot ytterligare spotnoder.

Viktigt!

Schemalägg endast arbetsbelastningar i nodpooler med oanvänd kapacitet som kan hantera avbrott, till exempel batchbearbetningsjobb och testmiljöer. Vi rekommenderar att du konfigurerar taints och toleranser i nodpoolen Spot för att säkerställa att endast arbetsbelastningar som kan hantera nodavhysningar schemaläggs i en nodpool för oanvänd kapacitet. Kommandot ovan lägger till exempel till en taint av kubernetes.azure.com/scalesetpriority=spot:NoSchedule, så att endast poddar med motsvarande tolerans schemaläggs på den här noden.

Verifiera nodpoolen För oanvänd kapacitet

  • Kontrollera att nodpoolen az aks nodepool show har lagts till med kommandot och bekräftar att scaleSetPriority är Spot.

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

Schemalägga en podd som ska köras på noden Spot

Om du vill schemalägga att en podd ska köras på en nod med oanvänd kapacitet kan du lägga till en tolerans- och nodtillhörighet som motsvarar den taint som tillämpas på noden Dekor.

I följande exempel visas en del av en YAML-fil som definierar en tolerans som motsvarar kubernetes.azure.com/scalesetpriority=spot:NoSchedule taint och en nodtillhörighet som motsvarar etiketten kubernetes.azure.com/scalesetpriority=spot som användes i föregående steg med requiredDuringSchedulingIgnoredDuringExecution och preferredDuringSchedulingIgnoredDuringExecution nodtillhörighetsregler:

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

När du distribuerar en podd med den här toleransen och nodtillhörigheten schemalägger Kubernetes podden på noderna med etiketten taint och tillämpad. I det här exemplet gäller följande regler:

  • Noden måste ha en etikett med nyckeln kubernetes.azure.com/scalesetpriorityoch värdet för etiketten måste vara spot.
  • Noden har helst en etikett med nyckeln another-node-label-key, och värdet för etiketten måste vara another-node-label-value.

Mer information finns i Tilldela poddar till noder.

Uppgradera en nodpool för oanvänd kapacitet

När du uppgraderar en nodpool för oanvänd kapacitet utfärdar AKS internt en avspärrning och ett borttagningsmeddelande, men inget avlopp tillämpas. Det finns inga överspänningsnoder tillgängliga för uppgraderingar av nodpooler med oanvänd kapacitet. Förutom dessa ändringar är beteendet vid uppgradering av nodpooler för oanvänd kapacitet konsekvent med andra typer av nodpooler.

Mer information om uppgradering finns i Uppgradera ett AKS-kluster.

Maxpris för en spotpool

Prissättningen för spotinstanser är variabel, baserat på region och SKU. Mer information finns i prisinformation för Linux och Windows.

Med variabel prissättning har du möjlighet att ange ett maxpris i US-dollar (USD) med upp till fem decimaler. Till exempel skulle värdet 0,98765 vara ett maxpris på 0,98765 USD per timme. Om du anger maxpriset till -1 tas inte instansen bort baserat på pris. Så länge det finns kapacitet och kvot är priset för instansen det lägre priset för antingen det aktuella priset för en Spot-instans eller för en standardinstans.

Nästa steg

I den här artikeln har du lärt dig hur du lägger till en nodpool för oanvänd kapacitet i ett AKS-kluster. Mer information om hur du styr poddar mellan nodpooler finns i Metodtips för avancerade scheduler-funktioner i AKS.