首页 > 解决方案 > Google Cloud Composer KubernetesPodOperator InvalidImage 错误

问题描述

我正在尝试使用 Cloud Composer 中的 KubernetesPodOperator 从私有 GCR 运行 docker 映像,但出现以下错误:

ERROR: Pod launching failed : Pod took too long to start

到目前为止,我已经尝试了以下方法:

  1. 起初我尝试增加“startup_timeout_seconds”,但没有帮助。

  2. 查看 Composer 创建的 GKE 集群日志给了我以下错误:

    无法应用默认图像标签“docker pull us.gcr.io/my-proj-name/myimage-name:latest”:无法解析图像引用“docker pull us.gcr.io/my-proj-name/myimage -name:latest":无效的参考格式:InvalidImageName

我尝试从我的私人 GCR 中提取本地计算机上的相同 docker 映像,它工作正常,不确定问题出在哪里。

  1. 这个链接https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod告诉我

    “集群中的所有 pod 都可以读取此注册表中的图像。kubelet 将使用实例的 Google 服务帐户向 GCR 进行身份验证。实例上的服务帐户将具有https://www.googleapis.com/auth/ devstorage.read_only,因此它可以从项目的 GCR 中提取,但不能推送”

    这意味着 pod 应该能够从 GCR 中提取图像。仅供参考,我正在使用服务帐户来配置我的作曲家环境,并且它具有从 GCS 存储桶读取的足够权限。

    另外,我执行了以下步骤来添加 secret :

    gcloud container clusters get-credentials <cluster_name>

    kubectl create secret generic gc-storage-rw-key --from-file=key.json=<path_to_serv_accnt_key>

    secret_file = secret.Secret(
        deploy_type='volume',
        deploy_target='/tmp/secrets/google',
        secret='gc-storage-rw-key',
        key='<path of serv acct key file>.json')
    

    在 DAG 中的 KubernetesPodOperator 运算符中将其称为 secrets=[secret_file]

  2. 我也在我的 DAG 中添加了 image_pull_policy='Always' 但没有工作......

  3. 供参考:我的 CircleCI config.yml 包含以下内容

- run: echo ${GOOGLE_AUTH} > ${HOME}/gcp-key.json
- run: docker build --rm=false -t us.gcr.io/${GCP_PROJECT}/${IMAGE_NAME}:latest .
- run: gcloud auth activate-service-account --key-file ${HOME}/gcp-key.json
- run: gcloud --quiet config set project ${GCP_PROJECT}
- run: gcloud docker -- push us.gcr.io/${GCP_PROJECT}/${IMAGE_NAME}:latest

有人可以指导我吗?

标签: dockerkubernetesgoogle-kubernetes-enginekubernetes-podgoogle-cloud-composer

解决方案


推荐阅读