【问题标题】:Airflow KubePodOperator pull image from private repositoryAirflow KubePodOperator 从私有仓库拉取镜像
【发布时间】:2019-10-14 17:42:21
【问题描述】:

Apache Airflow 的KubernetesPodOperator 如何从私有存储库中拉取 docker 镜像?

KubernetesPodOperator 有一个image_pull_secrets,您可以将Secrets 对象传递给私有存储库进行身份验证。但是 secrets 对象只能表示一个环境变量或一个卷——这两者都不符合我对 Kubernetes 如何使用 secret 对私有 repos 进行身份验证的理解。

使用kubectl,您可以创建所需的秘密,例如

$ kubectl create secret docker-registry $SECRET_NAME \
              --docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
              --docker-username=AWS \
              --docker-password="${TOKEN}" \
              --docker-email="${EMAIL}"

但是如何在 Airflow 中创建身份验证密钥?

【问题讨论】:

  • 您的意思是image_pull_secrets= 明确记录在精美手册中?
  • 顺便说一句,docker-server 不是 https:// 合格的,因为这是暗示的;因此,如果您在 create secret 命令中确实使用这些字符,那也是它不起作用的一个很好的理由
  • @danodonovan 你用的是什么平台?您使用的是哪些版本的 kubernetes 和 Airflow?
  • 感谢@PiotrMalec - 它是 Google Cloud Composer,所以 Airflow 10.2 和 K8 1.13.7-gke.24 FWIW 我意识到 image_pull_secrets 指的是 Kubernetes 机密,而不是 Airflow 机密(其中我认为解决了这个问题)但我仍然无法开始工作。进一步调试后,Google Composer 教程 K8 脚本也不起作用,所以我感觉问题不至于此!

标签: kubernetes airflow


【解决方案1】:

根据kubernetes的documentation,有docker-registry类型的secret对象,可用于对私有存储库进行身份验证。

正如您在问题中提到的那样;您可以使用kubectl 创建 docker-registry type 的秘密,然后您可以尝试使用image_pull_secrets 传递。

但是,根据kubernetes documentation,您使用的可能有限完全没有用处

配置节点以向私有注册表进行身份验证

注意:如果您在 Google Kubernetes Engine 上运行,则每个节点上都会有一个 .dockercfg,其中包含 Google Container Registry 的凭据。您不能使用这种方法。

注意:如果您在 AWS EC2 上运行并使用 EC2 容器注册表 (ECR),每个节点上的 kubelet 将管理和更新 ECR 登录凭证。您不能使用这种方法。

注意:如果您可以控制节点配置,则此方法适用。它无法在 GCE 和任何其他自动更换节点的云提供商上可靠运行。

注意: Kubernetes 目前仅支持 docker config 的 authsHttpHeaders 部分。这意味着不支持凭证助手(credHelperscredsStore)。

在上述平台上进行这项工作是可能的,但需要自动化脚本和第三方工具。

就像在 Amazon ECR 示例中一样:Amazon ECR Docker Credential Helper 需要定期将 AWS 凭证拉取到 docker 注册表配置,然后使用另一个脚本来更新 kubernetes docker-registry 机密。

至于 Airflow 本身,我认为它没有创建自己的 docker-repository 机密的功能。 您可以在Apache Airflow JIRA 中请求类似的功能。

附言

如果您的 K8s 集群仍然存在问题,您可能需要在堆栈上创建新问题来解决这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 2018-01-15
    • 2020-04-27
    • 1970-01-01
    • 2018-06-16
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多