【发布时间】:2021-11-26 08:54:46
【问题描述】:
正如标题所说,我想使用 Docker swarm 设置将在集群(1 个主节点,2 个节点)上运行的 Airflow。
当前设置:
现在我有使用在单个 EC2 上运行的 CeleryExecutor 的 Airflow 设置。
我有一个提取 Airflow 图像和pip install -r requirements.txt 的 Dockerfile。
从这个 Dockerfile 我正在创建一个本地图像,这个图像在 docker-compose.yml 中使用,它启动了 Airflow 需要的不同服务(webserver、scheduler、redis、flower 和一些 worker。metadb 是 Postgres,它在一个单独的RDS)。
docker-compose 用于 docker swarm 模式,即。 docker stack deploy . airflow_stack
所需设置:
我想将当前设置扩展到 3 个 EC2(1 个主节点,2 个节点),主节点将运行 Web 服务器、调度、redis 和花,而工作节点将在节点中运行。 在搜索和网络和文档之后,有几件事我仍然不清楚,我很想知道
- 据我了解,为了让节点运行工作程序,我从 Dockerfile 构建的本地映像需要推送到某个存储库(如果确实需要,我会使用 AWS ECR)气流工作人员能够从该图像创建容器。对吗?
- 正在同步卷和环境文件,现在,我正在安装卷并将环境插入到 docker-compose 文件中。这些挂载和环境是否会同步到节点(和气流工作容器)?如果没有,如何确保一切都是同步的,因为气流要求所有组件(除了 redis)都具有所有依赖项等。
- 使用 CeleryExecuter 时需要设置的环境之一是 broker_url,我如何确保节点识别主服务器上的 redis 代理
我确信还有一些我忘记的东西,但我写的是一个好的开始。 任何帮助或建议将不胜感激
谢谢!
Dockerfile:
FROM apache/airflow:2.1.3-python3.9
USER root
RUN apt update;
RUN apt -y install build-essential;
USER airflow
COPY requirements.txt requirements.txt
COPY requirements.airflow.txt requirements.airflow.txt
RUN pip install --upgrade pip;
RUN pip install --upgrade wheel;
RUN pip install -r requirements.airflow.txt
RUN pip install -r requirements.txt
EXPOSE 8793 8786 8787
docker-compose.yml:
version: '3.8'
x-airflow-celery: &airflow-celery
image: local_image:latest
volumes:
-some_volume
env_file:
-some_env_file
services:
webserver:
<<: *airflow-celery
command: airflow webserver
restart: always
ports:
- 80:8080
healthcheck:
test: [ "CMD-SHELL", "[ -f /opt/airflow/airflow-webserver.pid ]" ]
interval: 10s
timeout: 30s
retries: 3
scheduler:
<<: *airflow-celery
command: airflow scheduler
restart: always
deploy:
replicas: 2
redis:
image: redis:6.0
command: redis-server --include /redis.conf
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 30s
timeout: 10s
retries: 5
ports:
- 6379:6379
environment:
- REDIS_PORT=6379
worker:
<<: *airflow-celery
command: airflow celery worker
deploy:
replicas: 16
flower:
<<: *airflow-celery
command: airflow celery flower
ports:
- 5555:5555
【问题讨论】:
标签: docker-compose celery airflow docker-swarm