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

Kubernetes配额问题排查:作业运行两周后Pod因配额不足停摆且无运行Pod

解决ResourceQuota配额不足但无运行中Pod的问题

这种情况我碰到过好几次,核心原因是Job产生的已终止(Completed/Failed)Pod没有被清理,它们的资源请求依然会被ResourceQuota统计占用配额,哪怕这些Pod早就不在运行状态了。

第一步:验证问题根源

先确认是不是历史Pod在搞鬼:

  1. 查看rate-jobs命名空间下所有状态的Pod,包括已终止的:

    kubectl get pods -n rate-jobs
    

    你大概率会看到一堆Completed或者Failed状态的Pod,这些就是占用配额的“元凶”。

  2. 查看ResourceQuota的实际使用情况,对比限制和已使用量:

    kubectl describe resourcequota rate-jobs-compute-resources -n rate-jobs
    

    这个命令会清晰展示hard(配额上限)和used(已使用量)的数值,你会发现已使用量已经接近或达到了上限。

第二步:解决方法

1. 立即清理历史Pod

先手动释放被占用的配额:

# 删除所有Completed状态的Pod
kubectl delete pods -n rate-jobs --field-selector=status.phase=Completed

# 如果有Failed的Pod也需要清理,执行这条
kubectl delete pods -n rate-jobs --field-selector=status.phase=Failed

执行完之后再尝试创建新Pod,应该就能正常运行了。

2. 配置Job自动清理历史Pod

手动清理只是临时解决,要避免以后再出现这个问题,需要修改Job的历史保留策略:

  • 编辑现有Job的配置,减少保留的历史Pod数量:

    kubectl patch job <你的Job名称> -n rate-jobs -p '{"spec":{"successfulJobsHistoryLimit":1,"failedJobsHistoryLimit":0}}'
    

    这里设置成功的Job只保留1个历史Pod,失败的直接清理,你可以根据自己的需求调整数值。

  • 如果是CronJob生成的Job,要修改CronJob的模板配置,让它创建的所有Job都自动清理历史:

    apiVersion: batch/v1
    kind: CronJob
    metadata:
      name: <你的CronJob名称>
      namespace: rate-jobs
    spec:
      schedule: "你的调度规则"
      jobTemplate:
        spec:
          successfulJobsHistoryLimit: 1
          failedJobsHistoryLimit: 0
          template:
            # 你的Pod模板内容
    

3. (可选)调整ResourceQuota上限

如果你的业务确实需要更多资源,可以调整ResourceQuota的hard限制,但这只是治标不治本,优先推荐前面的自动清理方案。

补充说明

Kubernetes的ResourceQuota统计的是命名空间内所有存在的Pod的资源请求(requests),不管Pod处于运行、终止还是等待状态,只要Pod对象还存在,就会被算入配额使用量。Job默认会保留3个成功Pod和1个失败Pod,运行两周的作业会积累大量这类“僵尸”Pod,最终耗尽配额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:40:48