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

应用ResourceQuota后Pod出现ImagePullBackOff问题求助

问题背景

我们正基于单集群构建多租户架构,为不同命名空间创建ResourceQuota以管理多环境。但部署Pod后部分Pod出现ImagePullBackOff错误,移除ResourceQuota则所有Pod可正常运行。

ResourceQuota配置

apiVersion: v1
kind: ResourceQuota
metadata:
  name: new-name
spec:
  hard:
    requests.cpu: "20"
    requests.memory: 150Gi
    limits.cpu: "20"
    limits.memory: 150Gi

Worker节点资源状态

Resource                    Requests       Limits
  --------                    --------       ------
  cpu                         13725m (86%)   13400m (84%)
  memory                      80508Mi (64%)  105400Mi (84%)
  ephemeral-storage           0 (0%)         0 (0%)
  hugepages-1Gi               0 (0%)         0 (0%)
  hugepages-2Mi               0 (0%)         0 (0%)
  attachable-volumes-aws-ebs  0              0
Events:
  Type     Reason                 Age                  From     Message
  ----     ------                 ----                 ----     -------
  Warning  EvictionThresholdMet   7m4s (x20 over 9d)   kubelet  Attempting to reclaim ephemeral-storage
  Normal   NodeHasDiskPressure    6m58s (x19 over 9d)  kubelet  Node ip-10-200-10-157.ec2.internal status is now: NodeHasDiskPressure
  Normal   NodeHasNoDiskPressure  112s (x21 over 10d)  kubelet  Node ip-10-200-10-157.ec2.internal status is now: NodeHasNoDiskPressure

Pod镜像拉取错误信息

Normal   Pulling    36s (x4 over 2m10s)  kubelet            Pulling image "393871171186.dkr.ecr.us-east-1.amazonaws.com/aro-datamodeler-editor:8.1.2303.0-r7ebe2a05e-SNAPSHOT"
Warning  Failed     36s (x4 over 2m10s)  kubelet            Failed to pull image ".dkr.ecr.__.amazonaws.com/aro-datamodeler-editor:8.1.2303.0-r7ebe2a05e-SNAPSHOT": rpc error: code = Unknown desc = failed to pull and unpack image ".dkr.ecr.__.amazonaws.com/aro-datamodeler-editor:8.1.2303.0-r7ebe2a05e-SNAPSHOT": failed to resolve reference ".dkr.ecr.__.amazonaws.com/aro-datamodeler-editor:8.1.2303.0-r7ebe2a05e-SNAPSHOT": pulling from host .dkr.ecr.__.amazonaws.com failed with status code [manifests 8.1.2303.0-r7ebe2a05e-SNAPSHOT]: 403 Forbidden

提问:ResourceQuota是否存在相关限制导致该问题?


分析与解答

  1. ResourceQuota本身不会直接触发镜像拉取403错误
    你当前的Quota仅管控CPU和内存的请求/限制额度,这类配置和镜像仓库的身份认证逻辑完全无关,不会直接导致403权限错误。

  2. 移除Quota后Pod正常运行的间接关联可能性

    • 资源强制要求的连锁影响:当命名空间存在ResourceQuota时,Kubernetes会强制要求Pod必须指定CPU和内存的requests/limits(否则Pod会被拦截无法创建)。如果你的Pod部署时未显式设置这些参数,Kubernetes会使用该命名空间下LimitRange定义的默认资源值。若默认值导致Pod调度到存在磁盘压力的节点(从节点历史事件看曾出现过NodeHasDiskPressure),可能因磁盘空间不足触发镜像拉取流程异常,部分仓库会返回误导性的403状态码。
    • 镜像地址异常:从Pod错误日志看,实际拉取的镜像地址被截断为.dkr.ecr.__.amazonaws.com/...,这可能是日志脱敏导致,但需确认是否存在Admission Controller或配置错误,在Quota存在时篡改了镜像地址,导致无法正确访问ECR仓库。
  3. 排查建议

    • 检查目标命名空间是否存在LimitRange资源,确认默认的CPU、内存及临时存储限制是否合理,避免因默认资源配置导致Pod调度异常。
    • 在该命名空间下手动创建带明确requests/limits的测试Pod,验证镜像拉取是否正常:
      kubectl run -n <目标命名空间> test-pull --image=393871171186.dkr.ecr.us-east-1.amazonaws.com/aro-datamodeler-editor:8.1.2303.0-r7ebe2a05e-SNAPSHOT --overrides='{"spec":{"containers":[{"name":"test","resources":{"requests":{"cpu":"100m","memory":"128Mi"},"limits":{"cpu":"100m","memory":"128Mi"}}}]}}'
      
    • 检查节点容器运行时存储目录(如/var/lib/docker或/var/lib/containerd)的剩余空间,确保有足够空间拉取和解压镜像。
    • 验证该命名空间下的镜像拉取Secret(用于ECR认证)是否配置正确,可通过kubectl get secrets -n <目标命名空间>确认,并检查Secret是否关联到Pod使用的ServiceAccount。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:40:48