In Google Distributed Cloud, i controlli di integrità periodici 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.
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 disponibile 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.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 esiste un oggetto node (nodeRef è
nil
) corrispondente a una macchina nella statoAvailable
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 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 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
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 utente.
Attivazione della riparazione dei nodi e del 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 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 file di configurazione del cluster di amministrazione.
Visualizzazione dei log da 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 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 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).
Disattivazione della riparazione e del controllo di integrità dei nodi 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
Disattivazione della riparazione e del controllo di integrità dei nodi 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 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
Riparazione manuale dei nodi
Nodo del control plane di amministrazione
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 il nodo del control plane di amministrazione.
Nodo del control plane del cluster utente Controlplane V2
I nodi del control plane del cluster utente di Controlplane V2 vengono gestiti in modo diverso dagli 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 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.
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 di amministrazione.USER_CLUSTER_NAME
: il nome del cluster di utenti di destinazione.
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.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
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.
Recupera 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