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

使用Terraform部署GKE Autopilot后Deployment更新出现无法调度问题

问题核心原因

GKE Autopilot模式下该问题通常由滚动更新策略的资源冗余要求、默认资源分配规则、配额限制三类原因导致:

  1. 默认滚动更新策略需要额外预留资源:Kubernetes Deployment默认滚动更新规则为maxSurge=25%、maxUnavailable=25%,副本数为2时更新阶段会先启动1个新Pod再销毁旧Pod,需要额外占用1个Pod的资源。如果集群初始资源刚好满足现有副本运行需求,没有冗余资源供新增的Surge Pod使用,就会触发资源不足报错。
  2. 未显式配置Pod资源请求/限制:Autopilot会为未声明资源配置的Pod分配默认资源,不合理的默认值会导致资源浪费,挤占集群可用空间。
  3. 区域配额不足或Terraform生命周期规则不合理:GCP对应区域的Compute Engine CPU/内存配额满额时,Autopilot无法扩容新节点满足Pod调度需求;不完整的ignore_changes规则会导致Terraform反复触发不必要的Deployment重建。

解决方案

1. 调整滚动更新策略降低冗余要求

在kubernetes_deployment资源的spec块中新增滚动更新配置,设置maxSurge=0,更新时先销毁旧Pod再启动新Pod,无需额外预留资源:

resource "kubernetes_deployment" "my_deployment" {
  metadata {
    name = "my-app"
  }
  spec {
    replicas = 2
    # 新增滚动更新配置
    strategy {
      type = "RollingUpdate"
      rolling_update {
        max_surge = 0
        max_unavailable = 1
      }
    }
    selector {
      match_labels = {
        run = "my-app"
      }
    }
    # 其余原有配置保持不变
  }
}

2. 显式声明Pod资源配额

在容器配置块中新增resources字段,明确资源请求和上限,避免Autopilot分配过大的默认资源:

container {
  image = "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
  name  = "hello-app"
  # 新增资源配置
  resources {
    requests = {
      cpu = "100m"
      memory = "256Mi"
    }
    limits = {
      cpu = "200m"
      memory = "512Mi"
    }
  }
}

3. 检查区域配额并调整集群配置

  • 登录GCP控制台进入「IAM与管理 > 配额」页面,筛选southamerica-east1区域的Compute Engine CPU、内存配额,配额不足时提交提额申请。
  • 优化google_container_cluster资源配置,明确Autopilot自动扩缩容参数:
resource "google_container_cluster" "my_gke" {
  name             = "my-gke"
  enable_autopilot = "true"
  location         = "southamerica-east1"
  # 新增自动扩缩容配置
  cluster_autoscaling {
    auto_provisioning_defaults {
      service_account = "default"
      oauth_scopes = ["https://www.googleapis.com/auth/cloud-platform"]
    }
  }
}

4. 修正生命周期忽略规则

调整ignore_changes配置,避免GKE自动注入的系统字段触发不必要的Deployment重建:

lifecycle {
  ignore_changes = [
    metadata[0].annotations,
    metadata[0].labels,
    metadata[0].resource_version,
    spec[0].template[0].spec[0].container[*].security_context
  ]
}

配置修改完成后执行terraform apply生效,重新更新Deployment版本即可正常调度。


内容的提问来源于stack exchange,提问作者deniable_encryption

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:01