Python 气流+;Kubernetes工作数据库连接

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)记录操作,则不需要

我已经设法在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)记录操作,则不需要这样的表: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”