Share via


Aggiungere un pool di nodi spot di Azure a un cluster del servizio Azure Kubernetes servizio Azure Kubernetes

In questo articolo si aggiunge un pool di nodi spot secondario a un cluster del servizio Azure Kubernetes esistente servizio Azure Kubernetes.

Un pool di nodi spot è un pool di nodi supportato da un set di scalabilità di macchine virtuali spot di Azure. Con le macchine virtuali spot nel cluster del servizio Azure Kubernetes, è possibile sfruttare la capacità di Azure non utilizzata con risparmi significativi sui costi. La quantità di capacità non utilizzata disponibile varia in base a molti fattori, ad esempio dimensioni del nodo, area e ora del giorno.

Quando si distribuisce un pool di nodi Spot, Azure alloca i nodi Spot se è disponibile la capacità e distribuisce un set di scalabilità Spot che esegue il backup del pool di nodi Spot in un singolo dominio predefinito. Non esiste alcun contratto di servizio per i nodi Spot. Non esistono garanzie di disponibilità elevata. Se Azure necessita di capacità indietro, l'infrastruttura di Azure rimuove i nodi Spot.

I nodi spot sono ideali per i carichi di lavoro che possono gestire interruzioni, terminazioni anticipata o rimozione. Ad esempio, i carichi di lavoro come processi di elaborazione batch, ambienti di sviluppo e test e carichi di lavoro di calcolo di grandi dimensioni possono essere candidati validi per la pianificazione in un pool di nodi spot.

Operazioni preliminari

  • Questo articolo presuppone una conoscenza di base dei concetti relativi a Kubernetes e Azure Load Balancer. Per altre informazioni, vedere Concetti di base relativi a Kubernetes per il servizio Azure Kubernetes.
  • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • Quando si crea un cluster per l'uso di un pool di nodi spot, il cluster deve usare set di scalabilità di macchine virtuali per i pool di nodi e il servizio di bilanciamento del carico dello SKU Standard. È anche necessario aggiungere un altro pool di nodi dopo aver creato il cluster, illustrato in questa esercitazione.
  • Questo articolo richiede l'esecuzione dell'interfaccia della riga di comando di Azure versione 2.14 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Limiti

Quando si creano e gestiscono cluster del servizio Azure Kubernetes con un pool di nodi Spot, si applicano le limitazioni seguenti:

  • Un pool di nodi spot non può essere un pool di nodi predefinito, ma può essere usato solo come pool secondario.
  • Non è possibile aggiornare contemporaneamente il piano di controllo e i pool di nodi. È necessario aggiornarli separatamente o rimuovere il pool di nodi Spot per aggiornare il piano di controllo e i pool di nodi rimanenti contemporaneamente.
  • Un pool di nodi spot deve usare set di scalabilità di macchine virtuali.
  • Non è possibile modificare ScaleSetPriority o SpotMaxPrice dopo la creazione.
  • Quando si imposta SpotMaxPrice, il valore deve essere -1 o un valore positivo con un massimo di cinque posizioni decimali.
  • Un pool di nodi spot ha l'etichetta kubernetes.azure.com/scalesetpriority:spot , il kubernetes.azure.com/scalesetpriority=spot:NoSchedule taint e i pod di sistema hanno anti-affinità.
  • È necessario aggiungere una tollerazione e un'affinità corrispondenti per pianificare i carichi di lavoro in un pool di nodi spot.

Aggiungere un pool di nodi spot a un cluster del servizio Azure Kubernetes

Quando si aggiunge un pool di nodi spot a un cluster esistente, deve essere un cluster con più pool di nodi abilitati. Quando si crea un cluster del servizio Azure Kubernetes con più pool di nodi abilitati, si crea un pool di nodi con un priority valore di per Regular impostazione predefinita. Per aggiungere un pool di nodi spot, è necessario specificare Spot come valore per priority. Per altri dettagli sulla creazione di un cluster del servizio Azure Kubernetes con più pool di nodi, vedere Usare più pool di nodi.

  • Creare un pool di nodi con un priority di Spot usando il az aks nodepool add comando .

    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
    

Nel comando precedente, l'oggetto priority di rende il pool di Spot nodi un pool di nodi spot. Il eviction-policy parametro è impostato su Delete, ovvero il valore predefinito. Quando si impostano i criteri di rimozione su Delete, i nodi nel set di scalabilità sottostante del pool di nodi vengono eliminati quando vengono rimossi.

