Upgrade Stage: AnthosBareMetal

Esta etapa faz upgrade da versão do Kubernetes e dos complementos de um cluster do Kubernetes. Essa etapa também executa uma tarefa de upgrade mz-location-upgrade.

O upgrade do cluster é realizado em um nó por vez. As etapas gerais do upgrade do cluster são as seguintes:

  1. As verificações de simulação são executadas para garantir que o nó esteja pronto para o upgrade.
  2. O nó é esvaziado para se preparar para o upgrade
  3. A versão do Kubernetes no nó é atualizada.
  4. As verificações pós-voo são executadas para garantir que o upgrade do nó seja bem-sucedido.
  5. O recurso InventoryMachine do nó é removido de maintenance. Isso permite que o nó fique pronto para aceitar pods novamente.

Processo de drenagem de nós

A remoção de um nó envolve a movimentação sem problemas de todas as cargas de trabalho em execução nele. Ele consiste nas seguintes etapas:

  1. O recurso InventoryMachine do nó é colocado em maintenance.
  2. O recurso BaremetalMachine é colocado em maintenance.
  3. O nó do Kubernetes está corrompido 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 o encerramento definindo o InventoryMachine para essa máquina virtual em maintenance.
  5. Os pods em execução no nó do Kubernetes são removidos normalmente. Cada pod tem até 80 minutos para ser encerrado normalmente.

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

Para triar problemas nessa etapa, você precisa do KUBECONFIG do cluster de administrador e do nome e namespace do cluster em upgrade. Defina ORG_NAME como a organização para a qual você está monitorando a atualização.

export ORG_NAME=ORG_NAME

Selecione uma das opções a seguir com base no cluster especificado no nome da etapa.

  1. Nome da etapa: root-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="root-admin"
    export CLUSTER_NAMESPACE="root"
    
  2. Nome da etapa: 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. Nome da etapa: service/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="g-${ORG_NAME}-shared-service"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  5. Upgrade do cluster de usuário

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

Recursos a serem monitorados

  1. Recurso de cluster do ABM clusters.baremetal.cluster.gke.io

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

    Exemplo de saída

    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 saída

    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 mostrar ABM VERSION diferente de DESIRED ABM VERSION ou READY não for igual a true, use a flag -o yaml para 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 saída

    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 integridade aparecer como não íntegra, use a flag -o yaml para conferir os detalhes.

  4. Registros do controlador para verificar se há 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 há tarefas de upgrade em execução ou com falha nesta etapa.

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

    Exemplo de saída

    "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 saída

    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 você encontrar um job em execução na saída, descreva o job ou verifique os registros do pod em busca de erros.