Cluster Autoscaler 不扩节点:从不可调度原因开始

分析 Pending Pod、节点组配置、调度约束与云配额,定位集群自动扩容未触发或扩容失败。

文章目录 · 4 节

Cluster Autoscaler 只为“增加节点后能够调度”的 Pod 扩容。镜像错误、PVC 未绑定或硬性亲和规则无解时,Pod 虽然 Pending,也不会触发有效扩容。

读取调度与扩容事件

kubectl describe pod worker-abc -n jobs
kubectl get events -A --field-selector reason=FailedScheduling
kubectl logs -n kube-system deploy/cluster-autoscaler --since=30m | grep -Ei 'scale|unschedul|backoff'

先确认调度器给出的原因是资源不足。再从 Autoscaler 日志查看 Pod 是否被过滤、匹配到哪个节点组以及云 API 返回了什么错误。

检查约束和上限

kubectl get pod worker-abc -n jobs -o yaml
kubectl get nodes -L topology.kubernetes.io/zone,node.kubernetes.io/instance-type
kubectl get resourcequota -A

核对 requests、nodeSelector、affinity、taints/tolerations、拓扑分布和 PVC 可用区。还要检查节点组最大值、云配额、IP 地址和实例库存。

常见误区

  • Pod 没写合理 requests,导致容量模型失真
  • 亲和性限定到不存在的标签或可用区
  • 扩容节点启动很慢,却没有考虑应用等待时限
  • 同时由多个工具管理节点组期望容量

收尾清单

验证节点创建、注册、CNI 就绪和 Pod 调度完整链路。为扩容失败、节点启动耗时和不可调度 Pod 年龄建立告警。