Riparazione automatica dei nodi e controllo dell'integrità

In Google Distributed Cloud, i controlli di integrità periodici e la riparazione automatica dei nodi sono attivati 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 effettuati da gkectl diagnose cluster. I risultati vengono visualizzati come log e eventi sugli oggetti Cluster nel cluster amministrativo.

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

Se il cluster avanzato è attivo, i controlli di integrità periodici non vengono eseguiti nell'ambito della riparazione automatica.

Condizioni dei nodi non attive quando il cluster avanzato non è abilitato

Le seguenti condizioni indicano che un nodo non è integro quando enableAdvanceCluster è false.

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

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

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

  • Non è presente alcun oggetto node (nodeRef è nil) corrispondente a una macchina nello stato Available per circa 10 minuti.

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

Condizioni dei nodi non in salute quando il cluster avanzato è abilitato

Le seguenti condizioni indicano che un nodo non è integro quando enableAdvanceCluster è true.

  • La condizione del nodo NotReady è true 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 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 va a buon fine per un'ora, la riparazione forza lo svuotamento e scollega in sicurezza i dischi gestiti Kubernetes collegati.

Se nello stesso MachineDeployment sono presenti più nodi non operativi, la riparazione viene eseguita su un solo nodo alla volta.

Il numero di riparazioni all'ora per un pool di nodi è limitato al massimo di:

  • Tre
  • Il 10% del numero di nodi nel pool di nodi

Attivazione della riparazione dei nodi e del controllo dell'integrità per un nuovo cluster

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

autoRepair:
  enabled: true

Procedi con i passaggi per creare il tuo cluster di amministrazione o di utente.

Attivare la riparazione dei nodi e il controllo dell'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

Attivazione della riparazione dei nodi e del controllo dell'integrità per un cluster di amministrazione esistente

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

Visualizzazione dei log da un controllo di integrità

Elenca tutti i pod di controllo dell'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 per il contenitore cluster-health-controller in uno dei pod. Ad esempio, per recuperare i log relativi a 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 di un controllo di integrità

Elenca tutti gli oggetti 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 di un determinato cluster, esegui kubectl describe cluster con il flag --show-events. Ad esempio, per visualizzare gli eventi relativi a my-user-cluster mostrati 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).

Disattivazione della riparazione e del controllo di integrità dei nodi 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

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

Nel 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 quando il cluster avanzato non è abilitato

Puoi esaminare i problemi relativi alla riparazione automatica dei nodi descrivendo gli oggetti Machine e Node 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 nodo. Ad esempio:

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

Debug della riparazione automatica dei nodi quando il cluster avanzato è abilitato

Puoi esaminare i problemi relativi alla riparazione automatica dei nodi descrivendo gli oggetti Machine e Node rispettivamente nel cluster di amministrazione e nel cluster corrispondente. Ecco un esempio:

Elenca gli oggetti macchina:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

Output di esempio:

NAMESPACE                            NAME          NODEPOOL
ci-1f6861fe28cac8fb390bc798927c717b  10.251.172.47 ci-1f6861fe28cac8fb390bc798927c717b-np
ci-1f6861fe28cac8fb390bc798927c717b  10.251.173.64 ci-1f6861fe28cac8fb390bc798927c717b-cp
ci-1f6861fe28cac8fb390bc798927c717b  10.251.173.66 ci-1f6861fe28cac8fb390bc798927c717b-cp
ci-1f6861fe28cac8fb390bc798927c717b  10.251.174.19 ci-1f6861fe28cac8fb390bc798927c717b-np
ci-1f6861fe28cac8fb390bc798927c717b  10.251.175.15 ci-1f6861fe28cac8fb390bc798927c717b-np
ci-1f6861fe28cac8fb390bc798927c717b  10.251.175.30 ci-1f6861fe28cac8fb390bc798927c717b-cp
kube-system                          10.251.172.239   gke-admin-bnbp9-cp
kube-system                          10.251.173.39    gke-admin-bnbp9-cp
kube-system                          10.251.173.6     gke-admin-bnbp9-cp

Descrivi la macchina corrispondente all'oggetto Machine:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine -n ci-1f6861fe28cac8fb390bc798927c717b 10.251.172.47

Nell'output, cerca gli eventi di auto-repair-controller.

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

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes
...
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe node ci-1f6861fe28cac8fb390bc798927c717b-np

Riparazione manuale dei nodi quando il cluster avanzato non è abilitato

Nodo del control plane di amministrazione

Il nodo del control plane 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 amministrativo.

Nodo del control plane del cluster utente Controlplane V2

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

Come per i cluster utente kubeception, gli oggetti Machine del piano di controllo dei cluster utente Controlplane v2 si trovano nel cluster di amministrazione. La riparazione automatica dei nodi è coperta dalla riparazione automatica dei nodi del cluster amministrativo.

Se si verificano problemi con i nodi non coperti dalla logica di riparazione automatica dei nodi del cluster di amministrazione o se non hai attivato la riparazione automatica dei nodi del cluster di amministrazione, puoi eseguire una riparazione manuale. Il nodo viene eliminato e ricreato.

  1. Recupera 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 del file kubeconfig del cluster di amministrazione.
    • USER_CLUSTER_NAME: il nome del cluster di utenti 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 dell'oggetto Macchina.

  3. Elimina l'oggetto Macchina:

    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 il piano di controllo potrebbe essere interrotto in modo imprevisto.

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. 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 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 Macchina:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME

Riparazione manuale dei nodi quando il cluster avanzato è abilitato

Nodo del control plane di amministrazione

La riparazione manuale del nodo del control plane di amministrazione non è supportata

Nodo del control plane del cluster utente / Nodi worker

Recupera il nome dell'oggetto Inventory Machine corrispondente al nodo utilizzando l'IP del nodo per abbinare gli oggetti:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get inventorymachines

Sostituisci quanto segue: ADMIN_CLUSTER_KUBECONFIG: il percorso del file kubeconfig di amministrazione. USER_CLUSTER_NAME: il nome del cluster di utenti di destinazione.

Aggiungi l'annotazione force-remove all'oggetto Inventory Machine:

kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME inventorymachine MACHINE_NAME baremetal.cluster.gke.io/force-remove=true

Sostituisci MACHINE_NAME con il nome dell'oggetto Machine.

Elimina l'oggetto Inventory Machine:

kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME inventorymachine MACHINE_NAME

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