Проблемы с разрешением Airflow Unittest.cfg?
Итак, настраиваю Airflow на EKS. Кажется, все на месте, за исключением того, что я не могу использовать KubernetesExecutor. Каждый раз, когда я пытаюсь его использовать, я получаю такую ошибку:
with open(TEST_CONFIG_FILE, 'w') as f:
PermissionError: [Errno 13] Permission denied: '/usr/local/airflow/unittests.cfg'
Я пробовал: зайти в pods и chmod и перекусить файл. Я попробовал то же самое в образе докера, а также попытался создать файл unitttests.cfg и скопировать его с моего локального компьютера в образ. Все они возвращают одну и ту же ошибку.
Dockerimage:
FROM python:3.7.6-slim
ARG AIRFLOW_USER_HOME=/var/lib/airflow
ENV AIRFLOW_HOME=$AIRFLOW_USER_HOME
# Define en_US.
ENV LANGUAGE en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LC_CTYPE en_US.UTF-8
ENV LC_MESSAGES en_US.UTF-8
RUN mkdir $AIRFLOW_USER_HOME && \
useradd -ms /bin/bash -d ${AIRFLOW_USER_HOME} airflow && \
buildDeps='freetds-dev libkrb5-dev libsasl2-dev libssl-dev libffi-dev libpq-dev' \
apt-get update && \
apt-get install -yqq --no-install-recommends $buildDeps build-essential default-libmysqlclient-dev && \
pip install psycopg2-binary \
pip install --no-cache-dir 'apache-airflow[crypto,kubernetes,postgres,mysql]' && \
apt-get purge --auto-remove -yqq $buildDeps && \
apt-get autoremove -yqq --purge && \
rm -rf /var/lib/apt/lists/*
COPY ./dags ${AIRFLOW_USER_HOME}/dags
COPY ./config/unittests.cfg ${AIRFLOW_USER_HOME}/unittests.cfg
RUN adduser airflow sudo
RUN chgrp -R airflow ${AIRFLOW_USER_HOME}
RUN chown -R airflow ${AIRFLOW_USER_HOME}
USER airflow
WORKDIR $AIRFLOW_USER_HOME
Даги
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime
default_args = {
"start_date": datetime(2020, 9, 24),
"email_on_failure": False,
"email_on_retry": False,
"retries": 0,
'run_as_user': 1000
}
dag = DAG("test_bash_dag", default_args=default_args, schedule_interval=None, catchup=False)
t1 = BashOperator(task_id="foo", bash_command="echo foo", xcom_push=True, dag=dag)
t2 = BashOperator(task_id="bar", bash_command="echo bar", dag=dag)
t2.set_upstream(t1)
Как видите, даг в буквальном смысле всего лишь тестовый, но вот уже какое-то время здесь застрял.
4 ответа
У меня была аналогичная проблема. Моя переменная env AIRFLOW_HOME указывала на неправильный каталог и исправила это, установив
Я думаю, что это относится к вопросу OP, поскольку образ докера устанавливает
Каким-то образом при выполнении воздушного потока загружается другая переменная AIRFLOW_HOME.
Возможно, это связано с отсутствием
unittests.cfg
.
Попробуй добавить:RUN airflow initdb
(эта команда создаст его)
Вы можете попробовать расширить изображение воздушного потока https://airflow.apache.org/docs/apache-airflow/1.10.13/production-deployment.html#exnding-the-image вместо установки воздушного потока на изображение Python.
Еще один совет - опубликована официальная диаграмма управления воздушным потоком https://airflow.apache.org/docs/helm-chart/stable/index.html , вы можете использовать ее для исполнителя Kubernetes.
Я слишком недавно застрял в этой проблеме. Надеюсь, это поможет. Вам нужен тот же пользователь запуска в настройках kubernetes (pod_template_file)
spec:
containers:
- args: []
command: []
env:
- name: AIRFLOW__KUBERNETES__RUN_AS_USER
value: 10000 # Or your user ID.
Убедитесь, что это идентификатор пользователя, а не имя пользователя. Например, значение 50000 работает, но значение «воздушный поток» может не работать.
В вашем случае вы запустили это
RUN chown -R воздушный поток $ {AIRFLOW_USER_HOME}
Итак, вам нужно выяснить, какой идентификатор пользователя для этого имени пользователя 'airflow', и поместить его в файл шаблона модуля, как я указал выше в переменной среды AIRFLOW__KUBERNETES__RUN_AS_USER.