问题描述
我正在尝试通过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特定相关的问题,某些用户调查可能包括:
- 验证对应的DAG的特定task status 文件;
- 检查任务清单logs and events;,还可以在GCP Composer的storage bucket中找到日志;
- 任何与K8s相关的resource/objects错误都强烈 需要检查Composer的相关GKE cluster日志/事件 日记。
进一步分析错误上下文和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