此阶段会升级 Kubernetes 集群的 Kubernetes 版本和插件。此阶段还会运行升级任务 mz-location-upgrade。
集群升级一次在一个集群节点上执行。集群升级的简要步骤如下:
- 系统会运行预检检查,以确保节点已准备好进行升级。
- 节点被排空,以准备升级
- 节点上的 Kubernetes 版本已升级。
- 运行飞行后检查,以确保节点升级成功。
- 节点的
InventoryMachine资源已从maintenance中移除。这样,节点就可以再次准备好接受 pod。
节点排空流程
排空节点是指以正常方式将该节点上运行的所有工作负载移出该节点。它包含以下步骤:
- 节点的
InventoryMachine资源位于maintenance下方。 BaremetalMachine资源位于maintenance下。- Kubernetes 节点被污染,污染为
baremetal.cluster.gke.io/maintenance:NoSchedule - 对于裸机节点,通过在
maintenance下为在该节点上运行的任何虚拟机设置InventoryMachine,准备好对这些虚拟机进行排空。 - 在 Kubernetes 节点上运行的 pod 会被正常逐出。每个 pod 最多有 80 分钟的时间来正常终止。
获取管理员集群 kubeconfig、集群名称和命名空间
如需在此阶段对问题进行初步诊断,您需要管理员集群 KUBECONFIG 以及正在升级的集群的名称和命名空间。将 ORG_NAME 设置为您要监控升级的组织。
export ORG_NAME=ORG_NAME
根据阶段名称中指定的集群选择以下选项之一。
阶段名称:root-admin/AnthosBareMetal
export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG export CLUSTER_NAME="root-admin" export CLUSTER_NAMESPACE="root"阶段名称:org-admin/AnthosBareMetal
export ADMIN_KUBECONFIG=ROOT_ADMIN_KUBECONFIG export CLUSTER_NAME="${ORG_NAME}-admin" export CLUSTER_NAMESPACE="${ORG_NAME}"阶段名称:system/AnthosBareMetal
export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG export CLUSTER_NAME="${ORG_NAME}-system" export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"阶段名称:service/AnthosBareMetal
export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG export CLUSTER_NAME="g-${ORG_NAME}-shared-service" export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"用户集群升级
export ADMIN_KUBECONFIG=ORG_ADMIN_KUBECONFIG export CLUSTER_NAME=USER_CLUSTER_NAME export CLUSTER_NAMESPACE="${CLUSTER_NAME}-cluster"
要监控的资源
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 RunningABM 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 VERSION或READY不等于true,请使用-o yaml标志获取有关该机器的更多详细信息。如果节点无法进入或退出维护模式,则进行健康检查。
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标志查看详细信息。控制器日志,用于检查是否存在错误
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}检查此阶段是否有正在运行或失败的升级任务。
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 日志中是否存在错误。