Riparazione automatica dei nodi e controllo di integrità

Nei cluster Anthos su VMware (GKE On-Prem), il controllo di integrità periodico e la riparazione automatica dei nodi sono abilitati per impostazione predefinita.

La funzionalità di riparazione automatica dei nodi rileva e ripara continuamente i nodi non integri in un cluster.

I controlli di integrità periodici vengono eseguiti ogni quindici minuti. I controlli sono gli stessi eseguiti da gkectl diagnose cluster. I risultati vengono visualizzati come log ed eventi negli oggetti Cluster nel cluster di amministrazione.

Assicurati che ciascuno dei tuoi cluster di amministrazione e utenti disponga di un indirizzo IP aggiuntivo per la riparazione automatica dei nodi.

Malattie

Le seguenti condizioni indicano che un nodo non è integro:

  • La condizione del nodo NotReady è true per circa 10 minuti.

  • Lo stato della macchina è Unavailable per circa 10 minuti dopo la creazione.

  • Lo stato della macchina non è Available per circa 30 minuti dopo la creazione della VM.

  • Nessun oggetto nodo (nodeRef è nil) corrispondente a una macchina nello stato Available per circa 10 minuti.

  • La condizione del nodo DiskPressure è true per circa 30 minuti.

Strategia di riparazione

Cluster Anthos su VMware avvia una riparazione su un nodo se il nodo soddisfa almeno una delle condizioni nell'elenco precedente.

La riparazione svuota il nodo in stato non integro e crea una nuova VM. Se lo svuotamento del nodo non è riuscito per un'ora, la riparazione forza lo svuotamento e scollega in modo sicuro i dischi gestiti Kubernetes collegati.

Se nello stesso MachineDeployment sono presenti più nodi non integri, la riparazione viene eseguita su uno solo di questi nodi alla volta.

Il numero di riparazioni orarie per un pool di nodi è limitato a un massimo di:

  • Tre
  • Dieci per cento del numero di nodi nel pool di nodi

Abilitazione della riparazione dei nodi e del controllo di integrità per un nuovo cluster

Nel file di configurazione del cluster amministratore o utente, imposta autoRepair.enabled su true:

autoRepair:
  enabled: true

Continua con i passaggi per creare il cluster admin o utente.

Abilitazione della riparazione dei nodi e del controllo di integrità per un cluster utente esistente

Nel file di configurazione del cluster utente, imposta autoRepair.enabled su true:

Aggiorna il cluster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Sostituisci quanto segue:

  • ADMIN_CLUSTER_KUBECONFIG: il percorso del file kubeconfig del cluster di amministrazione

  • USER_CLUSTER_CONFIG: il percorso del file di configurazione del cluster utente

Abilitazione della riparazione dei nodi e del controllo di integrità per un cluster di amministrazione esistente

Nel tuo file di configurazione del cluster amministratore, imposta autoRepair.enabled su true:

Aggiorna il cluster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Sostituisci ADMIN_CLUSTER_CONFIG con il percorso del file di configurazione del cluster di amministrazione.

Visualizzazione dei log da un controllo di integrità

Elenca tutti i pod del controllo di integrità nel cluster di amministrazione:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods --all-namespaces | grep cluster-health-controller

L'output è simile al seguente:

kube-system       cluster-health-controller-6c7df455cf-zlfh7   2/2   Running
my-user-cluster   cluster-health-controller-5d5545bb75-rtz7c   2/2   Running

Per visualizzare i log di un determinato controllo di integrità, recupera i log del container cluster-health-controller in uno dei pod. Ad esempio, per visualizzare i log per my-user-cluster nell'output precedente:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster logs \
    cluster-health-controller-5d5545bb75-rtz7c cluster-health-controller

Visualizzare gli eventi da un controllo di integrità

Elenca tutti gli oggetti del cluster nel cluster di amministrazione:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get clusters --all-namespaces

L'output è simile al seguente:

default            gke-admin-ldxh7   2d15h
my-user-cluster    my-user-cluster   2d12h

Per visualizzare gli eventi per un determinato cluster, esegui kubectl describe cluster con il flag --show-events. Ad esempio, per visualizzare gli eventi per my-user-cluster nell'output precedente:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace my-user-cluster \
    describe --show-events cluster my-user-cluster

Output di esempio:

Events:
  Type     Reason             Age   From                                 Message
  ----     ------             ----  ----                                 -------
  Warning  ValidationFailure  17s   cluster-health-periodics-controller  validator for Pod returned with status: FAILURE, reason: 1 pod error(s).

Disabilitazione della riparazione dei nodi e del controllo di integrità per un cluster utente

Nel file di configurazione del cluster utente, imposta autoRepair.enabled su false:

Aggiorna il cluster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Disabilitazione della riparazione dei nodi e del controllo di integrità per un cluster di amministrazione

Nel tuo file di configurazione del cluster amministratore, imposta autoRepair.enabled su false:

Aggiorna il cluster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Eseguire il debug della riparazione automatica dei nodi

Puoi esaminare i problemi relativi alla riparazione automatica dei nodi descrivendo gli oggetti Macchina e Nodo nel cluster di amministrazione. Ecco un esempio:

Elenca gli oggetti macchina:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

Output di esempio:

default     gke-admin-master-wcbrj
default     gke-admin-node-7458969ff8-5cg8d
default     gke-admin-node-7458969ff8-svqj7
default     xxxxxx-user-cluster-41-25j8d-567f9c848f-fwjqt

Descrivi uno degli oggetti Machine:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine gke-admin-master-wcbrj

Nell'output, cerca gli eventi da cluster-health-controller.

Analogamente, puoi elencare e descrivere gli oggetti nodo. Ad esempio:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes
...
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe node gke-admin-master-wcbrj

Riparazione manuale dei nodi

Nodo del piano di controllo amministratore

Il nodo del piano di controllo amministrativo ha un comando di riparazione dedicato, perché la normale riparazione manuale non funziona.

Utilizza gkectl repair admin-master per riparare il nodo del piano di controllo amministratore.

Altri nodi

Se si verificano problemi con i nodi non coperti dalla logica di riparazione automatica o se non hai attivato la riparazione automatica dei nodi, puoi eseguire una riparazione manuale. In questo modo il nodo viene eliminato e ricreato.

Recupera il nome dell'oggetto Machine corrispondente al nodo:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Sostituisci CLUSTER_KUBECONFIG con il percorso del file kubeconfig del cluster di amministrazione o dell'utente.

Aggiungi l'annotazione repair all'oggetto Machine:

kubectl annotate --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true

Sostituisci MACHINE_NAME con il nome dell'oggetto Machine.

Elimina l'oggetto Machine:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME