Fase de atualização: AnthosBareMetal

Esta fase atualiza a versão do Kubernetes e os suplementos de um cluster do Kubernetes. Esta fase também executa uma tarefa de atualização mz-location-upgrade.

A atualização do cluster é realizada num nó do cluster de cada vez. Os passos de alto nível na atualização do cluster são os seguintes:

  1. São executadas verificações pré-voo para garantir que o nó está pronto para a atualização.
  2. O nó é esvaziado para se preparar para a atualização
  3. A versão do Kubernetes no nó é atualizada.
  4. As verificações pós-voo são executadas para garantir que a atualização do nó é bem-sucedida.
  5. O recurso InventoryMachine para o nó é removido de maintenance. Isto permite que o nó fique pronto para aceitar novamente pods.

Processo de esvaziamento de nós

A drenagem de um nó envolve a movimentação gradual de todas as cargas de trabalho em execução nesse nó para fora do mesmo. Consiste nos seguintes passos:

  1. O recurso InventoryMachine do nó é colocado em maintenance.
  2. O recurso BaremetalMachine é colocado em maintenance.
  3. O nó do Kubernetes está contaminado com baremetal.cluster.gke.io/maintenance: NoSchedule
  4. Para nós bare metal, todas as máquinas virtuais em execução no nó são preparadas para a drenagem definindo o InventoryMachine para essa máquina virtual em maintenance.
  5. Os pods em execução no nó do Kubernetes são removidos de forma elegante. Cada pod tem até 80 minutos para terminar normalmente.

Obtenha o kubeconfig, o nome do cluster e o namespace do cluster de administrador

Para resolver problemas nesta fase, precisa do KUBECONFIG do cluster de administrador, bem como do nome e do espaço de nomes do cluster em atualização. Defina ORG_NAME para a organização para a qual está a monitorizar a atualização.

export ORG_NAME=ORG_NAME

Selecione uma das seguintes opções com base no cluster especificado no nome da fase.

  1. Stage Name: root-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="root-admin"
    export CLUSTER_NAMESPACE="root"
    
  2. Stage Name: org-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-admin"
    export CLUSTER_NAMESPACE="${ORG_NAME}"
    
  3. Stage Name: system/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-system"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  4. Stage Name: service/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="g-${ORG_NAME}-shared-service"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  5. Atualização do cluster de utilizadores

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

Recursos a monitorizar

  1. ABM Cluster resource clusters.baremetal.cluster.gke.io

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

    Exemplo de resultado

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

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

    Exemplo de resultado

    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
    

    Se alguma máquina apresentar um valor ABM VERSION diferente de DESIRED ABM VERSION ou READY não for igual a true, use a flag -o yaml para obter mais detalhes sobre a máquina.

  3. Verifica se um nó não consegue entrar ou sair do modo de manutenção.

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

    Exemplo de resultado

    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
    

    Se alguma verificação de funcionamento for apresentada como não saudável, use a flag -o yaml para verificar os detalhes.

  4. Registos do controlador para verificar se existem erros

      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. Verifique se existem tarefas de atualização em execução ou com falhas nesta fase.

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

    Exemplo de resultado

    "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 
    

    Exemplo de resultado

    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
    

    Se vir uma tarefa em execução no resultado, pode descrever a tarefa ou verificar os registos do pod para ver se existem erros.