使用Terraform创建的GKE抢占式节点随机重启的排查与解决诉求
排查GKE节点随机重启原因及解决办法
一、排查步骤
1. 查看节点状态与事件
- 执行
gcloud container node-pools describe cache --cluster my-cluster --location asia-southeast1,查看节点池的详细状态,重点关注节点的status和conditions字段,确认是否有抢占、终止相关标记。 - 用
kubectl describe node <节点名称>查看单个节点的事件日志,Events部分会显示节点重启、Pod驱逐的具体原因,比如抢占通知、资源耗尽等。
2. 检查系统日志
- 在Cloud Logging中,过滤资源类型为
GKE Container,并搜索关键词preempted、reboot、shutdown、OOMKilled,定位节点重启的具体触发日志。
3. 验证资源使用情况
- 执行
kubectl top node <节点名称>,检查节点的CPU、内存使用率,若接近100%,可能是资源耗尽导致kubelet触发重启。 - 检查节点磁盘空间:通过GCP控制台的Compute Engine页面查看节点磁盘使用量,若磁盘已满,会引发节点异常重启。
4. 确认抢占式VM特性
你的节点配置中preemptible = true,抢占式VM有两个核心限制:
- 最长运行24小时,到期自动终止重启;
- Google云平台可能因资源调度需求,随时抢占并终止节点,这是该类型VM的设计特性。
二、解决节点重启问题的方案
1. 替换为非抢占式节点(核心解决抢占导致的重启)
修改Terraform配置,关闭抢占式特性,将preemptible = true改为preemptible = false(或直接移除该字段,默认值为false)。修正后的配置如下:
resource "google_container_node_pool" "cache" { name = "cache" location = "asia-southeast1" cluster = "my-cluster" # 补充引号修正语法问题 node_count = 6 node_config { preemptible = false machine_type = "e2-medium" image_type = "cos_containerd" disk_type = "pd-standard" disk_size_gb = 20 labels = { role = "cache" } } }
更新配置后执行terraform apply,替换现有节点池。
2. 缓解节点资源压力
- 调整Pod的资源请求与限制,避免单个节点负载过高;
- 升级机器类型(如改为
e2-large)或增加节点数量,提升整体资源容量; - 启用集群自动扩缩容,让GKE根据Pod调度需求自动增减节点。
3. 控制常规节点的维护重启
对于非抢占式节点,GKE会定期进行系统更新导致重启,可配置维护窗口指定更新时间:
在node_config中添加维护策略:
node_config { # 其他配置... maintenance_policy { window { start_time = "22:00" end_time = "06:00" recurrence = "FREQ=DAILY;" } } }
内容的提问来源于stack exchange,提问作者cris_lee
相关产品推荐
相关产品推荐

