升级阶段: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 VERSION 不同于 DESIRED ABM VERSIONREADY 不等于 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 日志中是否存在错误。