GKE部署绑定PVC的工作负载后提示无法扩容节点问题咨询
GKE部署带PVC工作负载后触发
Can’t scale up nodes误报告警处理 触发场景
- 基于Terraform构建的单可用区、单节点池GKE集群,部署通过PVC申请GCE持久卷的工作负载后,谷歌云控制台弹出
Can’t scale up nodes通知 - 集群自动扩缩容组件返回的报错日志如下:
reason: { messageId: "no.scale.up.mig.failing.predicate" parameters: [ 0: "" 1: "pod has unbound immediate PersistentVolumeClaims"
- 未部署该工作负载前,集群从未出现节点扩容类报错
- 告警触发时集群实际运行状态完全正常:工作负载运行无异常,对应PV自动创建完成且已与PVC成功绑定,涉事PVC配置如下:
apiVersion: v1 kind: PersistentVolumeClaim metadata: finalizers: - kubernetes.io/pvc-protection name: nfs namespace: nfs spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: standard volumeMode: Filesystem status: accessModes: - ReadWriteOnce capacity: storage: 10Gi phase: Bound
根本原因
该告警属于集群自动扩缩容(CA)组件的时序误报,无实际业务影响,触发逻辑如下:
- GKE默认
standard存储类默认使用Immediate卷绑定模式,该模式下PV不会等待Pod调度完成再创建,PVC创建后就会触发PV制备流程,但GCE持久盘属于可用区级资源,需要匹配Pod调度的目标可用区才能完成挂载,因此实际绑定动作会等到Pod调度节点确认后才最终完成 - 集群自动扩缩容判断是否需要新增节点时,会全量扫描Pending状态的Pod做调度模拟。在Pod刚创建、PVC尚未完成最终绑定的毫秒级时间窗口内,CA会检测到Pod携带未绑定的立即模式PVC,触发
pod has unbound immediate PersistentVolumeClaims调度校验失败,判定现有节点无法承载该Pod,触发节点池扩容评估流程 - 单可用区架构下,CA在执行MIG(节点池对应的托管实例组)扩容前的二次校验时,PVC已经完成绑定、Pod也已经调度到现有节点正常运行,不需要实际执行扩容动作,但之前的调度校验失败事件已经被推送到云控制台通知队列,最终弹出无实际影响的误报告警。
- 该问题属于GKE自动扩缩容组件的已知事件上报时序缺陷,不代表集群、节点池、存储配置存在错误。
处理方案
- 若该告警不影响日常运维观测,可直接忽略,不会对业务运行、集群资源分配造成任何实际影响
- 若需要彻底消除该类误报,可将对应StorageClass的
volumeBindingMode显式修改为WaitForFirstConsumer,配置示例如下:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: kubernetes.io/gce-pd parameters: type: pd-standard volumeBindingMode: WaitForFirstConsumer
该配置会让PVC绑定动作严格延后到Pod调度决策完成后再执行,避免CA在调度模拟阶段误判PVC未绑定状态。
- 若通过Terraform管理集群存储类配置,可在
kubernetes_storage_class资源中增加volume_binding_mode = "WaitForFirstConsumer"字段,永久固化该配置,避免后续集群重建、配置漂移再次触发同类问题。
内容的提问来源于stack exchange,提问作者Valentin Ouvrard
相关产品推荐
相关产品推荐

