Fase di upgrade: AnthosBareMetal

Questa fase esegue l'upgrade della versione di Kubernetes e degli add-on per un cluster Kubernetes. Questa fase esegue anche un'attività di upgrade mz-location-upgrade.

L'upgrade del cluster viene eseguito su un nodo del cluster alla volta. I passaggi generali dell'upgrade del cluster sono i seguenti:

  1. Vengono eseguiti controlli preflight per assicurarsi che il nodo sia pronto per l'upgrade.
  2. Il nodo viene svuotato per prepararsi all'upgrade
  3. Viene eseguito l'upgrade della versione di Kubernetes sul nodo.
  4. Vengono eseguiti controlli post-volo per garantire che l'upgrade del nodo vada a buon fine.
  5. La risorsa InventoryMachine per il nodo viene rimossa da maintenance. In questo modo, il nodo è di nuovo pronto ad accettare i pod.

Procedura di svuotamento del nodo

L'eliminazione di un nodo comporta lo spostamento controllato di tutti i workload in esecuzione sul nodo. Consiste nei seguenti passaggi:

  1. La risorsa InventoryMachine per il nodo si trova in maintenance.
  2. La risorsa BaremetalMachine viene inserita in maintenance.
  3. Il nodo Kubernetes è contrassegnato con baremetal.cluster.gke.io/maintenance: NoSchedule
  4. Per i nodi bare metal, tutte le macchine virtuali in esecuzione sul nodo vengono preparate per l'arresto impostando InventoryMachine per quella macchina virtuale in maintenance.
  5. I pod in esecuzione sul nodo Kubernetes vengono rimossi in modo controllato. A ogni pod vengono concessi fino a 80 minuti per l'arresto controllato.

Recupera il kubeconfig, il nome del cluster e lo spazio dei nomi del cluster di amministrazione

Per eseguire la classificazione dei problemi in questa fase, devi disporre di KUBECONFIG del cluster di amministrazione e del nome e dello spazio dei nomi del cluster in fase di upgrade. Imposta ORG_NAME sull'organizzazione per cui stai monitorando l'upgrade.

export ORG_NAME=ORG_NAME

Seleziona una delle seguenti opzioni in base al cluster specificato nel nome della fase.

  1. Stage Name: root-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="root-admin"
    export CLUSTER_NAMESPACE="root"
    
  2. Nome d'arte: 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. Upgrade del cluster utente

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

Risorse da monitorare

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

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

    Output di esempio

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

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

    Output di esempio

    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 una macchina mostra ABM VERSION diverso da DESIRED ABM VERSION o READY diverso da true, utilizza il flag -o yaml per ottenere maggiori dettagli sulla macchina.

  3. HealthChecks se un nodo non riesce a entrare o uscire dalla modalità di manutenzione.

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

    Output di esempio

    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 un controllo di integrità viene visualizzato come non integro, utilizza il flag -o yaml per controllare i dettagli.

  4. Log del controller per verificare la presenza di errori

      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. Controlla se in questa fase sono presenti attività di upgrade in esecuzione o non riuscite.

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

    Output di esempio

    "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 
    

    Output di esempio

    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 nell'output vedi un job in esecuzione, puoi descriverlo o controllare i log dei pod per individuare eventuali errori.