问题描述
我正在尝试使用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中提到的其他几种方法。