Usare i nodi in un cluster del servizio Azure Kubernetes (servizio Azure Kubernetes AKS)
Questo articolo descrive come usare i nodi taints in un cluster del servizio Azure Kubernetes (servizio Azure Kubernetes).
Panoramica
Il meccanismo di pianificazione del servizio Azure Kubernetes è responsabile dell'inserimento di pod nei nodi e si basa sull'utilità di pianificazione Kubernetes upstream, kube-scheduler. È possibile vincolare un pod per l'esecuzione in nodi specifici collegando i pod a un set di nodi usando l'affinità del nodo o indicando al nodo di respingere un set di pod usando itaints del nodo, che interagiscono con l'utilità di pianificazione del servizio Azure Kubernetes.
I nodi funzionano contrassegnando un nodo in modo che l'utilità di pianificazione eviti di posizionare determinati pod nei nodi contrassegnati. È possibile posizionare tolerazioni in un pod per consentire all'utilità di pianificazione di pianificare il pod in un nodo con un taint corrispondente. Taints e tolerations interagiscono per controllare il modo in cui l'utilità di pianificazione inserisce i pod nei nodi. Per altre informazioni, vedere esempi di casi d'uso di taints e tolerations.
I taints sono coppie chiave-valore con un effetto. Esistono tre valori per il campo dell'effetto quando si usano i nodi taints: NoExecute
, NoSchedule
e PreferNoSchedule
.
NoExecute
: i pod già in esecuzione nel nodo vengono rimossi immediatamente se non hanno una tolleranza corrispondente. Se un pod ha una tollerazione corrispondente, potrebbe essere rimosso setolerationSeconds
specificato.NoSchedule
: solo i pod con una tolerazione corrispondente vengono inseriti in questo nodo. I pod esistenti non vengono rimossi.PreferNoSchedule
: l'utilità di pianificazione evita di posizionare i pod che non dispongono di una tolleranza corrispondente.
Opzioni taint del nodo
Esistono due tipi di nodi che possono essere applicati ai nodi del servizio Azure Kubernetes: nodi taints etaints di inizializzazione dei nodi.
- I nodi sono destinati a rimanere in modo permanente nel nodo per la pianificazione dei pod con affinità di nodo. I nodi possono essere aggiunti, aggiornati o rimossi completamente usando l'API del servizio Azure Kubernetes.
- I contenitori di inizializzazione dei nodi vengono inseriti nel nodo in fase di avvio e devono essere usati temporaneamente, ad esempio negli scenari in cui potrebbe essere necessario tempo aggiuntivo per configurare i nodi. È possibile rimuovere il taint di inizializzazione dei nodi usando l'API Kubernetes e non sono garantiti durante il ciclo di vita del nodo. Vengono visualizzati solo dopo che un nodo viene ridimensionato o aggiornato/ricreato l'immagine. I nuovi nodi hanno ancora il taint di inizializzazione del nodo dopo il ridimensionamento. I contenitori di inizializzazione del nodo vengono visualizzati in tutti i nodi dopo l'aggiornamento. Se si vuole rimuovere completamente i contenitori di inizializzazione, è possibile rimuoverli usando l'API del servizio Azure Kubernetes dopo aver rimosso i nodi usando l'API Kubernetes. Dopo aver rimosso i contenitori di inizializzazione dalla specifica del cluster usando l'API del servizio Azure Kubernetes, i nodi appena creati non vengono creati con tali contenitori di inizializzazione. Se il taint di inizializzazione è ancora presente nei nodi esistenti, è possibile rimuoverlo definitivamente eseguendo un'operazione di aggiornamento dell'immagine del nodo.
Nota
I taints e le etichette dei nodi applicati usando l'API del pool di nodi del servizio Azure Kubernetes non sono modificabili dall'API Kubernetes e viceversa. Le modifiche ai contenitori di sistema non sono consentite.
Questo non si applica ai contenitori di inizializzazione dei nodi.
Usare i nodi taints
Prerequisiti
Questo articolo presuppone che sia presente un cluster del servizio Azure Kubernetes esistente. Se è necessario un cluster del servizio Azure Kubernetes, è possibile crearne uno usando l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure.
Creare un pool di nodi con un taint del nodo
Creare un pool di nodi con un taint usando il
az aks nodepool add
comando e usare il--node-taints
parametro per specificaresku=gpu:NoSchedule
per il taint.az aks nodepool add \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Controllare lo stato del pool di nodi.
Aggiornare un pool di nodi per aggiungere un taint del nodo
Aggiornare un pool di nodi per aggiungere un taint del nodo usando il
az aks nodepool update
comando e usare il--node-taints
parametro per specificaresku=gpu:NoSchedule
per il taint.az aks nodepool update \ --resource-group $RESOURCE_GROUP_NAME \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-taints "sku=gpu:NoSchedule" \ --no-wait
Controllare lo stato del pool di nodi.
Usare i contenitori di inizializzazione dei nodi (anteprima)
Importante
Le funzionalità di anteprima del servizio Azure Kubernetes sono disponibili in modalità self-service e opzionale. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:
Prerequisiti e limitazioni
- È necessaria la versione
3.0.0b3
dell'interfaccia della riga di comando di Azure o successivamente installata e configurata. Eseguireaz --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. - È possibile applicare i contenitori di inizializzazione solo tramite la creazione o l'aggiornamento del cluster quando si usa l'API del servizio Azure Kubernetes. Se si usano i modelli di Resource Manager, è possibile specificare i contenitori di inizializzazione dei nodi durante la creazione e l'aggiornamento del pool di nodi.
- Non è possibile applicare i contenitori di inizializzazione ai pool di nodi Windows usando l'interfaccia della riga di comando di Azure.
Ottenere le credenziali per il cluster
Ottenere le credenziali per il cluster del servizio Azure Kubernetes usando il comando
az aks get-credentials
.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Installare l'estensione aks-preview
dell'interfaccia della riga di comando di Azure.
Registrare o aggiornare l'estensione aks-preview usando il comando
az extension add
oaz extension update
.# Register the aks-preview extension az extension add --name aks-preview # Update the aks-preview extension az extension update --name aks-preview
Registrare il flag di funzionalità NodeInitializationTaintsPreview
Registrare il flag di funzionalità
NodeInitializationTaintsPreview
usando il comandoaz feature register
.az feature register --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Sono necessari alcuni minuti per visualizzare lo stato Registered.
Verificare lo stato della registrazione usando il comando
az feature show
.az feature show --namespace "Microsoft.ContainerService" --name "NodeInitializationTaintsPreview"
Quando lo stato riflette Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando
az provider register
.az provider register --namespace Microsoft.ContainerService
Creare un cluster con un taint di inizializzazione del nodo
Creare un cluster con un taint di inizializzazione del nodo usando il
az aks create
comando e il--node-initialization-taints
parametro da specificaresku=gpu:NoSchedule
per il taint.Importante
L'inizializzazione del nodo si applica a tutti i pool di nodi nel cluster. Per applicare il taint di inizializzazione a un nodo specifico, è possibile usare un modello di Resource Manager anziché l'interfaccia della riga di comando.
az aks create \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-count 1 \ --node-init-taints "sku=gpu:NoSchedule" \ --generate-ssh-keys
Controllare lo stato del pool di nodi.
Aggiornare un cluster per aggiungere un taint di inizializzazione del nodo
Aggiornare un cluster per aggiungere un taint di inizializzazione del nodo usando il
az aks update
comando e il--node-initialization-taints
parametro da specificaresku=gpu:NoSchedule
per il taint.Importante
Quando si aggiorna un cluster con un taint di inizializzazione del nodo, letaints si applicano a tutti i pool di nodi nel cluster. È possibile visualizzare gli aggiornamenti per l'inizializzazione dei nodi nel nodo dopo un'operazione di ricreazione dell'immagine.
az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints "sku=gpu:NoSchedule"
Controllare lo stato del pool di nodi.
Controllare lo stato del pool di nodi
Dopo aver applicato il taint del nodo o il taint di inizializzazione, controllare lo stato del pool di nodi usando il
az aks nodepool list
comando .az aks nodepool list --resource-group $RESOURCE_GROUP_NAME --cluster-name $CLUSTER_NAME
Se sono stati applicati nodi, l'output di esempio seguente mostra che il
<node-pool-name>
pool di nodi èCreating
nodi con l'oggetto specificatonodeTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Se è stata applicata l'inizializzazione dei nodi, l'output di esempio seguente mostra che il
<node-pool-name>
pool di nodi èCreating
nodi con l'oggetto specificatonodeInitializationTaints
:[ { ... "count": 1, ... "name": "<node-pool-name>", "orchestratorVersion": "1.15.7", ... "provisioningState": "Creating", ... "nodeInitializationTaints": [ "sku=gpu:NoSchedule" ], ... }, ... ]
Verificare che il taint sia impostato nel nodo
Controllare i nodi taints e i contenitori di inizializzazione dei nodi nella configurazione del nodo usando il
kubectl describe node
comando .kubectl describe node $NODE_NAME
Se sono stati applicati nodi, l'output di esempio seguente mostra che il
<node-pool-name>
pool di nodi ha specificatoTaints
:[ ... Name: <node-pool-name> ... Taints: sku=gpu:NoSchedule ... ], ... ... ]
Rimuovere i nodi taints
Rimuovere un taint del nodo specifico
Rimuovere i nodi taints usando il
az aks nodepool update
comando . Il comando di esempio seguente rimuove il"sku=gpu:NoSchedule"
taint del nodo dal pool di nodi.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --node-taints "sku=gpu:NoSchedule"
Rimuovere tutti i nodi taints
Rimuovere tutti i nodi taints da un pool di nodi usando il
az aks nodepool update
comando . Il comando di esempio seguente rimuove tutti i nodi taints dal pool di nodi.az aks nodepool update \ --cluster-name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --name $NODE_POOL_NAME \ --node-taints ""
Rimuovere i contenitori di inizializzazione dei nodi
Sono disponibili le opzioni seguenti per rimuovere i contenitori di inizializzazione dei nodi dal nodo:
- Rimuovere temporaneamente i contenitori di inizializzazione dei nodi usando l'API Kubernetes. Se vengono rimossi in questo modo, i taints vengono nuovamente visualizzati dopo il ridimensionamento o l'aggiornamento dei nodi. I nuovi nodi hanno ancora il taint di inizializzazione del nodo dopo il ridimensionamento. I contenitori di inizializzazione del nodo vengono visualizzati in tutti i nodi dopo l'aggiornamento.
- Rimuovere definitivamente l'inizializzazione dei nodi rimuovendo il nodo usando l'API Kubernetes e quindi rimuovendo il taint usando l'API del servizio Azure Kubernetes. Dopo aver rimosso i taints di inizializzazione dalla specifica del cluster usando l'API del servizio Azure Kubernetes, i nodi appena creati dopo le operazioni di ricreazione dell'immagine non hanno piùtaint di inizializzazione.
Quando si rimuovono tutte le occorrenze del taint di inizializzazione dalle repliche del pool di nodi, il taint di inizializzazione esistente potrebbe essere nuovamente visualizzato dopo un aggiornamento con eventuali nuovi contenitori di inizializzazione.
Rimuovere temporaneamente i contenitori di inizializzazione dei nodi
Rimuovere temporaneamente i taints di inizializzazione del nodo usando il
kubectl taint nodes
comando .Questo comando rimuove il taint solo dal nodo specificato. Se si vuole rimuovere il taint da ogni nodo nel pool di nodi, è necessario eseguire il comando per ogni nodo da cui si vuole rimuovere il taint.
kubectl taint nodes $NODE_POOL_NAME sku=gpu:NoSchedule-
Una volta rimosso, l'inizializzazione dei nodi viene nuovamente visualizzata dopo il ridimensionamento o l'aggiornamento dei nodi.
Rimuovere definitivamente i contenitori di inizializzazione dei nodi
Seguire la procedura descritta in Rimuovere temporaneamente i taints di inizializzazione dei nodi per rimuovere il taint di inizializzazione del nodo usando l'API Kubernetes.
Rimuovere il taint dal nodo usando l'API del servizio Azure Kubernetes usando il
az aks update
comando . Questo comando rimuove il taint di inizializzazione del nodo da ogni nodo del cluster.az aks update \ --resource-group $RESOURCE_GROUP_NAME \ --name $CLUSTER_NAME \ --node-init-taints ""
Verificare che il taint sia stato rimosso dal nodo
Controllare i nodi taints e i contenitori di inizializzazione dei nodi nella configurazione del nodo usando il
kubectl describe node
comando .kubectl describe node $NODE_NAME
Se è stato rimosso un taint del nodo, l'output di esempio seguente mostra che il
<node-pool-name>
pool di nodi non ha il taint rimosso inTaints
:[ ... Name: <node-pool-name> ... Taints: ... ], ... ... ]
Passaggi successivi
- Altre informazioni sui casi d'uso di esempio per i contenitori e le tolleranze.
- Altre informazioni sulle procedure consigliate per le funzionalità avanzate dell'utilità di pianificazione del servizio Azure Kubernetes.
- Altre informazioni sulle etichette Kubernetes sono disponibili nella documentazione sulle etichette di Kubernetes.
Azure Kubernetes Service
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per