【问题标题】:GKE problem when running cronjob by pulling image from Artifact Registry通过从 Artifact Registry 中提取图像来运行 cronjob 时出现 GKE 问题
【发布时间】:2022-01-15 03:36:14
【问题描述】:

我在 GKE 中创建了一个具有以下规范的 cronjob:

# cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: collect-data-cj-111
spec:
  schedule: \"*/5 * * * *\"
  concurrencyPolicy: Allow
  startingDeadlineSeconds: 100
  suspend: false
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: collect-data-cj-111
            image: collect_data:1.3
          restartPolicy: OnFailure

我使用以下命令创建 cronjob:

kubectl apply -f collect_data.yaml

当我稍后观察它是否正在运行时(为了测试,我安排它每 5 分钟运行一次),这是我看到的:

$ kubectl get pods --watch
NAME                                 READY   STATUS              RESTARTS   AGE
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   0/1     Pending             0          0s
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   0/1     Pending             0          1s
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   0/1     ContainerCreating   0          1s
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   0/1     ErrImagePull        0          3s
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   0/1     ImagePullBackOff    0          17s
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   0/1     ErrImagePull        0          30s
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   0/1     ImagePullBackOff    0          44s

它似乎无法从 Artifact Registry 中提取图像。我在同一个项目下创建了 GKE 和 Artifact Registry。

可能是什么原因?在文档上花了几个小时后,我仍然无法取得进展,而且我在 GKE 的世界里还是个新手。

如果您碰巧建议我检查任何内容,如果您还描述了我应该在 GCP 中的哪个位置检查/控制您的建议,我将不胜感激。


附录:

当我运行以下命令时:

kubectl describe pods

输出非常大,但我想以下消息应该表明问题所在。

    Failed to pull image \"collect_data:1.3\": rpc error: code = Unknown 
desc = failed to pull and unpack image \"docker.io/library/collect_data:1.3\":
 failed to resolve reference \"docker.io/library/collect_data:1.3\": pull 
access denied, repository does not exist or may require authorization: 
server message: insufficient_scope: authorization failed

如何逐步解决这个问题?

  • 您用于运行 GKE 集群的服务帐户可能无权访问 Artifact Registry。可能需要检查附加到它的 IAM 角色
  • 您能否分享其中一个 pod(kubectl describe)的详细信息以检查错误是什么?
  • @BlenderFox 我该怎么做?是否可以提供一些具体的说明?
  • @boredabdel 感谢您的评论。我在上面的问题中添加了更多信息。你觉得你能指导我解决吗?这似乎是一个授权问题,但我不明白我需要检查什么。
  • 从错误消息来看,您的 GKE 集群中虚拟机级别的范围似乎配置错​​误。你能看看这个文档cloud.google.com/artifact-registry/docs/access-control#gke。使用gcloud compute instances list 查找您的一个虚拟机的名称。复制 VM 名称和区域并运行以下命令以获取在 vm gcloud compute instances describe INSTANCE_NAME --zone ZONE | grep -A6 scopes 上配置的当前作用域并在此处输出

标签: docker kubernetes google-cloud-platform google-kubernetes-engine google-artifact-registry


【解决方案1】:

从共享的错误中,我可以看出该映像不是从 Artifact Registry 中拉取的,失败的原因是因为默认情况下,GKE 直接从 Docker Hub 拉取它,除非另有说明。由于那里没有 collect_data 图像,因此出现错误。

指定存储在 Artifact Registry 中的图像的正确方法如下:

image: <location>-docker.pkg.dev/<project>/<repo-name>/<image-name:tag>

请注意,如果您使用的是 docker-containerized 映像,则必须将注册表格式设置为“docker”。

查看Quickstart for Docker 指南,其中指定了如何将 docker 镜像以及所需的权限拉取和推送到 Artifact Registry。

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2022-03-29
    • 2022-01-28
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2022-10-16
    相关资源
    最近更新 更多