È anche possibile impostare i criteri di rimozione su Deallocate, il che significa che i nodi del set di scalabilità sottostante vengono impostati sullo stato arrestato-deallocato al momento della rimozione. I nodi nel conteggio dello stato di deallocazione arrestata rispetto alla quota di calcolo e possono causare problemi con il ridimensionamento o l'aggiornamento del cluster. I priority valori e eviction-policy possono essere impostati solo durante la creazione del pool di nodi. Questi valori non possono essere aggiornati in un secondo momento.

Il comando precedente abilita anche il ridimensionamento automatico del cluster, che è consigliabile usare con i pool di nodi Spot. In base ai carichi di lavoro in esecuzione nel cluster, il ridimensionamento automatico del cluster aumenta e riduce il numero di nodi. Per i pool di nodi spot, il ridimensionamento automatico del cluster aumenta il numero di nodi dopo una rimozione se sono ancora necessari altri nodi. Se si modifica il numero massimo di nodi che un pool di nodi può avere, è anche necessario modificare il maxCount valore associato al ridimensionamento automatico del cluster. Se non si usa un componente di scalabilità automatica del cluster, al momento della rimozione, il pool spot si ridurrà a 0 e richiederà un'operazione manuale per ricevere eventuali nodi spot aggiuntivi.

Importante

Pianificare solo i carichi di lavoro nei pool di nodi spot che possono gestire interruzioni, ad esempio processi di elaborazione batch e ambienti di test. È consigliabile configurare i contenitori e le tolleranze nel pool di nodi spot per assicurarsi che solo i carichi di lavoro in grado di gestire le eliminazioni dei nodi siano pianificati in un pool di nodi spot. Ad esempio, il comando precedente aggiunge un taint di kubernetes.azure.com/scalesetpriority=spot:NoSchedule, quindi solo i pod con una tollerazione corrispondente vengono pianificati in questo nodo.

Verificare il pool di nodi spot

  • Verificare che il pool di nodi sia stato aggiunto usando il az aks nodepool show comando e confermando che scaleSetPriority è Spot.

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

Pianificare l'esecuzione di un pod nel nodo Spot

Per pianificare l'esecuzione di un pod in un nodo Spot, è possibile aggiungere un'affinità di tollerazione e nodo corrispondente al taint applicato al nodo Spot.

L'esempio seguente mostra una parte di un file YAML che definisce una tollerazione corrispondente al kubernetes.azure.com/scalesetpriority=spot:NoSchedule taint e un'affinità di nodo corrispondente all'etichetta kubernetes.azure.com/scalesetpriority=spot usata nel passaggio precedente con requiredDuringSchedulingIgnoredDuringExecution le regole di affinità del nodo e preferredDuringSchedulingIgnoredDuringExecution :

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

Quando si distribuisce un pod con questa affinità di tollerazione e nodo, Kubernetes pianifica correttamente il pod nei nodi con il taint e l'etichetta applicati. In questo esempio si applicano le regole seguenti:

  • Il nodo deve avere un'etichetta con la chiave kubernetes.azure.com/scalesetprioritye il valore di tale etichetta deve essere spot.
  • Il nodo ha preferibilmente un'etichetta con la chiave another-node-label-keye il valore di tale etichetta deve essere another-node-label-value.

Per altre informazioni, vedere Assegnazione di pod ai nodi.

Aggiornare un pool di nodi spot

Quando si aggiorna un pool di nodi Spot, il servizio Azure Kubernetes emette internamente un blocco e un avviso di rimozione, ma non viene applicato alcun svuotamento. Non sono disponibili nodi di picco per gli aggiornamenti del pool di nodi spot. Al di fuori di queste modifiche, il comportamento durante l'aggiornamento dei pool di nodi spot è coerente con quello di altri tipi di pool di nodi.

Per altre informazioni sull'aggiornamento, vedere Aggiornare un cluster del servizio Azure Kubernetes.

Prezzo massimo per una piscina spot

I prezzi per le istanze spot sono variabili, in base all'area e alla SKU. Per altre informazioni, vedere informazioni sui prezzi per Linux e Windows.

Con i prezzi variabili, è possibile impostare un prezzo massimo, in dollari USA (USD) usando fino a cinque cifre decimali. Ad esempio, il valore 0,98765 sarebbe un prezzo massimo di $ 0,98765 USD all'ora. Se si imposta il prezzo massimo su -1, l'istanza non verrà rimossa in base al prezzo. Se è disponibile capacità e quota, il prezzo per l'istanza sarà il prezzo inferiore del prezzo corrente per un'istanza Spot o per un'istanza standard.

Passaggi successivi

In questo articolo si è appreso come aggiungere un pool di nodi spot a un cluster del servizio Azure Kubernetes. Per altre informazioni su come controllare i pod tra pool di nodi, vedere Procedure consigliate per le funzionalità avanzate dell'utilità di pianificazione nel servizio Azure Kubernetes.