Airflow 3 에서 화면과 REST API 를 담당하는 컴포넌트 이름이 바뀌었다. 2.x 의 airflow webserver 명령과 airflow-webserver 서비스가 사라지고 airflow api-server 가 그 자리를 맡는다. 3.x 공식 compose 파일에서 airflow-webserver 를 찾을 수 없는 것은 이 때문이며, 웹 화면을 켜려고 따로 할 일은 없다.
| 2.x | 3.x |
|---|---|
airflow webserver |
airflow api-server |
서비스 airflow-webserver |
서비스 airflow-apiserver |
[webserver] 섹션의 일부 값 |
[api] 섹션으로 이동 |
| 워커가 메타데이터 DB 에 직접 접속 | 워커가 Task Execution API 를 통해 접근 |
3.x 는 태스크 실행 경로가 바뀌어, 워커가 메타데이터 데이터베이스에 직접 붙지 않고 api-server 를 거친다. 따라서 api-server 는 화면용이 아니라 실행 경로의 필수 구성 요소 다. 내리면 태스크가 돌지 않는다.
버전을 고정해 받는다. latest 를 쓰면 나중에 다른 결과가 나온다.
mkdir -p /opt/airflow && cd /opt/airflow
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/3.0.4/docker-compose.yaml'
mkdir -p dags logs plugins config
echo -e "AIRFLOW_UID=$(id -u)" > .env
AIRFLOW_UID 를 주지 않으면 컨테이너가 root 로 만든 파일이 호스트에 남아 권한 문제가 생긴다.
기동 순서는 초기화 후 나머지다.
docker compose up airflow-init
docker compose up -d
docker compose ps
화면은 http://localhost:8080 이다. 초기 계정은 _AIRFLOW_WWW_USER_USERNAME · _AIRFLOW_WWW_USER_PASSWORD 환경변수로 정해지며 기본값은 airflow / airflow 다. 시험 환경이라도 그대로 두지 않는다.
| 서비스 | 역할 |
|---|---|
postgres |
메타데이터 데이터베이스 |
redis |
Celery 브로커 |
airflow-apiserver |
웹 화면 · REST API · Task Execution API |
airflow-scheduler |
DAG 파싱과 태스크 스케줄 |
airflow-dag-processor |
DAG 파일 파싱 전담 |
airflow-worker |
Celery 워커 |
airflow-triggerer |
지연 가능(deferrable) 오퍼레이터 처리 |
airflow-init |
DB 마이그레이션과 초기 계정 생성 |
flower |
Celery 모니터링. 프로파일로 켠다 |
3.x 에서 DAG 파싱이 별도 dag-processor 로 분리됐다. 2.x compose 를 옮겨 쓰면 이 서비스가 빠져 DAG 이 인식되지 않으므로 반드시 포함한다.
environment:
AIRFLOW__CORE__EXECUTOR: CeleryExecutor
AIRFLOW__CORE__LOAD_EXAMPLES: 'false'
AIRFLOW__CORE__PARALLELISM: '32'
AIRFLOW__API__BASE_URL: 'http://airflow.example.com:8080'
AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'non-sensitive-only'
AIRFLOW__CORE__FERNET_KEY: '${FERNET_KEY}'
AIRFLOW__API__BASE_URL 은 외부에서 접근하는 주소로 맞춘다. 리버스 프록시 뒤에 두거나 다른 호스트에서 접속할 때 이 값이 틀리면 로그인 후 리디렉션이 엉킨다.
LOAD_EXAMPLES 는 시험이 끝나면 꺼 둔다. 예제 DAG 이 목록을 채우고 스케줄러 파싱 부하도 늘린다.
공식 compose 파일은 개발·시험용 이다. 파일 첫머리에도 그렇게 적혀 있다. 운영에는 Helm 차트나 관리형 서비스를 쓴다. 메타데이터 DB 가 컨테이너 안에 있고 볼륨이 로컬이라 가용성과 백업 요건을 만족하지 못한다.
메모리는 4 GB 이상 배정한다. 부족하면 스케줄러가 재기동을 반복한다.
업그레이드 시에는 DB 마이그레이션이 필요하다. 2.x 에서 3.x 로 올릴 때는 제거된 설정과 임포트 경로를 미리 점검한다.
docker compose run --rm airflow-cli airflow config list
docker compose run --rm airflow-cli airflow db check