我在 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
如何逐步解決這個問題?
uj5u.com熱心網友回復:
從共享的錯誤中,我可以看出該影像不是從 Artifact Registry 中提取的,失敗的原因是因為默認情況下,GKE 直接從 Docker Hub 中提取它,除非另有說明。由于那里沒有 collect_data 影像,因此出現錯誤。
指定存盤在 Artifact Registry 中的影像的正確方法如下:
image: <location>-docker.pkg.dev/<project>/<repo-name>/<image-name:tag>
請注意,如果您使用的是 docker-containerized 映像,則必須將注冊表格式設定為“docker”。
查看Docker 快速入門指南,其中指定了如何將 docker 鏡像以及所需的權限拉取和推送到 Artifact Registry。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/411637.html
標籤:
