已解决: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:
- 使用
-t gcr.io/<project>/<image>:$BUILD_ID标签构建镜像 - 推送
gcr.io/<project>/<image>:$BUILD_ID镜像 - 执行GKE Deploy,携带参数:配置文件路径、镜像参数(试过带和不带两种情况)、集群区域、集群名称、输出参数(出于其他无关需求)
images:
'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
相关产品推荐
相关产品推荐

