Проблемы с разрешением Airflow Unittest.cfg?

#python #airflow #amazon-eks #kubernetesexecutor

#python #воздушный поток #amazon-eks #kubernetesexecutor

Вопрос:

Итак, я настраиваю Airflow на EKS.
Кажется, все на месте, за исключением того, что я не могу использовать KubernetesExecutor. Каждый раз, когда я пытаюсь его использовать, я получаю эту ошибку:

с открытым (TEST_CONFIG_FILE, ‘w’) как f: PermissionError: [Ошибка 13] Отказано в разрешении: ‘/usr/local/airflow/unittests.cfg’

Я попытался зайти в модули chmod и chown файл. Я попробовал то же самое в образе docker, а также попытался создать 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 amp;amp; 
  useradd -ms /bin/bash -d ${AIRFLOW_USER_HOME} airflow amp;amp; 
  buildDeps='freetds-dev libkrb5-dev libsasl2-dev libssl-dev libffi-dev libpq-dev' 
  apt-get update amp;amp; 
  apt-get install -yqq --no-install-recommends $buildDeps build-essential default-libmysqlclient-dev amp;amp; 
  pip install psycopg2-binary 
  pip install --no-cache-dir 'apache-airflow[crypto,kubernetes,postgres,mysql]' amp;amp; 
  apt-get purge --auto-remove -yqq $buildDeps amp;amp; 
  apt-get autoremove -yqq --purge amp;amp; 
  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)
  

Как вы можете видеть, dag буквально просто тестовый, но я застрял здесь на некоторое время.

Комментарии:

1. У меня аналогичная проблема, но в моем разрешении отказано в папке logs. Есть быстрое исправление (не рекомендуется в качестве постоянного решения): запустите USER root вместо USER airflow.

Ответ №1:

Вероятно, это вызвано отсутствием unittests.cfg .

Попробуйте добавить: RUN airflow initdb (эта команда создаст его)

Ответ №2:

У меня была похожая проблема. Моя переменная AIRFLOW_HOME env указывала на неправильный каталог и исправила это, установив AIRFLOW_HOME переменную env в правильный каталог.

Я думаю, что это относится к вопросу OP, поскольку изображение docker устанавливается ENV AIRFLOW_HOME="/var/lib/airflow" , и все же сообщение об отказе в разрешении подразумевает, что для AIRFLOW_HOME установлено значение "/usr/local/airflow/" .

Каким-то образом при выполнении airflow загружается другая переменная AIRFLOW_HOME.

Ответ №3:

Вы можете попробовать расширить изображение воздушного потока https://airflow.apache.org/docs/apache-airflow/1.10.13/production-deployment.html#extending-the-image вместо установки airflow на образ python.

Еще один совет — официальная диаграмма управления воздушным потоком https://airflow.apache.org/docs/helm-chart/stable/index.html если он опубликован, вы можете использовать его для исполнителя Kubernetes.

Ответ №4:

Я застрял в этой проблеме слишком недавно. Надеюсь, это поможет. Вам нужен тот же пользователь запуска в настройках kubernetes (pod_template_file)

 spec:
  containers:
    - args: []
      command: []
      env:
        - name: AIRFLOW__KUBERNETES__RUN_AS_USER
          value: 10000 # Or your user ID.
  

Убедитесь, что это идентификатор пользователя, а не имя пользователя. Например, значение 50000 работает, но значение «воздушный поток» может не работать.

В вашем случае вы выполнили это

ЗАПУСТИТЕ chown -R воздушный поток ${AIRFLOW_USER_HOME}

Итак, вам нужно выяснить, каков идентификатор пользователя для этого имени пользователя «airflow», и поместить его в файл шаблона pod, как я указал выше в __KUBERNETES__RUN_AS_USER переменная среды.