You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:54:55