如果您需要修复或维护节点,则应首先将节点置于维护模式。将节点置于维护模式会安全地排空其 pod/工作负载,并将节点排除在 pod 调度外。在维护模式下,您可以在节点上运行,而不会有中断 Pod 流量的风险。
工作原理
Anthos clusters on Bare Metal 提供了一种将节点置于维护模式的方法。此方法可让其他集群组件正确知道节点处于维护模式。将节点置于维护模式时,无法在节点上安排其他 pod,并且现有 pod 会停止。
您可以在特定节点上手动使用 Kubernetes 命令(例如 kubectl cordon
和 kubectl drain
),而不是使用维护模式。如果您运行 Anthos Clusters on Bare Metal 1.12.0 版 (anthosBareMetalVersion: 1.12.0
) 或更低版本,请参阅有关不封锁节点(如果您不使用维护模式过程)的已知问题。
使用维护模式过程时,Anthos clusters on Bare Metal 会执行以下操作:
节点污点会被添加到指定节点,以指示在这些节点上无法安排或执行任何 Pod。
系统会强制执行 20 分钟的超时,以确保节点不会因等待 Pod 停止而停滞。如果 Pod 被配置为容忍所有污点或具有终结器,则其可能不会停止。Anthos clusters on Bare Metal 会尝试停止所有 Pod,但如果超时,节点将进入维护模式。此超时可防止正在运行的 Pod 阻止升级。
如果您在节点上运行基于虚拟机的工作负载,则 Anthos clusters on Bare Metal 会将
NodeSelector
应用于虚拟机实例 (VMI) Pod,然后停止该 Pod。NodeSelector
可确保从维护模式中移除节点时,VMI 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
保存并应用更新后的集群配置。
Anthos clusters on Bare Metal 开始将节点置于维护模式。
运行以下命令以获取集群中节点的状态:
kubectl get nodes -n CLUSTER_NAME
响应如下所示:
NAME STATUS ROLES AGE VERSION user-anthos-baremetal-01 Ready master 2d22h v1.17.8-gke.16 user-anthos-baremetal-04 Ready <none> 2d22h v1.17.8-gke.16 user-anthos-baremetal-05 Ready,SchedulingDisabled <none> 2d22h v1.17.8-gke.16 user-anthos-baremetal-06 Ready <none> 2d22h v1.17.8-gke.16
状态为
SchedulingDisabled
表示节点处于维护模式。运行以下命令以获取维护模式下的节点数:
kubectl get nodepools
响应应类似于以下输出:
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN np1 3 0 0 1 0
此示例中的此
UNDERMAINTENANCE
列显示了一个节点处于维护模式。Anthos clusters on Bare Metal 在进入维护模式时,还会将以下污点添加到节点:
baremetal.cluster.gke.io/maintenance:NoExecute
baremetal.cluster.gke.io/maintenance:NoSchedule
从维护模式中移除节点
如需从维护模式中移除节点,请执行以下操作:
修改集群配置文件以清除要从维护模式中移除的节点。
您可以使用自己选择的编辑器修改配置文件,也可以运行以下命令直接修改集群自定义资源:
kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
替换以下内容:
CLUSTER_NAMESPACE
:集群的命名空间。CLUSTER_NAME
:集群的名称。
修改 IP 地址以从维护模式中移除特定节点,或者移除
maintenanceBlocks
部分从维护模式中移除所有操作。保存并应用更新后的集群配置。
使用
kubectl
命令检查节点的状态。