5

所以,我在 EKS 上设置 Airflow。
除了我无法使用 KubernetesExecutor 之外,一切似乎都已准备就绪。每次我尝试使用它时,我都会收到此错误:

使用 open(TEST_CONFIG_FILE, 'w') as f: PermissionError: [Errno 13] Permission denied: '/usr/local/airflow/unittests.cfg'

我试过进入豆荚和chmod文件chown。我在 docker 映像中尝试了相同的操作,还尝试创建unitttests.cfg文件,并将其从本地复制到映像。它们都返回相同的错误。

Docker镜像:

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)

正如你所看到的,dag 实际上只是一个测试,但我已经在这里停留了一段时间。

4

4 回答 4

1

我有一个类似的问题。我的 AIRFLOW_HOME 环境变量指向错误的目录,并通过将环境变量设置AIRFLOW_HOME为正确的目录来修复它。

我认为 OP 的问题就是这种情况,因为 docker image sets ENV AIRFLOW_HOME="/var/lib/airflow",但是权限被拒绝消息意味着 AIRFLOW_HOME 设置为"/usr/local/airflow/".

不知何故,在执行气流时,它正在加载不同的 AIRFLOW_HOME 变量。

于 2021-04-16T20:11:50.957 回答
1

可能是因为没有unittests.cfg.

尝试添加:( RUN airflow initdb此命令将创建它)

于 2020-11-28T20:01:55.150 回答
1

您可以尝试扩展气流图像https://airflow.apache.org/docs/apache-airflow/1.10.13/production-deployment.html#extending-the-image而不是在 python 图像上安装气流。

另一个tips——官方airflow helm chart https://airflow.apache.org/docs/helm-chart/stable/index.html已经发布,你可以将它用于Kubernetes executor。

于 2021-07-06T18:52:46.667 回答
0

我最近也被这个问题困住了。希望这会有所帮助。您的 kubernetes 设置(pod_template_file)中需要相同的运行用户

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

确保它是用户 ID 而不是用户名。例如,值 50000 有效,但值 'airflow' 可能无效。

在你的情况下,你运行了这个

运行 chown -R 气流 ${AIRFLOW_USER_HOME}

因此,您需要弄清楚这个用户名“airflow”的用户 ID 是什么,并将其放入 pod 模板文件中,就像我在上面在 AIRFLOW__KUBERNETES__RUN_AS_USER 环境变量中指定的一样。

于 2021-08-01T12:15:08.193 回答