Reparación automática del nodo y verificación de estado

En los clústeres de Anthos alojados en VMware (GKE On-Prem), la verificación de estado periódica y la reparación automática de nodos están habilitadas de forma predeterminada.

La función de reparación automática de nodos detecta y repara de manera continua los nodos en mal estado en un clúster.

Las verificaciones de estado periódicas se ejecutan cada quince minutos. Las verificaciones son las mismas que las realizadas por gkectl diagnose cluster. Los resultados se muestran como registros y eventos en objetos de clúster en el clúster de administrador.

Condiciones en mal estado

Las siguientes condiciones indican que un nodo está en mal estado:

  • La condición del nodo NotReady es true durante aproximadamente 10 minutos.

  • El estado de la máquina es Unavailable durante aproximadamente 10 minutos después de la creación correcta.

  • El estado de la máquina no es Available durante aproximadamente 30 minutos después de la creación de la VM.

  • No hay ningún objeto de nodo (nodeRef es nil) que corresponda a una máquina en el estado Available durante aproximadamente 10 minutos.

  • La condición del nodo DiskPressure es true durante aproximadamente 30 minutos.

Estrategia de reparación

Los clústeres de Anthos alojados en VMware inician una reparación en un nodo si este cumple con al menos una de las condiciones de la lista anterior.

La reparación desvía el nodo en mal estado y crea una VM nueva. Si el desvío de nodos no funciona correctamente durante una hora, la reparación fuerza el desvío y desconecta de forma segura los discos administrados de Kubernetes conectados.

Si hay varios nodos en mal estado en la misma MachineDeployment, la reparación se realiza solo en uno de esos nodos a la vez.

La cantidad de reparaciones por hora para un grupo de nodos se limita al máximo de:

  • Tres
  • Diez por ciento de la cantidad de nodos del grupo de nodos

Habilita la reparación de nodos y la verificación de estado para un clúster nuevo

En el archivo de configuración de tu clúster de administrador o usuario, configura autoRepair.enabled como true:

autoRepair:
  enabled: true

Continúa con los pasos para crear tu clúster de administrador o usuario.

Habilita la reparación de nodos y la verificación de estado para un clúster de usuario existente

En el archivo de configuración del clúster de usuario, configura autoRepair.enabled como true:

Actualiza el clúster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Reemplaza lo siguiente:

  • ADMIN_CLUSTER_KUBECONFIG: la ruta de acceso al archivo kubeconfig del clúster de administrador

  • USER_CLUSTER_CONFIG: la ruta de acceso del archivo de configuración del clúster de usuario.

Habilita la reparación de nodos y la verificación de estado para un clúster de administrador existente

En el archivo de configuración del clúster de administrador, configura autoRepair.enabled como true:

Actualiza el clúster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Reemplaza ADMIN_CLUSTER_CONFIG por la ruta de acceso del archivo de configuración del clúster de administrador

Visualiza los registros de un verificador de estado

Enumera todos los Pods del verificador de estado en el clúster de administrador:

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

El resultado es similar al siguiente ejemplo:

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

Para ver los registros de un verificador de estado en particular, obtén los registros del contenedor cluster-health-controller en uno de los Pods. Por ejemplo, para obtener los registros de my-user-cluster que se muestran en el resultado anterior:

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

Visualiza los eventos de un verificador de estado

Enumera todos los objetos del clúster en el clúster de administrador:

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

El resultado es similar al siguiente ejemplo:

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

Para ver los eventos de un clúster en particular, ejecuta kubectl describe cluster con la marca --show-events. Por ejemplo, para ver los eventos de my-user-cluster que se muestran en el resultado anterior:

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

Resultado de ejemplo:

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).

Inhabilita la reparación de nodos y la verificación de estado para un clúster de usuario

En el archivo de configuración del clúster de usuario, configura autoRepair.enabled como false:

Actualiza el clúster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Inhabilita la reparación de nodos y la verificación de estado para un clúster de administrador

En el archivo de configuración del clúster de administrador, configura autoRepair.enabled como false:

Actualiza el clúster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Depura la reparación automática de nodos

Puedes investigar los problemas con la reparación automática de nodos si describes los objetos Machine y Node en el clúster de administrador. Por ejemplo:

Enumera los objetos de la máquina:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

Salida de ejemplo:

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

Describe uno de los objetos Machine:

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

En el resultado, busca los eventos de cluster-health-controller.

Del mismo modo, puedes enumerar y describir objetos de nodo. Por ejemplo:

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

Reparación de nodos manual

En caso de que haya problemas de nodos que no estén cubiertos por la lógica de reparación automática, o que no hayas habilitado la reparación automática de nodos, puedes realizar una reparación manual. Esto borra y vuelve a crear el nodo.

Obtén el nombre del objeto Machine que corresponde al nodo:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Reemplaza CLUSTER_KUBECONFIG con la ruta del archivo kubeconfig de clúster de administrador o usuario.

Agrega la anotación repair al objeto Machine:

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

Reemplaza MACHINE_NAME por el nombre del objeto Machine.

Borra el objeto Machine:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME