升級階段:AnthosBareMetal

這個階段會升級 Kubernetes 叢集的 Kubernetes 版本和外掛程式。 這個階段也會執行升級工作 mz-location-upgrade

叢集升級作業一次只會在叢集的一個節點上執行。叢集升級的高階步驟如下:

  1. 系統會執行預檢,確保節點已準備好升級。
  2. 節點已排空,準備升級
  3. 節點上的 Kubernetes 版本會升級。
  4. 系統會執行後續檢查,確保節點升級成功。
  5. 節點的 InventoryMachine 資源會從 maintenance 移除。這樣節點就能再次接受 Pod。

節點排空程序

排空節點時,系統會將該節點上執行的所有工作負載順利移出。包含下列步驟:

  1. 節點的 InventoryMachine 資源會放在 maintenance 下方。
  2. BaremetalMachine 資源會放在 maintenance 下方。
  3. Kubernetes 節點已遭汙染:baremetal.cluster.gke.io/maintenanceNoSchedule
  4. 如果是裸機節點,系統會為節點上執行的所有虛擬機器準備排空作業,方法是在 maintenance 下方為該虛擬機器設定 InventoryMachine
  5. Kubernetes 節點上執行的 Pod 會按程序撤銷。每個 Pod 最多有 80 分鐘的時間可正常終止。

取得管理員叢集 kubeconfig、叢集名稱和命名空間

如要在此階段會診問題,您需要管理員叢集 KUBECONFIG,以及要升級的叢集名稱和命名空間。將 ORG_NAME 設為要監控升級作業的機構。

export ORG_NAME=ORG_NAME

根據階段名稱中指定的叢集,選取下列其中一個選項。

  1. 階段名稱:root-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="root-admin"
    export CLUSTER_NAMESPACE="root"
    
  2. 階段名稱:org-admin/AnthosBareMetal

    export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-admin"
    export CLUSTER_NAMESPACE="${ORG_NAME}"
    
  3. 階段名稱:system/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="${ORG_NAME}-system"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  4. 階段名稱:service/AnthosBareMetal

    export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG
    export CLUSTER_NAME="g-${ORG_NAME}-shared-service"
    export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
    
  5. 升級使用者叢集

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

要監控的資源

  1. ABM 叢集資源 clusters.baremetal.cluster.gke.io

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

    輸出範例

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

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

    輸出範例

    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
    

    如果任何機器的 ABM VERSIONDESIRED ABM VERSION 不同,或 READY 不等於 true,請使用 -o yaml 標記取得機器的詳細資料。

  3. 如果節點無法進入或退出維護模式,則會執行健康狀態檢查。

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

    輸出範例

    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
    

    如果任何健康狀態檢查顯示為不健康,請使用 -o yaml 旗標查看詳細資料。

  4. 檢查控制器記錄是否有錯誤

      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. 檢查這個階段是否有任何執行中或失敗的升級工作。

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

    輸出範例

    "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 
    

    輸出範例

    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
    

    如果輸出內容顯示正在執行的工作,您可以描述該工作或檢查 Pod 記錄檔是否有錯誤。