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

已解决:GKE部署无法拉取latest镜像但指定标签可正常部署

gke-deploy 无法在容器镜像仓库中找到对应镜像问题

这个问题让我十分困惑。

*gke-deploy 无法在容器镜像仓库中找到对应镜像。*检查Pod事件时,我发现如下报错:

Type     Reason     Age                  From                                   Message
  ----     ------     ----                 ----                                   -------
  Normal   Scheduled  15m                  gke.io/optimize-utilization-scheduler  Successfully assigned <namespace>/<app>-78c9f7dc4b-svgds to gke-<cluster>-d-preemptible-node-e150c774-pmtw
  Normal   Pulling    13m (x4 over 15m)    kubelet                                Pulling image "gcr.io/<project>/<image>"
  Warning  Failed     13m (x4 over 15m)    kubelet                                Failed to pull image "gcr.io/<project>/<image>": rpc error: code = Unknown desc = Error response from daemon: manifest for gcr.io/<project>/<image>:latest not found: manifest unknown: Failed to fetch "latest" from request "/v2/<projet>/<image>/manifests/latest".
  Warning  Failed     13m (x4 over 15m)    kubelet                                Error: ErrImagePull
  Warning  Failed     5m8s (x42 over 15m)  kubelet                                Error: ImagePullBackOff
  Normal   BackOff    3s (x64 over 15m)    kubelet                                Back-off pulling image "gcr.io/<project>/<image>"

除了上述报错外,当我使用GCR中存在的特定镜像标签时,部署可以正常完成。我多次核对过拼写,确认全部正确,我直接复制GCP的路径与deployment.yaml中的配置做过比对。

我的deployment.yaml配置如下:

元数据部分

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <app>
  namespace: <namespace>
  labels:
    app: <app>

规格部分

replicas: 1
  selector:
    matchLabels:
      app: <app>
  template:
    metadata:
      labels:
        app: <app>
    spec:
      containers:
        - name: <image>
          image: gcr.io/<project>/<image>
          env:
            # 若干环境变量配置
          resources:
            requests:
              memory: '100Mi'
              cpu: '50m'
            limits:
              memory: '500Mi'
              cpu: '100m'

自动扩缩容部分

---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: <app>-hpa
  namespace: <namespace>
  labels:
    app: <app>
spec:
  scaleTargetRef:
    kind: Deployment
    name: <app>
    apiVersion: apps/v1
  minReplicas: 1
  maxReplicas: 3
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 60

我不清楚为什么只有指定特定镜像标签才能部署成功,希望得到大家的帮助。

编辑更新:问题解决方案

最终排查发现问题出在之前省略的cloudbuild.yaml配置文件中。
原来的云构建配置包含如下部分:
steps:

  1. 使用-t gcr.io/<project>/<image>:$BUILD_ID标签构建镜像
  2. 推送gcr.io/<project>/<image>:$BUILD_ID镜像
  3. 执行GKE Deploy,携带参数:配置文件路径、镜像参数(试过带和不带两种情况)、集群区域、集群名称、输出参数(出于其他无关需求)

images:

  1. 'gcr.io/<project>/<image>:$BUILD_ID'

在不修改deployment.yaml的前提下,按如下规则修改cloudbuild.yaml后,构建部署流程恢复正常:

  • 在第3步的GKE Deploy命令中添加image=gcr.io/<project>/<image>:$BUILD_ID参数
  • 移除images:配置段

经推测,当你在cloudbuild.yaml中配置了images字段时,会限制gke-deploy仅能访问该字段列出的镜像,其他镜像均无法访问。

另一种可选解决方案是为镜像额外打上'gcr.io/<project>/<image>:latest'标签,并将该标签添加到images列表中,但该做法不符合最佳实践,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:45:01