Eliminazione dei nodi operativi
Scopri come eliminare i nodi di lavoro e appunti sull'impostazione delle opzioni di cordon e rimozione con Kubernetes Engine (OKE).
È possibile eliminare nodi di lavoro specifici nei pool di nodi nei cluster creati con Kubernetes Engine.
Si tengano presenti le considerazioni seguenti:
- L'eliminazione di un nodo di lavoro elimina tale nodo di lavoro specifico dal pool di nodi e, facoltativamente, esegue lo scale down del pool di nodi stesso sottraendo 1 dal numero di nodi di lavoro specificati per il pool di nodi. Se si elimina un nodo di lavoro senza eseguire lo scale down del pool di nodi, viene creato un nuovo nodo di lavoro per sostituirlo.
- Quando si eliminano i nodi gestiti, le opzioni Cordon e rimozione selezionate determinano quando e come vengono terminati i nodi di lavoro. Vedere Note su cordonatura e rimozione di nodi gestiti prima della cessazione.
- Oltre a poter eliminare nodi di lavoro specifici, i nodi di lavoro vengono eliminati anche quando si esegue lo scale down dei pool di nodi e si modificano le configurazioni di posizionamento.
- Dopo aver contrassegnato un nodo di lavoro per l'eliminazione (durante un'operazione di eliminazione del nodo, un'operazione di scale down o una modifica alla configurazione del posizionamento), non è possibile recuperare il nodo. Anche se l'operazione di eliminazione del nodo inizialmente non riesce, l'operazione di aggiornamento successivo del pool di nodi (inclusa un'operazione di scale up) tenta di arrestare di nuovo il nodo.
- Kubernetes Engine crea i nodi di lavoro in un cluster con nomi generati automaticamente. I nomi dei nodi gestiti hanno il formato seguente:
oke-c<part-of-cluster-OCID>-n<part-of-node-pool-OCID>-s<part-of-subnet-OCID>-<slot>
. I nomi dei nodi virtuali sono gli stessi dell'indirizzo IP privato del nodo. Non modificare i nomi generati automaticamente dei nodi di lavoro. Se si desidera modificare il nome generato automaticamente di un nodo di lavoro ed eliminare il cluster, il nodo di lavoro rinominato non verrà eliminato. È necessario eliminare manualmente il nodo di lavoro rinominato. - Quando si elimina un nodo di lavoro da un pool di nodi, si imposta la proprietà Riduci dimensione pool di nodi (
isDecrementSize
nell'API) per indicare se si desidera eliminare il nodo di lavoro per eseguire lo scale down del pool di nodi di 1. Durante l'operazione di eliminazione del nodo, non tentare di eliminare lo stesso nodo e specificare un valore diverso per Riduci dimensione pool di nodi (isDecrementSize
). Se si desidera eliminare il nodo e specificare un valore diverso per Riduci dimensione pool di nodi (isDecrementSize
), attendere il completamento della prima operazione di eliminazione del nodo.
È possibile eliminare i nodi di lavoro utilizzando la console, l'interfaccia CLI e l'interfaccia API. Vedere Eliminazione di un nodo di lavoro.
Note sulla cordonatura e sull'eliminazione dei nodi gestiti prima della cessazione
Cordoni
Cordoning è il nome assegnato per contrassegnare un nodo di lavoro in un cluster Kubernetes come non programmabile. Il cordoning di un nodo di lavoro impedisce al kube-scheduler di posizionare nuovi pod su quel nodo, ma non influisce sui pod esistenti sul nodo. La connessione di un nodo di lavoro è un utile passo preparatorio prima di terminare il nodo per eseguire task amministrativi (ad esempio l'eliminazione del nodo, lo scale down di un pool di nodi e la modifica della configurazione del posizionamento). Per ulteriori informazioni, vedere Amministrazione manuale dei nodi nella documentazione di Kubernetes.
Rimozione
La rimozione è il nome dato per rimuovere in modo sicuro i pod da un nodo di lavoro in un cluster Kubernetes. Sgomberare in modo sicuro i pod assicura che i contenitori del pod terminino con grazia ed eseguano qualsiasi pulizia necessaria. Per ulteriori informazioni, consulta la sezione relativa alla estrazione sicura di un nodo e all'interruzione dei pod nella documentazione di Kubernetes.
Budget di interruzione dei pod
I budget per l'interruzione dei pod sono una funzione Kubernetes che limita il numero di interruzioni simultanee che un'applicazione subisce. L'utilizzo dei budget per l'interruzione dei pod garantisce un'elevata disponibilità delle applicazioni e, allo stesso tempo, consente di eseguire task amministrativi sui nodi di lavoro. I budget per l'interruzione dei pod possono impedire la rimozione dei pod durante la rimozione dei nodi di lavoro. Per ulteriori informazioni, vedere Specifica di un budget per l'interruzione dell'applicazione nella documentazione di Kubernetes.
Pool di nodi con stato "Richiede attenzione"
Quando si eliminano i nodi di lavoro dai cluster creati con Kubernetes Engine, è possibile utilizzare le seguenti opzioni Cordon and Drain per specificare quando e come i nodi di lavoro vengono terminati:
- Periodo di proroga di previsione (min): il periodo di tempo necessario per consentire di collegare ed eliminare i nodi di lavoro prima di terminarli. Accettare il valore predefinito (60 minuti) o specificare un'alternativa. Ad esempio, quando si esegue lo scale down di un pool di nodi o si modifica la relativa configurazione di posizionamento, potrebbe essere necessario consentire 30 minuti per collegare i nodi di lavoro ed eliminarli dai carichi di lavoro. Per terminare immediatamente i nodi di lavoro, senza cordonarli e drenarli, specificare 0 minuti.
- Forza cessazione dopo il periodo di tolleranza: indica se terminare i nodi di lavoro alla fine del periodo di tolleranza della rimozione, anche se non sono stati collegati e drenati correttamente. Per impostazione predefinita, questa opzione non è selezionata.
Selezionare questa opzione se si desidera che i nodi di lavoro vengano sempre terminati alla fine del periodo di tolleranza di rimozione, anche se non sono stati collegati e drenati correttamente.
Deselezionare questa opzione se non si desidera che i nodi di lavoro che non sono stati collegati correttamente e scaricati vengano terminati alla fine del periodo di tolleranza di rimozione. I pool di nodi contenenti nodi di lavoro che non sono stati terminati entro il periodo di tolleranza di rimozione hanno lo stato Richiede attenzione. Vedere Monitoraggio dei cluster.
Un pool di nodi con lo stato Richiede attenzione indica che uno o più nodi di lavoro nel pool di nodi non sono riusciti a rimuovere tutti i pod in esecuzione in tale pool entro il periodo di tolleranza di rimozione. Lo stato della richiesta di lavoro che ha avviato l'operazione di cessazione è impostato su Non riuscito. È possibile visualizzare il motivo dell'errore, inclusi i pod specifici che non possono essere rimossi, nei log delle richieste di lavoro (vedere Visualizzazione delle richieste di lavoro). Ci sono una serie di possibili motivi per cui un pod non può essere sfrattato, inclusi budget restrittivi per l'interruzione dei pod. Per ulteriori informazioni, consulta la sezione relativa a pianificazione, anticipazione ed eliminazione nella documentazione di Kubernetes.
Per risolvere lo stato Richiede attenzione di un pool di nodi e terminare i nodi di lavoro interessati, eseguire una delle azioni riportate di seguito.
- Eseguire di nuovo il comando originale e selezionare l'opzione Forza interruzione dopo il periodo di proroga. I nodi vengono terminati al termine del periodo di tolleranza dello sfratto, anche se non sono stati collegati e scaricati con successo.
- Esaminare il log delle richieste di lavoro per determinare il motivo dell'errore di rimozione, risolvere il motivo (ad esempio, creando un budget per l'interruzione del pod meno restrittivo) e rieseguire il comando originale.
Utilizzo dell'interfaccia CLI per risolvere lo stato "Richiede attenzione" di un pool di nodi
Per utilizzare l'interfaccia CLI per risolvere lo stato Needs Attenzione di un pool di nodi e terminare i nodi di lavoro interessati, immettere:
oci ce node-pool get --node-pool-id <nodepool-ocid> | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'
dove --node-pool-id <nodepool-ocid>
è l'OCID del pool di nodi con lo stato Richiede attenzione.
Ad esempio:
oci ce node-pool get --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya | jq '{ state: .data."lifecycle-state", nodes: (.data.nodes | .[] | {id, "node-error"} ) }'
La risposta al comando elenca i nodi di lavoro attualmente in stato di errore del nodo, insieme a una spiegazione. Ad esempio:
{
"state": "NEEDS_ATTENTION",
"nodes": {
"id": "ocid1.instance.oc1.iad.anu___4cq",
"node-error":
{
"code": "PodEvictionFailureError",
"message": "Pod(s) {sigterm - app - 55 c4f4f657 - wccqn} of Node ocid1.instance.oc1.iad.anuwc______4cq could not be evicted.",
"opc-request-id": null,
"status": null
}
}
}
In questo esempio, è possibile vedere che non è stato possibile rimuovere un pod dal nodo di lavoro entro il periodo di tolleranza della rimozione. Impossibile cessare il nodo di lavoro. È tua responsabilità identificare il motivo per cui il pod non può essere sfrattato e quindi risolvere il problema sottostante. Ad esempio, creando un budget per l'interruzione dei pod meno restrittivo.
Dopo aver risolto il problema, è possibile procedere ed eliminare il nodo di lavoro immettendo:
oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid>
Ad esempio:
oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq
Se si desidera forzare l'eliminazione del nodo di lavoro senza cordonare e svuotare il nodo di lavoro e senza correggere il problema sottostante, immettere:
oci ce node-pool delete-node --node-pool-id <nodepool-ocid> --node-id <node-ocid> --override-eviction-grace-duration PT0M
dove --override-eviction-grace-duration PT0M
imposta il periodo di tolleranza della rimozione su 0 minuti.
Ad esempio:
oci ce node-pool delete-node --node-pool-id ocid1.nodepool.oc1.iad.aaaaaaa______eya --node-id ocid1.instance.oc1.iad.anu___4cq --override-eviction-grace-duration PT0M
Pool di nodi con quantityPerSubnet impostato su 1 o più
Quando si creano e si aggiornano pool di nodi nelle release precedenti di Kubernetes Engine, è stato specificato il numero di nodi di lavoro desiderato in un pool di nodi immettendo un valore per la proprietà Quantità per subnet (quantityPerSubnet
nell'API).
Nelle release più recenti di Kubernetes Engine, è possibile specificare quanti nodi di lavoro si desidera inserire in un pool di nodi immettendo un valore per la proprietà Numero di nodi (size
nell'API).
Tenere presente che è possibile eliminare solo nodi di lavoro specifici (e selezionare le opzioni Cordon e rimozione) durante l'eliminazione dai pool di nodi con Quantità per subnet (quantityPerSubnet
) impostata su zero o nulla. Per eliminare nodi di lavoro specifici e selezionare le opzioni Cordon e rimozione da un pool di nodi meno recente con Quantità per subnet (quantityPerSubnet
) impostata su 1 o più, è innanzitutto necessario impostare Quantità per subnet (quantityPerSubnet
) su zero o su nullo. Dopo aver impostato Quantità per subnet (quantityPerSubnet
) su zero o nullo, è possibile specificare il numero di nodi di lavoro immettendo un valore per Numero di nodi (size
). Da quel momento in poi, è possibile eliminare nodi di lavoro specifici e selezionare le opzioni Collega ed elimina.
Per determinare il valore di Quantità per subnet (quantityPerSubnet
) per un pool di nodi, immettere il comando seguente:
oci ce node-pool get --node-pool-id <node-pool-ocid>