En GKE en VMware, 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.
Asegúrate de que los clústeres de administrador y de usuario tengan una dirección IP adicional disponible para la reparación automática de nodos.
Estado de los nodos en mal estado
Las siguientes condiciones indican que un nodo está en mal estado:
La condición del nodo
NotReady
estrue
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 estadoAvailable
durante aproximadamente 10 minutos.La condición del nodo
DiskPressure
estrue
durante aproximadamente 30 minutos.
Estrategia de reparación de nodos
GKE en VMware inicia 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 admin o usuario, configura autoRepair.enabled
como true
:
autoRepair: enabled: true
Continúa con los pasos para crear tu clúster de admin 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
Nodo del plano de control del administrador
El nodo del plano de control del administrador tiene un comando de reparación exclusivo, ya que la reparación manual normal no funciona.
Usa gkectl repair admin-master
para reparar el nodo del plano de control del administrador.
Nodo del plano de control del clúster de usuario del plano de control V2
Los nodos del plano de control del clúster de usuario del plano de control V2 se administran de manera diferente a otros nodos.
Al igual que los clústeres de usuario de kubeception, los objetos Machine del plano de control de los clústeres de usuario del plano de control V2 se encuentran en el clúster de administrador. Y la reparación automática del nodo del clúster de administrador es la reparación automática del nodo del clúster de administrador.
En caso de que haya problemas de nodos que no estén cubiertos por la lógica de reparación automática del nodo del clúster de administrador o que no hayas habilitado la reparación automática de nodos del clúster de administrador, 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 ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get machines
Reemplaza lo siguiente:
ADMIN_CLUSTER_KUBECONFIG
: Es la ruta de acceso del archivo kubeconfig de administrador.USER_CLUSTER_NAME
: Es el nombre del clúster de usuario de destino.
Agrega la anotación
repair
al objeto Machine:kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME 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 ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME
Vuelve a crear el nodo uno por uno para un plano de control de alta disponibilidad o, de lo contrario, podría hacer fallar el plano de control de forma inesperada.
Otros nodos
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