如何正确重启GKE Kubernetes集群中的VM节点?
规范重启GKE节点的正确操作方式
你这个思路完全是对的!先驱逐节点再重启VM,就是GKE官方推荐的最规范的节点维护操作,比直接硬重启安全太多,能有效避免Pod意外中断或者数据丢失的问题。下面我把完整流程、注意事项和一些可选操作给你理清楚:
一、标准手动操作流程
1. 先将节点设为不可调度并驱逐Pod
这一步是核心,目的是把节点上的所有可迁移Pod都转移到其他节点,同时阻止新Pod被调度过来:
- 首先标记节点为不可调度:
kubectl cordon <你的节点名称> - 然后执行驱逐命令,这里要注意两个关键参数:
kubectl drain <你的节点名称> --ignore-daemonsets --delete-emptydir-data--ignore-daemonsets:DaemonSet类型的Pod本来就需要在每个节点运行,驱逐时忽略它们就行,节点重启后DaemonSet会自动重建这些Pod--delete-emptydir-data:如果你的Pod用了EmptyDir存储,这个参数允许删除临时数据;如果EmptyDir里有需要保留的内容,得先手动备份或者迁移这些Pod
2. 重启GKE节点的VM实例
驱逐完成后就可以安全重启VM了,两种常用方式:
- 通过GCP控制台:找到对应的GCE实例,直接点「重启」按钮
- 用gcloud命令行:
gcloud compute instances restart <实例名称> --zone <节点所在区域>
3. 恢复节点的调度能力
等节点重启完成(可以用kubectl get nodes查看状态,变成Ready就没问题了),取消不可调度标记:
kubectl uncordon <你的节点名称>
二、其他可选的规范操作方式
如果你的集群开启了节点自动修复(Node Auto-Repair)功能,GKE会自动监测节点健康并处理故障,但手动重启的话还是上面的流程最靠谱。另外还有两种场景的操作:
- 批量重启节点:如果需要重启整个节点池的节点,可以用GKE的节点池滚动更新。哪怕只是修改一个无关紧要的配置(比如调整节点标签),或者直接触发一次滚动更新,GKE都会逐个替换节点,自动完成驱逐、创建新节点、调度Pod的全流程,不用手动操作每个节点,适合大规模维护。
- 临时替换节点:如果节点有硬件问题,不想重启而是直接替换,可以删除节点后让GKE自动创建新节点(前提是节点池的自动扩缩容是开启的),不过这种方式不如重启经济。
三、关键注意事项
- 确保你的应用副本数足够,比如Deployment的
replicas至少是2,这样驱逐Pod的时候其他节点能承接流量,避免服务中断 - 对于StatefulSet这类有状态应用,要确保它们的持久化存储是挂载的外部存储(比如PersistentVolume),驱逐时优雅终止,避免数据损坏
- 如果节点上有本地存储的Pod,一定要提前备份数据,因为EmptyDir的数据会随节点重启丢失
内容的提问来源于stack exchange,提问作者pokeymond
相关产品推荐
相关产品推荐

