首页 > 解决方案 > Google Cloud Composer 从 Google Container Registry 中提取过时的镜像

问题描述

我正在尝试通过 Google Cloud Composer 和 KubernetesPodOperator 在从私有 Google 容器注册表中的图像构建的环境中运行 Airflow 任务。Container Registry 和 Cloud Composer 实例位于同一个项目下,一切正常,直到我也更新了 DAG 引用的映像。

当我更新 Container Registry 中的映像时,Cloud Composer 继续使用陈旧的映像。

具体来说,在下面的代码中

import datetime
import airflow
from airflow.contrib.operators import kubernetes_pod_operator


YESTERDAY = datetime.datetime.now() - datetime.timedelta(days=1)


# Create Airflow DAG the the pipeline
with airflow.DAG(
        'my_dag',
        schedule_interval=datetime.timedelta(days=1),
        start_date=YESTERDAY) as dag:

    my_task = kubernetes_pod_operator.KubernetesPodOperator(
        task_id='my_task',
        name='my_task',
        cmds=['echo 0'],
        namespace='default',
        image=f'gcr.io/<my_private_repository>/<my_image>:latest')

如果我更新gcr.io/<my_private_repository>/<my_image>:latestContainer Registry 中的映像,Cloud Composer 会继续使用 Container Registry 中不再存在的陈旧映像并引发错误。

这是一个错误吗?

非常感谢!

标签: kubernetesairflowgoogle-cloud-composer

解决方案


文档中KubernetesPodOperatorimage_pull_policy所述,默认值为'IfNotPresent'。您需要将 Pod Spec 配置为始终拉取镜像。

最简单的方法是将其设置image_pull_policy'Always'.

K8s Container Images 文档中提到的其他方法很少。


推荐阅读