[Airflow] docker compose 로 git sync 적용하기

Woong·2025년 9월 18일
0

Apache Airflow

목록 보기
11/11

Docker Compose로 Airflow + git-sync 구성

  • git sync sidecar 컨테이너를 통해 주기적으로 동기화
    • dev/staging/production 환경 구분에도 활용
    • (k8s 환경의 helm chart 기반 설정은 별도 포스팅)

docker-compose 구성

  • Airflow는 AIRFLOW__CORE__DAGS_FOLDER 에서 DAG 스캔
x-airflow-common: &airflow-common
  image: <...>
  environment: &airflow-common-env
    # git sync 로 동기화되는 DAG 경로
    AIRFLOW__CORE__DAGS_FOLDER: /opt/airflow/dags/git-sync/current/airflow/dags
    # ...
  volumes:
    # named volume 설정하여 중복 방지
    - airflow-dags-volume:/opt/airflow/dags
  user: "50000:0"

services:
  git-sync:
    image: registry.k8s.io/git-sync/git-sync:v4.3.0
    user: "50000:0"
    restart: always
    env_file:
      - .env
    environment:
      GITSYNC_REPO: ${GITSYNC_REPO}
      GITSYNC_USERNAME: ${GITSYNC_USERNAME}
      GITSYNC_PASSWORD: ${GITSYNC_PASSWORD}
      GITSYNC_REF: ${GITSYNC_REF:-next}
      GITSYNC_PERIOD: ${GITSYNC_PERIOD:-30s}
      GITSYNC_DEPTH: ${GITSYNC_DEPTH:-1}
      GITSYNC_ROOT: /dags/git-sync
      GITSYNC_DEST: repo
      GITSYNC_LINK: current
      GITSYNC_ONE_TIME: "false"
      GITSYNC_ADD_USER: "true"
      GITSYNC_STALE_WORKTREE_TIMEOUT: ${GITSYNC_STALE_WORKTREE_TIMEOUT:-24h}
    volumes:
      - airflow-dags-volume:/dags
    healthcheck:
      # current + DAG 디렉토리 점검
      test: ["CMD-SHELL", "test -L /dags/git-sync/current && test -d /dags/git-sync/current/airflow/dags && [ \"$(ls -A /dags/git-sync/current/airflow/dags 2>/dev/null)\" ]"]
      interval: 10s
      timeout: 3s
      retries: 10
      start_period: 10s

  airflow-webserver:
    <<: *airflow-common
    depends_on:
      git-sync: { condition: service_healthy }
    # ...

  airflow-scheduler:
    <<: *airflow-common
    depends_on:
      git-sync: { condition: service_healthy }
    # ...

volumes:
  airflow-dags-volume:

git sync variables

  • GITSYNC_ROOT: git-sync root 디렉토리
    • git clone, revision
    • ex. /dags/git-sync
  • GITSYNC_DEST: GITSYNC_ROOT 하위의 repo 디렉토리명
  • GITSYNC_LINK: symlink 이름
    • ex) current
    • -> GITSYNC_ROOT + GITSYNC_DEST + GITSYNC_LINK 가 컨테이너 내 최신 dag 경로
      • airflow 에서 AIRFLOW__CORE__DAGS_FOLDER 를 위 경로로 설정
  • GITSYNC_DEPTH: shallow clone 깊이
  • GITSYNC_REF: git repo 에 대한 reference 지정
    • git ref. branch, tag, commit hash 등
    • branch, tag 를 통해 staging, production 환경 구분
  • GITSYNC_PERIOD: 동기화 주기 ex. 30s
  • GITSYNC_STALE_WORKTREE_TIMEOUT: stale worktree (prev revision) 보존하는 timeout
  • 위 동기화 주기마다 timeout 체크 후 제거
  • GITSYNC_ONE_TIME: 한번만 동기화할 것인지
    • 주기적으로 동기화할거니 false 설정

0개의 댓글