Python 气流+;Kubernetes工作数据库连接
我已经设法在Kubernetes(Web服务器和调度器)中设置了一个Airflow部署,配置了Kubernetes Executor和带有Airflow元数据的Postgres模式 我试图使Python 气流+;Kubernetes工作数据库连接,python,postgresql,kubernetes,airflow,Python,Postgresql,Kubernetes,Airflow,我已经设法在Kubernetes(Web服务器和调度器)中设置了一个Airflow部署,配置了Kubernetes Executor和带有Airflow元数据的Postgres模式 我试图使example\u bash\u操作符DAG正常工作,但由于以下SQLAlchemy异常,worker pod一直失败: 2021-01-07 10:29:33091]{cli_action_loggers.py:105}警告-失败 要使用(sqlite3.OperationalError)记录操作,则不需要
example\u bash\u操作符
DAG正常工作,但由于以下SQLAlchemy异常,worker pod一直失败:
2021-01-07 10:29:33091]{cli_action_loggers.py:105}警告-失败
要使用(sqlite3.OperationalError)记录操作,则不需要这样的表:log[SQL:
插入日志(dttm、dag\u id、任务id、事件、执行日期、所有者、,
额外)值(?,,,,,,,,,?)][参数:('2021-01-07
10:29:33.082018“,”示例\u bash\u运算符“,”运行方式\u 0“,”cli\u任务\u运行“,
‘2021-01-07 09:11:29.947161’、‘气流’、‘主机名’:
“示例BashOperatorRemel0-495d985192ab4269a3dce023851a34b7”,
“完整命令”:“['/usr/local/bin/aiffort”,“tasks”,“run”,
'examp…(70个字符截断).'-本地','-池',
'默认_池','--subdir',
“/usr/local/lib/python3.8/site packages/afflow/example_dags/example_bash_operator.py']“}”)]
(此错误的背景信息位于:)
[2021-01-07 10:29:33097]{dagbag.py:440}信息-填充dagbag
从…起
/usr/local/lib/python3.8/site-packages/afflow/example\u dags/example\u bash\u operator.py
[2021-01-07 10:29:33197]{dagbag.py:297}错误-导入失败:
/usr/local/lib/python3.8/site-packages/afflow/example_dags/example_subdag_operator.py
回溯(最近一次调用上次):文件
“/usr/local/lib/python3.8/site packages/sqlalchemy/engine/base.py”,
第1276行,在_execute_上下文中
self.dial.do_execute(文件“/usr/local/lib/python3.8/site packages/sqlalchemy/engine/default.py”,
第609行,在do_execute中
cursor.execute(语句、参数)sqlite3.OperationalError:没有这样的表:slot\u pool
据我所知,worker pod正在尝试从sqlite db获取元数据,但数据库中没有这些表。我已经有一个元数据数据库,我希望worker使用我设置为默认的Postgres元数据数据库
工作容器映像如下所示:
FROM python:3.8.7-slim
ARG AIRFLOW_USER_HOME=/var/lib/airflow
ARG AIRFLOW_USER="airflow"
ARG AIRFLOW_UID="1000"
ARG AIRFLOW_GID="100"
ENV AIRFLOW_HOME=$AIRFLOW_USER_HOME
ENV AIRFLOW__CORE__SQL_ALCHEMY_CONN="postgresql://user:pass@databaseip:5432/airflow_metadata"
RUN mkdir $AIRFLOW_USER_HOME && \
useradd -ms /bin/bash -u $AIRFLOW_UID airflow && \
chown $AIRFLOW_USER:$AIRFLOW_GID $AIRFLOW_USER_HOME && \
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 --no-cache-dir 'apache-airflow[crypto,kubernetes,postgres]' && \
apt-get purge --auto-remove -yqq $buildDeps && \
apt-get autoremove -yqq --purge && \
rm -rf /var/lib/apt/lists/*
USER $AIRFLOW_UID
WORKDIR $AIRFLOW_USER_HOME
很明显,我在气流管理工人的过程中遗漏了一些非常明显的东西。
有谁能向我解释一下Airflow是如何管理的吗?我终于设法让worker pod在Kubernetes上完成了运行。事实上,如果您有一个元数据数据库,并且出现sqlite3错误,那么您的worker pod可能没有数据库环境变量(
Airflow\uuuuCore\uuuuSQL\uAlchemy\uConn
)正确设置。在我的情况下,配置是正确的,但Docker标记系统出错,并且没有正确同步我对worker dockerfile所做的更改。我最终使用新标记重建了映像,并将其推送到我的专用容器注册表。然后,我编辑了气流部署,明确告知抓取新标记的版本n最后它成功了:
-名称:气流\uuuu KUBERNETES\uu工人\uu容器\uu存储库
值:“我的容器注册表/airflow-k8s/airflow worker”
-名称:气流\u KUBERNETES\u工人\u容器\u标签
值:“0.1”
我终于设法让worker pod在Kubernetes上完成了它们的运行。事实上,如果您有一个元数据数据库,并且出现sqlite3错误,那么您的worker pod可能没有数据库环境变量(AIRFLOW\uu CORE\uSQL\u ALCHEMY\u CONN
)正确设置。在我的情况下,配置是正确的,但Docker标记系统出错,并且没有正确同步我对worker dockerfile所做的更改。我最终使用新标记重建了映像,并将其推送到我的专用容器注册表。然后,我编辑了气流部署,明确告知抓取新标记的版本n最后它成功了:
-名称:气流\uuuu KUBERNETES\uu工人\uu容器\uu存储库
值:“我的容器注册表/airflow-k8s/airflow worker”
-名称:气流\u KUBERNETES\u工人\u容器\u标签
值:“0.1”