Airflow- dag_id не удалось найти проблему при использовании исполнителя kubernetes
Я использую диаграмму стабильного воздушного потока и Kubernetes Executor, новый модуль планируется для dag, но его сбой с dag_id не может быть обнаружен. Я использую git-sync для получения дагов. Ниже приведены значения ошибки и конфигурации кубернетов. Может ли кто-нибудь помочь мне решить эту проблему?
Ошибка:
[2020-07-01 23:18:36,939] {__init__.py:51} INFO - Using executor LocalExecutor
[2020-07-01 23:18:36,940] {dagbag.py:396} INFO - Filling up the DagBag from /opt/airflow/dags/dags/etl/sampledag_dag.py
Traceback (most recent call last):
File "/home/airflow/.local/bin/airflow", line 37, in <module>
args.func(args)
File "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/cli.py", line 75, in wrapper
return f(*args, **kwargs)
File "/home/airflow/.local/lib/python3.6/site-packages/airflow/bin/cli.py", line 523, in run
dag = get_dag(args)
File "/home/airflow/.local/lib/python3.6/site-packages/airflow/bin/cli.py", line 149, in get_dag
'parse.'.format(args.dag_id))
airflow.exceptions.AirflowException: dag_id could not be found: sampledag . Either the dag did not exist or it failed to parse.
Конфиг:
AIRFLOW__KUBERNETES__DELETE_WORKER_PODS: false
AIRFLOW__KUBERNETES__GIT_REPO: git@git.com/dags.git
AIRFLOW__KUBERNETES__GIT_BRANCH: master
AIRFLOW__KUBERNETES__GIT_DAGS_FOLDER_MOUNT_POINT: /dags
AIRFLOW__KUBERNETES__GIT_SSH_KEY_SECRET_NAME: git-secret
AIRFLOW__KUBERNETES__WORKER_CONTAINER_REPOSITORY: airflow-repo
AIRFLOW__KUBERNETES__WORKER_CONTAINER_TAG: tag
AIRFLOW__KUBERNETES__RUN_AS_USER: "50000"
sampledag
import logging
import datetime
from airflow import models
from airflow.contrib.operators import kubernetes_pod_operator
import os
args = {
'owner': 'airflow'
}
YESTERDAY = datetime.datetime.now() - datetime.timedelta(days=1)
try:
print("Entered try block")
with models.DAG(
dag_id='sampledag',
schedule_interval=datetime.timedelta(days=1),
start_date=YESTERDAY) as dag:
print("Initialized dag")
kubernetes_min_pod = kubernetes_pod_operator.KubernetesPodOperator(
# The ID specified for the task.
task_id='trigger-task',
# Name of task you want to run, used to generate Pod ID.
name='trigger-name',
namespace='scheduler',
in_cluster = True,
cmds=["./docker-run.sh"],
is_delete_operator_pod=False,
image='imagerepo:latest',
image_pull_policy='Always',
dag=dag)
print("done")
except Exception as e:
print(str(e))
logging.error("Error at {}, error={}".format(__file__, str(e)))
raise
4 ответа
Я была такая же проблема. Я решил это, добавив в свою конфигурацию следующее:
AIRFLOW__KUBERNETES__DAGS_VOLUME_SUBPATH: repo/
Дело в том, что контейнер инициализации загрузит ваши даги в [AIRFLOW__KUBERNETES__GIT_DAGS_FOLDER_MOUNT_POINT]/[AIRFLOW__KUBERNETES__GIT_SYNC_DEST]
а также AIRFLOW__KUBERNETES__GIT_SYNC_DEST
по умолчанию repo
(https://airflow.apache.org/docs/stable/configurations-ref.html)
Получив ту же проблему, я решил ее с помощью предложения @gtrip установить UID пользователя запуска git-sync равным 65533.
Я бы добавил следующие подсказки по отладке:
- контейнер инициализации git-sync не возвращает ошибок, даже если он не может получить DAG
- Информация об отладке Kubernetes для контейнеров инициализации
kubectl get pods -n [NAMESPACE]
kubectl logs -n [NAMESPACE] [POD_ID] -c git-sync
Я столкнулся с той же проблемой при попытке использовать Kubernetes Executor со стабильной диаграммой воздушного потока руля. В моем случае я смог решить эту проблему, изменив
AIRFLOW__KUBERNETES__RUN_AS_USER: "50000"
к AIRFLOW__KUBERNETES__GIT_SYNC_RUN_AS_USER: "65533"
в env
раздел диаграммы управления.
То же значение указано в этой ссылке
Я пришел к такому выводу, так как контейнер инициализации (git sync), который работал до того, как появился временный рабочий модуль, не смог клонировать / синхронизировать git dags с рабочими модулями. В моем случае произошла ошибка разрешений (даже если секрет kube для ssh clone был передан правильно)
Заметка:
- контейнер инициализации git-sync не возвращает ошибок, даже если ему не удается получить DAG
- Информация об отладке Kubernetes для контейнеров инициализации
kubectl get pods -n [NAMESPACE]
kubectl logs -n [NAMESPACE] [POD_ID] -c git-sync
Я предполагаю, что проблема может возникнуть из-за разницы в вашей настройке, которая вызывает: /opt/airflow/dags/dags/etl/sampledag_dag.py
а также AIRFLOW__KUBERNETES__GIT_DAGS_FOLDER_MOUNT_POINT: /dags
Я бы дважды проверил, что это то, что вы хотите, и то, что вы ожидаете.