Riparazione e controllo di integrità automatici dei nodi

In Google Distributed Cloud, controllo di integrità periodico e nodo automatico sono attive per impostazione predefinita.

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

Controlli di integrità periodici ogni 15 minuti. I controlli sono gli stessi di quelle eseguite da gkectl diagnose cluster. I risultati vengono mostrati log ed eventi sugli oggetti Cluster nel cluster di amministrazione.

Assicurati che i cluster di amministrazione e utente abbiano ciascuno un indirizzo IP aggiuntivo disponibili per la riparazione automatica dei nodi.

Condizioni dei nodi non integri

Le seguenti condizioni indicano che un nodo non è integro:

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

  • Successivamente, lo stato della macchina sarà Unavailable per circa 10 minuti una creazione di successo.

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

  • Non esiste un oggetto node (nodeRef è nil) corrispondente a una macchina nella stato Available per circa 10 minuti.

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

Strategia di riparazione dei nodi

Google Distributed Cloud avvia una riparazione su un nodo se quest'ultimo soddisfa almeno una delle condizioni nell'elenco precedente.

La riparazione svuota il nodo non integro e crea una nuova VM. Se lo svuotamento del nodo non riesce per un'ora, la riparazione forza lo scarico e stacca in modo sicuro dei dischi gestiti da 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 all'ora per un pool di nodi è limitato al massimo di:

  • Tre
  • Il dieci percento del numero di nodi nel pool di nodi

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

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

autoRepair:
  enabled: true

Segui i passaggi per la creazione di amministratore o utente in un cluster Kubernetes.

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

Nel tuo 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 in corso...

Nel tuo file di configurazione del cluster di amministrazione, 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 cluster di amministrazione di configurazione del deployment.

Visualizzazione dei log di un controllo di integrità

Elenca tutti i pod di 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 da un determinato controllo di integrità, ottieni i log per container cluster-health-controller in uno dei pod. Ad esempio, per ottenere i log per my-user-cluster mostrati nell'output precedente:

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

Visualizzazione degli eventi da un controllo di integrità

Elenca tutti gli oggetti Cluster nel tuo 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 di my-user-cluster mostrato 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 tuo 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 di amministrazione, imposta autoRepair.enabled su false:

Aggiorna il cluster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Debug della riparazione automatica dei nodi

Puoi esaminare i problemi relativi alla riparazione automatica dei nodi descrivendo la macchina e Oggetti 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 di cluster-health-controller.

Analogamente, puoi elencare e descrivere gli oggetti node. 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 amministrativo

Il nodo del piano di controllo amministratore ha un comando di riparazione dedicato, dato che il normale la riparazione manuale non funziona.

Utilizza gkectl repair admin-master per riparare l'amministratore dal nodo del piano di controllo.

Nodo del piano di controllo del cluster utente del piano di controllo V2

I nodi del piano di controllo del cluster utente del piano di controllo V2 sono gestiti in modo diverso rispetto agli altri nodi.

Analogamente ai cluster utente kubeception, gli oggetti Machine del piano di controllo del piano di controllo I cluster utente V2 si trovano nel cluster di amministrazione. La riparazione automatica dei nodi è coperta la riparazione automatica dei nodi del cluster di amministrazione.

In caso di problemi dei nodi non coperti dalla logica di riparazione automatica dei nodi del cluster di amministrazione, Se non hai abilitato la riparazione automatica del nodo del cluster di amministrazione, puoi eseguire una riparazione manuale. Questo elimina e ricrea il nodo.

  1. Ottieni il nome dell'oggetto Machine corrispondente al nodo:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get machines
    

    Sostituisci quanto segue:

    • ADMIN_CLUSTER_KUBECONFIG: il percorso dell'amministratore kubeconfig.
    • USER_CLUSTER_NAME: il nome del cluster utente di destinazione.
  2. Aggiungi l'annotazione repair all'oggetto Machine:

    kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME onprem.cluster.gke.io/repair-machine=true
    

    Sostituisci MACHINE_NAME con il nome della macchina .

  3. Elimina l'oggetto Machine:

    kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME
    

Ricrea il nodo uno alla volta per un piano di controllo ad alta disponibilità, altrimenti potrebbe in modo imprevisto dal piano di controllo.

Altri nodi

Nel caso in cui ci siano problemi dei nodi non coperti dalla logica di riparazione automatica, o se non hai abilitato la riparazione automatica del nodo, puoi eseguire una riparazione manuale. Questo elimina e ricrea il nodo.

Ottieni il nome dell'oggetto Machine corrispondente al nodo:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

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

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