如果您需要修复或维护节点,则应首先将节点置于维护模式。将节点置于维护模式会安全地排空其 pod/工作负载,并将节点排除在 pod 调度外。在维护模式下,您可以在节点上运行,而不会有中断 Pod 流量的风险。
运作方式
GKE on Bare Metal 提供了一种将节点置于维护模式的方法。此方法可让其他集群组件正确知道节点处于维护模式。将节点置于维护模式时,无法在节点上安排其他 pod,并且现有 pod 会停止。
您可以在特定节点上手动使用 Kubernetes 命令(例如 kubectl cordon
和 kubectl drain
),而不是使用维护模式。如果您运行 GKE on Bare Metal 1.12.0 版 (anthosBareMetalVersion: 1.12.0
) 或更低版本,请参阅有关如果您不使用维护模式过程节点会取消封锁的已知问题。
使用维护模式进程时,GKE on Bare Metal 执行以下操作:
节点污点会被添加到指定节点,以指示在这些节点上无法安排或执行任何 Pod。
系统会强制执行 20 分钟的超时,以确保节点不会因等待 Pod 停止而停滞。如果 Pod 被配置为容忍所有污点或具有终结器,则其可能不会停止。GKE on Bare Metal 会尝试停止所有 Pod,但如果超时,节点将进入维护模式。此超时可防止正在运行的 Pod 阻止升级。
将节点置于维护模式
选择要在集群配置文件的 maintenanceBlocks
下,通过指定选择节点的 IP 地址范围,选择要进入维护模式的节点。您选择的节点必须处于就绪状态且在集群中正常运行。
如需将节点置于维护模式,请执行以下操作:
修改集群配置文件以选择要置于维护模式的节点。
您可以使用自己选择的编辑器修改配置文件,也可以运行以下命令直接修改集群自定义资源:
kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
替换以下内容:
CLUSTER_NAMESPACE
:集群的命名空间。CLUSTER_NAME
:集群的名称。
将
maintenanceBlocks
部分添加到集群配置文件,以指定要置于维护模式的节点的单个 IP 地址或地址范围。以下示例展示了如何通过指定 IP 地址范围来选择多个节点:
metadata: name: my-cluster namespace: cluster-my-cluster spec: maintenanceBlocks: cidrBlocks: - 172.16.128.1-172.16.128.64
保存并应用更新后的集群配置。
GKE on Bare Metal 开始将节点置于维护模式。
运行以下命令以获取集群中节点的状态:
kubectl get nodes --kubeconfig=KUBECONFIG
响应如下所示:
NAME STATUS ROLES AGE VERSION user-anthos-baremetal-01 Ready control-plane 2d22h v1.27.4-gke.1600 user-anthos-baremetal-04 Ready worker 2d22h v1.27.4-gke.1600 user-anthos-baremetal-05 Ready worker 2d22h v1.27.4-gke.1600 user-anthos-baremetal-06 Ready worker 2d22h v1.27.4-gke.1600
请注意,节点仍然可调度,但污点会阻止任何 Pod(没有适当的容忍设置)被调度到节点上。
运行以下命令以获取维护模式下的节点数:
kubectl get nodepools --kubeconfig ADMIN_KUBECONFIG
响应应类似于以下示例:
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN np1 3 0 0 1 0
此示例中的此
UNDERMAINTENANCE
列显示了一个节点处于维护模式。GKE on Bare Metal 还会在节点进入维护模式时将以下污点添加到节点:
baremetal.cluster.gke.io/maintenance:NoExecute
baremetal.cluster.gke.io/maintenance:NoSchedule
结算和维护模式
GKE on Bare Metal 的结算基于集群为能够运行工作负载的节点具备的 vCPU 数量。将节点置于维护模式时,NoExecute
和 NoSchedule
污点将添加到节点,但它们不会停用结算功能。将节点置于维护模式后,封锁节点 (kubectl cordon NODE_NAME
) 以将其标记为无法安排。将节点标记为无法安排后,该节点及其关联的 vCPU 将从结算中排除。
如价格页面中所述,您可以使用 kubectl
查看每个用户集群的 vCPU 容量(计入 Anthos 费用的部分)。该命令不会考虑节点是否可安排,它仅提供每个节点的 vCPU 数量。
要确定用户集群的每个节点的 vCPU 数量,请使用以下代码:
kubectl get nodes \
--kubeconfig USER_KUBECONFIG \
-o=jsonpath="{range .items[*]}{.metadata.name}{\"\t\"} \
{.status.capacity.cpu}{\"\n\"}{end}"
将 USER_KUBECONFIG 替换为用户集群的 kubeconfig 文件的路径。
从维护模式中移除节点
如需从维护模式中移除节点,请执行以下操作:
修改集群配置文件以清除要从维护模式中移除的节点。
您可以使用自己选择的编辑器修改配置文件,也可以运行以下命令直接修改集群自定义资源:
kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
替换以下内容:
CLUSTER_NAMESPACE
:集群的命名空间。CLUSTER_NAME
:集群的名称。
修改 IP 地址以从维护模式中移除特定节点,或者移除
maintenanceBlocks
部分从维护模式中移除所有操作。保存并应用更新后的集群配置。
使用
kubectl
命令检查节点的状态。