Google Cloud Composer从Google Container Registry中提取过时的图像

问题描述

我正在尝试使用KubernetesPodoperator通过Google Cloud Composer在由私有Google Container Registry中的映像构建的环境中运行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')

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

这是一个错误吗?

非常感谢!

解决方法

documentation for KubernetesPodOperator中所述,image_pull_policy的默认值为'IfNotPresent'。您需要将Pod Spec配置为始终提取图像。

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

K8s Container Images documentation中提到的其他几种方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...