如何从Google Cloud Composer的KubernetesPodOperator中的私有Docker注册表中提取图像?

问题描述

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

任务失败,我在Airflow UI的日志中以及存储分区的logs文件夹中收到以下错误消息。

[2020-09-21 08:39:12,675] {taskinstance.py:1147} ERROR - Pod Launching Failed: Pod returned a failure: Failed
Traceback (most recent call last)
  File "/usr/local/lib/airflow/airflow/contrib/operators/kubernetes_pod_operator.py",line 260,in execut
    'Pod returned a failure: {state}'.format(state=final_state
airflow.exceptions.AirflowException: Pod returned a failure: Failed

这不是很有信息... 知道我做错了什么吗? 还是在任何我能找到更多有用日志消息的地方?

非常感谢您!

解决方法

通常,在运行DAG失败后,如何开始对GCP Composer进行故障排除的方式在GCP文档的专用chapter中得到了很好的说明。

移至KubernetesPodOperator特定相关的问题,某些用户调查可能包括:

进一步分析错误上下文和KubernetesPodOperator.py源代码,我认为此问题可能是由于Airflow worker GKE节点上的Pod启动问题引起的,一旦未执行Pod执行,最终以Pod returned a failure: {state}'.format(state=final_state)消息结束成功。

就我个人而言,我更喜欢在Kubernetes Pod中执行Airflow任务之前检查运行的图像。如此说来,并根据提供的任务命令,我相信您可以验证Pod启动过程,connecting to GKE集群和重新起草kubernetes_pod_operator.KubernetesPodOperator定义可用于kubectl 命令行执行程序:

kubectl run test-app --image=eu.gcr.io/<Project_ID>/image --command -- "/bin/sh" "-c" "echo 0"

这将简化图像验证的过程,因此您也可以更仔细地查看Pod日志或事件记录:

kubectl describe po test-app

kubectl logs test-app

相关问答

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