如果您需要修复或维护节点,则应首先将节点置于维护模式。将节点置于维护模式会安全地排空其 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 阻止升级。
将节点置于维护模式
选择要在集群配置文件的 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 --kubeconfig=KUBECONFIG
响应如下所示:
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 <none> 2d22h v1.17.8-gke.16 user-anthos-baremetal-06 Ready <none> 2d22h v1.17.8-gke.16
请注意,节点仍然可调度,但污点会阻止任何 Pod(没有适当的容忍设置)被调度到节点上。
运行以下命令以获取维护模式下的节点数:
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
命令检查节点的状态。