标记节点为不可调度: 在关机之前,您应该将节点标记为不可调度,以防止新的 Pod 被调度到该节点。可以使用以下命令:
kubectl cordon <node-name>
这会将节点标记为不可调度(cordoned),即不再接受新的 Pod。
驱逐节点上的 Pod: 接下来,您可以驱逐节点上的 Pod,以便它们可以在其他节点上重新调度。可以使用以下命令:
kubectl drain <node-name> --ignore-daemonsets --delete-local-data
--ignore-daemonsets
:忽略 DaemonSet 管理的 Pod,因为这些 Pod 会在其他节点上继续运行。
--delete-local-data
:如果节点上有本地数据(如 EmptyDir 类型的卷),则删除这些 Pod。
确认 Pod 已被驱逐: 您可以使用以下命令检查节点上的 Pod 状态,确保它们已经被驱逐:
kubectl get pods --all-namespaces -o wide | grep <node-name>
一旦节点上的 Pod 被驱逐并且节点标记为不可调度,您可以安全地关闭该节点。具体的关机命令取决于您使用的操作系统。例如,在 Linux 上,您可以使用:
sudo shutdown now
确认节点状态: 关闭节点后,您可以通过以下命令确认 Kubernetes 集群的节点状态:
kubectl get nodes
关闭的节点将显示为 NotReady
状态。
当您准备好重新启动节点时,您只需启动该节点并确保它能够重新加入 Kubernetes 集群。Kubernetes 会自动识别节点的状态并将其标记为 Ready
,前提是节点的 kubelet 服务正在运行。
Pod 迁移:在驱逐 Pod 之前,确保应用程序能够处理 Pod 的迁移,尤其是状态ful 应用程序。
节点标签和污点:如果节点上有特定的标签或污点,您可能需要在重新启动后重新配置这些设置。
监控和日志:在关机和重启过程中,监控集群的健康状况,查看日志以确保没有问题。