Etapa de actualización: AnthosBareMetal

En esta etapa, se actualizan la versión de Kubernetes y los complementos de un clúster de Kubernetes. En esta etapa, también se ejecuta una tarea de actualización mz-location-upgrade.

La actualización del clúster se realiza en un nodo del clúster a la vez. Los pasos de alto nivel en la actualización del clúster son los siguientes:

  1. Se ejecutan verificaciones previas para garantizar que el nodo esté listo para la actualización.
  2. El nodo se vacía para prepararse para la actualización.
  3. Se actualiza la versión de Kubernetes en el nodo.
  4. Se ejecutan verificaciones posteriores al vuelo para garantizar que la actualización del nodo se realice correctamente.
  5. El recurso InventoryMachine del nodo se quita de maintenance. Esto permite que el nodo esté listo para aceptar Pods nuevamente.

Proceso de desviación del nodo

El vaciado de un nodo implica mover de forma ordenada todas las cargas de trabajo que se ejecutan en él. Consta de los siguientes pasos:

  1. El recurso InventoryMachine para el nodo se coloca en maintenance.
  2. El recurso BaremetalMachine se coloca en maintenance.
  3. El nodo de Kubernetes está contaminado con baremetal.cluster.gke.io/maintenance: NoSchedule
  4. En el caso de los nodos de hardware físico, las máquinas virtuales que se ejecutan en el nodo se preparan para el vaciado configurando InventoryMachine para esa máquina virtual en maintenance.
  5. Los Pods que se ejecutan en el nodo de Kubernetes se expulsan de forma correcta. Cada pod tiene hasta 80 minutos para finalizar de forma correcta.

Obtén el kubeconfig, el nombre y el espacio de nombres del clúster de administrador

Para solucionar problemas en esta etapa, necesitas el archivo KUBECONFIG del clúster de administrador, y el nombre y el espacio de nombres del clúster que se está actualizando. Establece ORG_NAME en la organización para la que supervisas la actualización.

export ORG_NAME=ORG_NAME

Selecciona una de las siguientes opciones según el clúster especificado en el nombre de la etapa.

  1. Nombre de la etapa: root-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="root-admin"
    export CLUSTER_NAMESPACE="root"
    
  2. Nombre de la etapa: org-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-admin"
    export CLUSTER_NAMESPACE="${ORG_NAME}"
    
  3. Nombre de la etapa: system/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-system"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  4. Nombre de la etapa: service/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="g-${ORG_NAME}-shared-service"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  5. Actualización del clúster de usuario

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME=USER_CLUSTER_NAME
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    

Recursos para supervisar

  1. Recurso de clúster de ABM clusters.baremetal.cluster.gke.io

      kubectl get cluster -n "${CLUSTER_NAMESPACE}" "${CLUSTER_NAME}" --kubeconfig=${ADMIN_KUBECONFIG}
    

    Resultado de ejemplo:

    NAME         ABM VERSION       DESIRED ABM VERSION   CLUSTER STATE
    root-admin   1.29.400-gke.86   1.29.400-gke.86       Running
    
  2. Recursos de BaremetalMachine de ABM

      kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG}
    

    Resultado de ejemplo:

    NAME       CLUSTER      READY   INSTANCEID             MACHINE    ABM VERSION       DESIRED ABM VERSION
    10.8.0.2   root-admin   true    baremetal://10.8.0.2   10.8.0.2   1.29.400-gke.86   1.29.400-gke.86
    10.8.0.3   root-admin   true    baremetal://10.8.0.3   10.8.0.3   1.29.400-gke.86   1.29.400-gke.86
    10.8.0.4   root-admin   true    baremetal://10.8.0.4   10.8.0.4   1.29.400-gke.86   1.29.400-gke.86
    

    Si alguna máquina muestra un valor de ABM VERSION diferente del valor de DESIRED ABM VERSION o si READY no es igual a true, usa la marca -o yaml para obtener más detalles sobre la máquina.

  3. HealthChecks si un nodo no puede entrar o salir del modo de mantenimiento.

      export MACHINE_IP=MACHINE_IP
      kubectl get healthchecks -n kube-system --kubeconfig=${ADMIN_KUBECONFIG}
    

    Resultado de ejemplo:

    NAMESPACE     NAME                                                 COMPONENT   NAMESPACE   STATUS    LAST_COMPLETED
    kube-system   bm-system-10.8.0.2-machine                                                   Healthy   14m
    kube-system   bm-system-10.8.0.3-machine                                                   Healthy   14m
    kube-system   bm-system-10.8.0.4-machine                                                   Healthy   5m43s
    kube-system   bm-system-add-ons-add-ons                                                    Healthy   46m
    kube-system   bm-system-add-ons-configdrift                                                Healthy   46m
    

    Si alguna verificación de estado aparece como no saludable, usa la marca -o yaml para consultar los detalles.

  4. Registros del controlador para verificar si hay errores

      export MACHINE_IP=MACHINE_IP
      kubectl logs -n kube-system -l baremetal.cluster.gke.io/lifecycle-controller-component=true | grep ${MACHINE_IP}
      kubectl logs -n capi-system -l baremetal.cluster.gke.io/lifecycle-controller-component=true | grep ${MACHINE_IP}
    
  5. Verifica si hay tareas de actualización en ejecución o con errores en esta etapa.

    export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    kubectl get upgradetaskrequests -n gpc-system -o json | jq '.items[] | select(.status.conditions[].status=="Unknown") | .metadata.name'
    

    Resultado de ejemplo:

    "upg-task-org-1-os-node-upgrade-task-whg8v"
    
    export KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export UPGRADE_TASK=$(kubectl get upgradetaskrequests -n gpc-system -o json | jq -r '.items[] | select(.status.conditions[].status=="Unknown") | .metadata.name')
    kubectl get upgradetaskrequests -n gpc-system "${UPGRADE_TASK}" -o yaml 
    

    Resultado de ejemplo:

    status:
      conditions:
      - lastTransitionTime: "2024-09-25T16:26:33Z"
        message: job gpc-system/v1.13.0-os-7cf810d7a5-upg-task-org-1-os-node-upgra-4n5t6
          is running
        observedGeneration: 1
        reason: JobRunning
        status: Unknown
        type: Succeeded
      upgradeTaskResponse:
        name: upg-task-org-1-os-node-upgrade-task-whg8v-v1.13.0-os-7cf810d7a5
    

    Si ves un trabajo en ejecución en el resultado, puedes describirlo o verificar los registros del Pod en busca de errores.