Reparación y comprobación del estado de los nodos automáticas

En Google Distributed Cloud, las comprobaciones periódicas del estado 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 continuamente los nodos en mal estado de un clúster.

Las comprobaciones de estado periódicas se ejecutan cada quince minutos. Las comprobaciones son las mismas que las que realiza 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 tanto el clúster de administrador como el 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 comprobaciones periódicas del estado no se ejecutan como parte de la reparación automática.

Condiciones de nodos incorrectas cuando no está habilitado el clúster avanzado

Las siguientes condiciones indican que un nodo no está en buen 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 unos 10 minutos después de que se haya creado correctamente.

  • 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) correspondiente a una máquina en el estado Available durante aproximadamente 10 minutos.

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

Estados de nodos incorrectos cuando el clúster avanzado está habilitado

Las siguientes condiciones indican que un nodo no está en buen 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 al menos una de las condiciones de la lista anterior.

La reparación agota el nodo incorrecto y crea una nueva VM. Si el drenaje del nodo no se completa en una hora, la reparación fuerza el drenaje y separa de forma segura los discos gestionados de Kubernetes adjuntos.

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

El número de reparaciones por hora de un grupo de nodos está limitado a un máximo de:

  • Tres
  • El 10 % del número de nodos del grupo de nodos

Habilitar la reparación de nodos y la comprobación del estado en un clúster nuevo

En el archivo de configuración del clúster de administrador o de usuario, asigna el valor autoRepair.enabled a true:

autoRepair:
  enabled: true

Sigue los pasos para crear tu clúster de administrador o de usuario.

Habilitar la reparación de nodos y la comprobación del estado de un clúster de usuarios

En el archivo de configuración del clúster de usuario, asigna el valor true a autoRepair.enabled:

Actualiza el clúster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Haz los cambios siguientes:

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

  • USER_CLUSTER_CONFIG: la ruta del archivo de configuración del clúster de usuarios

Habilitar la reparación de nodos y la comprobación del estado de un clúster de administrador

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

Actualiza el clúster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Sustituye ADMIN_CLUSTER_CONFIG por la ruta del archivo de configuración de tu clúster de administrador.

Ver registros de un comprobador de estado

Lista todos los pods del comprobador de estado del clúster de administrador:

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

El resultado es similar al siguiente:

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 comprobador de estado concreto, obtenga los registros del contenedor cluster-health-controller de uno de los pods. Por ejemplo, para obtener los registros de my-user-cluster que se muestran en el resultado anterior, haz lo siguiente:

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

Ver eventos de un comprobador de estado

Lista todos los objetos Cluster de tu clúster de administrador:

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

El resultado es similar al siguiente:

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

Para ver los eventos de un clúster concreto, 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, haz lo siguiente:

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

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

Inhabilitar la reparación de nodos y la comprobación del estado de un clúster de usuarios

En el archivo de configuración del clúster de usuario, asigna el valor false a autoRepair.enabled:

Actualiza el clúster:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Inhabilitar la reparación de nodos y la comprobación del estado de un clúster de administrador

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

Actualiza el clúster:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG

Depurar la reparación automática de nodos cuando no está habilitado el clúster avanzado

Para investigar problemas con la reparación automática de nodos, puede describir los objetos Machine y Node en el clúster de administración. Veamos un ejemplo:

Lista los objetos de máquina:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

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 eventos de cluster-health-controller.

Del mismo modo, puede 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

Depurar la reparación automática de nodos cuando el clúster avanzado está habilitado

Para investigar problemas con la reparación automática de nodos, puedes describir los objetos Machine y Node en el clúster de administración y en el clúster correspondiente, respectivamente. Veamos un ejemplo:

Lista los objetos de máquina:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG  get machines

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 eventos de auto-repair-controller.

Del mismo modo, puede 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 del plano de control de administrador tiene un comando de reparación específico, ya que la reparación manual normal no funciona en él.

Usa gkectl repair admin-master para reparar el nodo del plano de control de administrador.

Nodo de plano de control de clúster de usuarios de Controlplane V2

Los nodos de plano de control del clúster de usuarios de Controlplane V2 se gestionan de forma diferente a otros nodos.

Al igual que los clústeres de usuarios de kubeception, los objetos Machine del plano de control de los clústeres de usuarios de Controlplane V2 se encuentran en el clúster de administrador. La reparación automática de nodos está cubierta por la reparación automática de nodos del clúster de administrador.

Si hay problemas con los nodos que no están cubiertos por la lógica de reparación automática de nodos del clúster de administrador o si no has habilitado la reparación automática de nodos del clúster de administrador, puedes hacer una reparación manual. Se elimina y se 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
    

    Haz los cambios siguientes:

    • ADMIN_CLUSTER_KUBECONFIG: la ruta del archivo kubeconfig de tu clúster de administrador.
    • USER_CLUSTER_NAME: el nombre del clúster de usuarios objetivo.
  2. Añade 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
    

    Sustituye MACHINE_NAME por el nombre del objeto Machine.

  3. Elimina el objeto Machine:

    kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME machine MACHINE_NAME
    

Vuelve a crear los nodos uno a uno para el plano de control de alta disponibilidad. De lo contrario, es posible que el plano de control se interrumpa de forma inesperada.

Otros nodos

Si hay problemas con los nodos que no cubre la lógica de reparación automática o no has habilitado la reparación automática de nodos, puedes hacer una reparación manual. De esta forma, se elimina y se vuelve a crear el nodo.

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

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Sustituye CLUSTER_KUBECONFIG por la ruta del archivo kubeconfig de tu clúster de administrador o de usuario.

Añade la anotación repair al objeto Machine:

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

Sustituye MACHINE_NAME por el nombre del objeto Machine.

Elimina el objeto Machine:

kubectl delete --kubeconfig CLUSTER_KUBECONFIG machine MACHINE_NAME

Reparación manual de nodos cuando está habilitado el clúster avanzado

Nodo del plano de control de administrador

No se admite la reparación manual de nodos del plano de control del administrador

Nodo de plano de control de clúster de usuarios o nodos de trabajo

Obtén el nombre del objeto Inventory Machine que corresponde al nodo usando la IP del nodo para que coincidan los objetos:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME get inventorymachines

Sustituye lo siguiente: ADMIN_CLUSTER_KUBECONFIG: la ruta de tu archivo kubeconfig de administrador. USER_CLUSTER_NAME: el nombre del clúster de usuarios objetivo.

Añade 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

Sustituye MACHINE_NAME por el nombre del objeto Machine.

Elimina el objeto Inventory Machine:

kubectl delete --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n USER_CLUSTER_NAME inventorymachine MACHINE_NAME

Vuelve a crear los nodos uno a uno para el plano de control de alta disponibilidad. De lo contrario, es posible que el plano de control se interrumpa de forma inesperada.