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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:30:11