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

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

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 es true durante aproximadamente 10 minutos.

  • La condición del nodo DiskPressure es true 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.

  1. 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 administrador
    • USER_CLUSTER_NAME: Es el nombre del clúster de usuario de destino.
  2. 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.

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