kubernetes - 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>:latest
Container Registry 中的映像,Cloud Composer 会继续使用 Container Registry 中不再存在的陈旧映像并引发错误。
这是一个错误吗?
非常感谢!
解决方案
如文档中KubernetesPodOperator
image_pull_policy
所述,默认值为'IfNotPresent'
。您需要将 Pod Spec 配置为始终拉取镜像。
最简单的方法是将其设置image_pull_policy
为'Always'
.
K8s Container Images 文档中提到的其他方法很少。
推荐阅读
- python - 如何在 Python 中更快地找到大矩阵的点积(但结果会是中等大小)?
- haskell - 将代码从 Haskell 转换为 SML 时遇到问题
- javascript - 如何将 div 动态居中到我的页面所在的位置,并在 div 显示时使页面“禁用”?
- google-bigquery - 为从 Firebase Analytics 流入 Big Query 的数据启用带有 event_name 列的集群
- mysql - SQL SELECT INTO OUTFILE 未按预期工作
- apache-kafka - 为什么我的 kafka tmp 文件夹的大小与磁盘大小几乎相同?
- windows - 无法从 Windows 中的 .sh 文件运行烧瓶
- jsf - 从 JSF 操作方法返回无效视图会在 facelet 中显示警告,但我怎样才能更早地检测到它?
- statistics - 选择哪种统计方法?
- ios - 从设备所有者那里获取联系人