En Google Distributed Cloud, 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 el clúster de administrador y el clúster de usuario tengan una dirección IP adicional disponible para la reparación automática de nodos.
Si el clúster avanzado está habilitado, las verificaciones de estado periódicas no se ejecutan como parte de la reparación automática.
Condiciones de nodos en mal estado cuando no se habilita el clúster avanzado
Las siguientes condiciones indican que un nodo está en mal estado cuando enableAdvanceCluster
es false
.
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.
Condiciones de nodos en mal estado cuando el clúster avanzado está habilitado
Las siguientes condiciones indican que un nodo está en mal estado cuando enableAdvanceCluster
es true
.
La condición del nodo
NotReady
estrue
durante aproximadamente 10 minutos.La condición del nodo
DiskPressure
estrue
durante aproximadamente 30 minutos.
Estrategia de reparación de nodos
Google Distributed Cloud 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 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 es 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
Cómo depurar la reparación automática de nodos cuando no está habilitado el clúster avanzado
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
Resultado 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
Cómo depurar la reparación automática de nodos cuando el clúster avanzado está habilitado
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 y en el clúster correspondiente, respectivamente. Por ejemplo:
Enumera los objetos de la máquina:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get machines
Resultado de ejemplo:
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
Describe la máquina correspondiente al objeto Machine:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG describe machine -n ci-1f6861fe28cac8fb390bc798927c717b 10.251.172.47
En el resultado, busca los eventos de auto-repair-controller
.
Del mismo modo, puedes enumerar y describir objetos de nodo. Por ejemplo:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes ... kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe node ci-1f6861fe28cac8fb390bc798927c717b-np
Reparación manual de nodos cuando no está habilitado el clúster avanzado
Nodo del plano de control de administrador
El nodo de plano de control del administrador tiene un comando de reparación dedicado, ya que la reparación manual normal no funciona para él.
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 de Controlplane V2
Los nodos del plano de control del clúster de usuario de Controlplane V2 se administran de manera diferente a otros nodos.
Al igual que los clústeres de usuario de kubeception, los objetos de máquina del plano de control de los clústeres de usuario de Controlplane V2 se encuentran en el clúster de administrador. Y la reparación automática de nodos está cubierta por la reparación automática de nodos 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 de nodos 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
: la ruta de acceso al archivo kubeconfig del clúster de administradorUSER_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, de lo contrario, es posible que se desactive 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 por la ruta de acceso del archivo kubeconfig del 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
Reparación manual de nodos cuando el clúster avanzado está habilitado
Nodo del plano de control de administrador
No se admite la reparación manual de nodos del plano de control de administrador.
Nodo del plano de control del clúster de usuario / Nodos trabajadores
Obtén el nombre del objeto Inventory Machine que corresponde al nodo con la IP del nodo para que coincida con los objetos:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get inventorymachines
Reemplaza lo siguiente: ADMIN_CLUSTER_KUBECONFIG: 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 force-remove
al objeto Inventory Machine:
kubectl annotate --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME inventorymachine MACHINE_NAME baremetal.cluster.gke.io/force-remove=true
Reemplaza MACHINE_NAME por el nombre del objeto Machine.
Borra el objeto Inventory Machine:
kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME inventorymachine MACHINE_NAME
Vuelve a crear el nodo uno por uno para un plano de control de alta disponibilidad, de lo contrario, es posible que se desactive el plano de control de forma inesperada.