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 mostrati come log ed eventi negli oggetti del cluster nel cluster di amministrazione.
Condizioni di salute
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 statoAvailable
per circa 10 minuti.La condizione del nodo
DiskPressure
ètrue
per circa 30 minuti.
Strategia di riparazione
I cluster Anthos su VMware avviano una riparazione su un nodo se quest'ultimo soddisfa almeno una delle condizioni dell'elenco precedente.
La riparazione drena il nodo in stato non integro e crea una nuova VM. Se lo svuotamento del nodo non riesce 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 all'ora per un pool di nodi è limitato al massimo di:
- Tre
- Dieci del numero di nodi nel pool
Abilitazione della riparazione dei nodi e del controllo di integrità per un nuovo cluster
Nel tuo file di configurazione del cluster amministratore o utente, imposta autoRepair.enabled
su true
:
autoRepair: enabled: true
Continua con i passaggi per creare il cluster di amministrazione o utente.
Abilitazione della riparazione dei nodi e del controllo di integrità per un cluster utente esistente
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: 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 file di configurazione del cluster admin, 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
Visualizzare i log di 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
Visualizzazione di 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 cluster specifico, esegui kubectl describe cluster
con il flag --show-events
. Ad esempio, per visualizzare gli eventi relativi a my-user-cluster
nell'output precedente, procedi nel seguente modo:
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 file di configurazione del cluster admin, 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
.
Allo stesso modo, 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
Se si verificano problemi con i nodi non coperti dalla logica della riparazione automatica oppure se non hai attivato la riparazione automatica dei nodi, puoi eseguire una riparazione manuale. In questo modo viene eliminato e ricreato il nodo.
Recupera il nome dell'oggetto Machine corrispondente al nodo:
kubectl --kubeconfig CLUSTER_KUBECONFIG get machines
Sostituisci CLUSTER_KUBECONFIG con il percorso del file kubeconfig dell'amministratore o del cluster 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