背景
我目前正在使用 Helm(使用此图表)部署Apache Airflow 。我正在使用git-sync sidecar挂载 SQL 和 Python 文件,Airflow 需要访问这些文件才能执行脚本/文件。
什么似乎不起作用
一旦我完成了容器的部署,我的 Airflow 用户似乎无法使用文件(已由 git sidecar 挂载),并退出并出现错误(此错误发生在所有已挂载的文件上) ):
[Errno 13] Permission denied: 'target'
我试过的
我用于部署的 docker 容器如下所示:
FROM apache/airflow:1.10.14-python3.8
USER root
# apt deps
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
nano \
gcc \
python3-dev \
&& apt-get autoremove -yqq --purge \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Use airflow user for pip installs and other things.
USER airflow
# Additional requirements for Airflow
COPY requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt
# Creating folder for logs
RUN mkdir -p /opt/airflow/dbt_logs
RUN pip install dbt==0.18.1
EXPOSE 8081
在调度程序容器中运行ls -ld */
(in /opt/airflow
)我得到:
airflow@airflow-scheduler-58c7cb87b8-8nk6f:/opt/airflow$ ls -ld */
drwxrwsrwx 5 1000 1000 41 Dec 26 16:02 dags/
drwxr-xr-x 2 airflow airflow 6 Dec 26 14:10 dbt_logs/
drwxrwxr-x 1 airflow root 52 Dec 26 16:02 logs/
并在Web 服务器容器中运行ls -ld */
(in /opt/airflow
)我得到:
airflow@airflow-web-7f8df9457-7n2dp:/opt/airflow$ ls -ld */
drwxrwsrwx 5 root nogroup 41 Dec 26 14:20 dags/
drwxr-xr-x 1 airflow airflow 21 Dec 26 14:41 dbt_logs/
drwxrwxr-x 1 airflow root 23 Dec 26 14:20 logs/
这是 dbt 文件夹的结构在我的 dags 目录中的样子:
airflow@airflow-scheduler-6cdc985b9b-ssmhx:/opt/airflow/dags/dbt/dw$ ls -l
total 16
-rw-r--r-- 1 root 1000 3061 Dec 27 09:00 README.md
drwxr-sr-x 2 root 1000 22 Dec 27 09:00 analysis
drwxr-sr-x 2 root 1000 22 Dec 27 09:00 data
-rw-r--r-- 1 root 1000 1852 Dec 27 09:00 dbt_project.yml
drwxr-sr-x 2 root 1000 214 Dec 27 09:00 macros
drwxr-sr-x 3 root 1000 21 Dec 27 09:00 models
-rw-r--r-- 1 root 1000 141 Dec 27 09:00 packages.yml
-rw-r--r-- 1 root 1000 842 Dec 27 09:00 profiles.yml
drwxr-sr-x 2 root 1000 22 Dec 27 09:00 snapshots
drwxr-sr-x 2 root 1000 22 Dec 27 09:00 tests
值得一提的是,我似乎无法使用气流用户在 dbt 目录中创建文件(权限被拒绝)
在我看来,一旦安装了卷,它的所有者就会成为 root 用户。如何为 Airflow 用户提供访问已挂载的 git 存储库的能力?
如果需要,很乐意提供更多详细信息