【问题标题】:(SOLVED) GKE deploy cannot find latest image but can find a specific tag(已解决)GKE 部署无法找到最新图像,但可以找到特定标签
【发布时间】:2021-11-25 08:17:12
【问题描述】:

这个让我摸不着头脑

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:
            # a bunch of 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/&lt;project&gt;/&lt;image&gt;:$BUILD_ID 标签构建镜像
  2. 推图gcr.io/&lt;project&gt;/&lt;image&gt;:$BUILD_ID
  3. 带有标志的 GKE Deploy:文件名、图像(尝试使用和不使用)、位置、集群、输出(出于某些不相关的原因)

images:

  1. 'gcr.io/&lt;project&gt;/&lt;image&gt;:$BUILD_ID'

保持 deployment.yaml 不变,我更改了 cloudbuild.yaml,构建工作正常

  • 在第 3 步 GKE 部署中包含 image=gcr.io/&lt;project&gt;/&lt;image&gt;:$BUILD_ID 标志
  • 删除了images: 部分。

由于某种原因,当您在 cloudbuild 文件中包含图像时,它会限制 gke-deploy 访问除这些图像之外的任何内容。

另一种方法是将'gcr.io/&lt;project&gt;/&lt;image&gt;:latest' 添加到标签和图像中,但我认为这不是一个好习惯。

【问题讨论】:

    标签: google-kubernetes-engine google-container-registry


    【解决方案1】:

    您必须将图像标记为“最新”才能使用该标记。 “latest”不会自动添加到最近推送的图片中。

    【讨论】:

    • 我会,我不会。事实证明,因为我添加了 ``` - images: - 'gcr.io/$PROJECT_ID/:$BUILD_ID' `` 并省略了gcr.io/$PROJECT_ID/&lt;app&gt;:latest,所以我遇到了这个问题。但是,当我一起删除“-图像:”部分时,此问题已解决,指定要包含在构建中的图像以某种方式限制了提取最新图像的能力。我不知道怎么做!
    【解决方案2】:

    如果有什么东西阻止容器运行时将镜像拉到 Kubernetes 已将 Pod 调度到的节点上,kubelet 将报告 ErrImagePull,然后是 ImagePullBackOff,并继续尝试。

    因此,ImagePullBackOff 错误表明某些东西正在阻止 Kubernetes 将您想要的映像拉到特定节点上。

    当 GKE 无法从注册表中提取图像时,它会返回 ImagePullBackoff 错误消息。该错误可能是因为找不到映像或者因为您的节点没有permissions 可从注册表中提取。默认情况下,当注册表与您的节点位于同一 Google Cloud 项目中时,GKE 节点有权从 Container Registry 中提取映像。还要检查您是否有“Storage Object Viewer 权限”

    GKE documentation 包含确定根本原因和解决问题的步骤。

    请参考troubleshooting的文档。

    【讨论】:

    • 感谢您的链接。我看了看,发现我有默认配置,根据您的描述和文档,无需进行必要的更改即可访问 GCR。
    猜你喜欢
    • 2021-03-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    相关资源
    最近更新 更多