Questa pagina fornisce una panoramica incompatibilità dei nodi su Google Kubernetes Engine (GKE). Le incompatibilità dei nodi ti aiutano a specificare i nodi in cui per l'esecuzione dei carichi di lavoro.
I cluster Autopilot supportano l'uso delle incompatibilità dei nodi per la separazione dei carichi di lavoro . Per istruzioni, vedi Configura la separazione dei carichi di lavoro in GKE.
Panoramica
Quando invii un carico di lavoro da eseguire in un cluster, lo scheduler determina dove per posizionare i pod associati al carico di lavoro. Lo scheduler può inserire liberamente Pod su qualsiasi nodo che soddisfi la CPU, la memoria e la risorsa personalizzata del pod i tuoi requisiti.
Se il tuo cluster esegue diversi carichi di lavoro, potrebbe essere utile e il controllo su quali carichi di lavoro possono essere eseguiti su un particolare pool di nodi.
Un'incompatibilità dei nodi consente di contrassegnare un nodo in modo che lo scheduler evita o prevenga per alcuni pod. Una funzionalità complementare, le tolleranze, ti consente designano i pod che possono essere utilizzati nodi.
Incompatibilità e tolleranze lavorano insieme per garantire che i pod non vengano pianificati nodi inappropriati.
Le incompatibilità sono coppie chiave-valore associate a un effetto. La tabella seguente elenca gli effetti disponibili:
Effetto | Descrizione |
---|---|
NoSchedule |
I pod che non tollerano questa incompatibilità non vengono pianificati sul nodo. i pod esistenti non vengono rimossi dal nodo. |
PreferNoSchedule |
Kubernetes evita di pianificare pod che non tollerano questa incompatibilità nel nodo. |
NoExecute |
Il pod viene rimosso dal nodo se è già in esecuzione su quel nodo. e non è pianificato sul nodo se non è ancora in esecuzione sul nodo. |
Vantaggi dell'impostazione delle incompatibilità dei nodi in GKE
Puoi aggiungere incompatibilità dei nodi a cluster e nodi in GKE o utilizzando
kubectl taint
. La specifica delle incompatibilità dei nodi in GKE offre diversi vantaggi
più di kubectl
:
- Le incompatibilità vengono mantenute quando un nodo viene riavviato o sostituito.
- Le incompatibilità vengono create automaticamente quando un nodo viene aggiunto a un pool di nodi o a un cluster.
- Le incompatibilità vengono create automaticamente durante la scalabilità automatica del cluster.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti attività:
- Attiva l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine .
- Se vuoi utilizzare Google Cloud CLI per questa attività,
install e poi
inizializzare
con gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente
eseguendo
gcloud components update
.
Crea un cluster con incompatibilità dei nodi
Quando crei un cluster in GKE, puoi assegnare incompatibilità dei nodi nel cluster. Questo assegna le incompatibilità a tutti i nodi creati con il cluster.
Se crei un cluster Standard con incompatibilità dei nodi con NoSchedule
o NoExecute
, GKE non può
pianificare alcuni componenti gestiti da GKE, come kube-dns
metrics-server
sul pool di nodi predefinito creato da GKE quando
devi creare il cluster. GKE non può pianificare questi componenti
perché non hanno le tolleranze corrispondenti per le incompatibilità dei nodi.
Devi aggiungere un nuovo pool di nodi che soddisfi una delle seguenti condizioni:
- Nessuna incompatibilità
- Una incompatibilità con l'effetto
PreferNoSchedule
- Incompatibilità con
components.gke.io/gke-managed-components=true:NoSchedule
Ognuna di queste condizioni consente a GKE di pianificare GKE i componenti gestiti nel nuovo pool di nodi.
Per istruzioni, consulta Isolare i carichi di lavoro su nodi dedicati.
gcloud
Per creare un cluster con incompatibilità dei nodi, esegui questo comando:
gcloud container clusters create CLUSTER_NAME \
--node-taints KEY=VALUE:EFFECT
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.EFFECT
: uno dei seguenti valori effetto:PreferNoSchedule
,NoSchedule
oNoExecute
.KEY=VALUE
: una coppia chiave-valore associata conEFFECT
.
Ad esempio, il seguente comando applica un'incompatibilità con un valore-chiave
dedicated=experimental
con un effetto di PreferNoSchedule
:
gcloud container clusters create example-cluster \
--node-taints dedicated=experimental:PreferNoSchedule
Console
Per creare un cluster con incompatibilità dei nodi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Fai clic su add_box Crea.
Configura il cluster come preferisci.
Dal riquadro di navigazione, in Pool di nodi, espandi il pool di nodi modificare, quindi fai clic su Metadati.
Nella sezione Incompatibilità dei nodi, fai clic su add Aggiungi incompatibilità.
Nell'elenco a discesa Effetto, seleziona l'effetto desiderato.
Inserisci la coppia chiave-valore che ti interessa nei campi Chiave e Valore.
Fai clic su Crea.
API
Quando utilizzi l'API per creare un cluster, includi il campo nodeTaints
sotto nodeConfig
. Ecco un esempio:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters
{
'cluster': {
'name': 'example-cluster',
'nodeConfig': {
'nodeTaints': [
{
'key': 'special',
'Value': 'gpu',
'effect': 'PreferNoSchedule'
}
]
...
}
...
}
}
Crea un pool di nodi con incompatibilità dei nodi
Quando applichi un'incompatibilità a un nodo, sono consentiti solo i pod che tollerano l'incompatibilità eseguire sul nodo. In un cluster GKE, puoi applicare un'incompatibilità a un pool di nodi, che applica l'incompatibilità a tutti i nodi nel pool.
Per creare un pool di nodi con incompatibilità dei nodi, puoi utilizzare Google Cloud CLI, la console Google Cloud o l'API GKE.
gcloud
Per creare un pool di nodi con incompatibilità dei nodi, esegui questo comando:
gcloud container node-pools create POOL_NAME \
--cluster CLUSTER_NAME \
--node-taints KEY=VALUE:EFFECT
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodi da creare.CLUSTER_NAME
: il nome del cluster in cui viene creato un pool di nodi.EFFECT
: uno dei seguenti valori effetto:PreferNoSchedule
,NoSchedule
oNoExecute
.KEY=VALUE
: una coppia chiave-valore associata conEFFECT
.
Ad esempio, il comando seguente crea un pool di nodi su un cluster esistente
e applica un'incompatibilità con una coppia chiave-valore dedicated=experimental
con un
Effetto NoSchedule
:
gcloud container node-pools create example-pool --cluster example-cluster \
--node-taints dedicated=experimental:NoSchedule
Questo comando crea un pool di nodi e applica un'incompatibilità con un valore-chiave
special=gpu
con un effetto NoExecute
:
gcloud container node-pools create example-pool-2 --cluster example-cluster \
--node-taints special=gpu:NoExecute
Console
Per creare un pool di nodi con incompatibilità dei nodi, segui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Nella pagina Dettagli cluster, fai clic su add_box Aggiungi pool di nodi.
Nel riquadro di navigazione, fai clic su Metadati.
In Incompatibilità dei nodi, fai clic su add Aggiungi incompatibilità.
Seleziona l'effetto desiderato nell'elenco a discesa Effetto.
Inserisci la coppia chiave-valore che ti interessa nei campi Chiave e Valore.
Fai clic su Crea.
API
Quando utilizzi l'API per creare un pool di nodi, includi il campo nodeTaints
sotto nodeConfig
. Ecco un esempio:
POST https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/CLUSTER_ID/nodePools
{
'nodePool': {
'name': 'example-pool',
'nodeConfig': {
'nodeTaints': [
{
'key': 'dedicated',
'Value': 'experimental',
'effect': 'NoSchedule'
}
]
...
}
...
}
}
Configura i pod per tollerare un'incompatibilità
Puoi configurare i pod in modo che tollerano un'incompatibilità includendo il campo tolerations
nei pod e la specifica del prodotto. Ecco una parte di
Specifica del pod.
Questo pod può essere pianificato su un nodo con dedicated=experimental:NoSchedule
incompatibilità:
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
Aggiungi un'incompatibilità a un nodo esistente
Puoi aggiungere incompatibilità a un nodo esistente utilizzando il metodo
kubectl taint
. Sconsigliamo di aggiungere un'incompatibilità alle VM spot utilizzando
kubectl
perché tutti i nuovi nodi che GKE aggiunge al pool di nodi
non ereditano l'incompatibilità.
kubectl taint nodes NODE_NAME KEY=VALUE:EFFECT
Ad esempio, il seguente comando applica un'incompatibilità con un valore-chiave
dedicated=experimental
con un effetto NoSchedule
per il nodo mynode
:
kubectl taint nodes mynode dedicated=experimental:NoSchedule
Puoi anche aggiungere incompatibilità ai nodi che hanno un'etichetta specifica utilizzando il metodo
Selettore -l
insieme all'etichetta e al valore specificati:
kubectl taint nodes -l LABEL=LABEL_VALUE KEY=VALUE:EFFECT
Ad esempio, il seguente comando aggiunge un'incompatibilità con la chiave dedicated-pool
ai nodi GKE nel pool di nodi my_pool
:
kubectl taint nodes -l cloud.google.com/gke-nodepool=my_pool dedicated-pool=my_pool:NoSchedule
Ispeziona le incompatibilità per un nodo
Per visualizzare le incompatibilità di un nodo, utilizza lo strumento a riga di comando kubectl
.
Esegui questo comando per ottenere un elenco di tutti i nodi nel tuo cluster:
kubectl get nodes
Controlla un nodo eseguendo questo comando:
kubectl describe node NODE_NAME
Nell'output restituito, cerca il campo
Taints
. L'output è simile a:Taints: dedicated-pool=mypool:NoSchedule
Rimozione di un'incompatibilità da un nodo
Puoi utilizzare kubectl taint
per rimuovere le incompatibilità. Puoi rimuovere le incompatibilità per chiave,
o un effetto-chiave.
Ad esempio, il seguente comando rimuove tutte le incompatibilità con dedicated
dal nodo mynode
:
kubectl taint nodes mynode dedicated-
Rimuovi tutte le incompatibilità da un pool di nodi
Per rimuovere tutte le incompatibilità da un pool di nodi, esegui questo comando:
gcloud beta container node-pools update POOL_NAME \
--node-taints="" \
--cluster=CLUSTER_NAME
Sostituisci quanto segue:
POOL_NAME
: il nome del pool di nodi da modificare.CLUSTER_NAME
: il nome del cluster in cui è stato creato un pool di nodi.
Passaggi successivi
- Scopri di più sui pool di nodi.
- Leggi la documentazione di Kubernetes per incompatibilità e tolleranze.
- Leggi la documentazione di
kubectl taint
.