💡 Git-sync는 무엇인가?
kubernetes에서 Airflow를 구성할 때 사이드카 컨테이너로 동작하면서 외부 repository의 dag의 코드를 Airflow 컨테이너에 sync해주는 역할을 합니다. 이를 통해 git repo의 특정 브랜치를 공통개발환경의 SOT(Source of Truth)로 활용 할 수 있습니다.
Docker Compose Airflow 에서 설정
기본적으로 git-sync는 쿠버네티스 Airflow에 사이드카패턴으로 사용되기 때문에, docker compose 환경에서 사용하는 방법을 찾기가 제한적이다. 아래 이미지를 활용해서 간단하게 구성이 가능한데, 공식적으로 제공되거나 많이 사용 되는 이미지는 아니기 때문에 주의가 필요하다.
https://github.com/data-burst/airflow-git-sync
GitHub - data-burst/airflow-git-sync: Sync DAG changes from Git to Airflow
Sync DAG changes from Git to Airflow. Contribute to data-burst/airflow-git-sync development by creating an account on GitHub.
github.com
1. SSH Key 설정
- SSH 키 생성
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/test/.ssh/id_rsa): #key 저장 위치 설정
Enter passphrase (empty for no passphrase): # 엔터
Enter same passphrase again: # 엔터
- 위에서 생성한 key의 public key 복사
cat id_rsa.pub | pbcopy
- sync할 깃헙 레포지토리 접속 → Settings → Deploy keys → Add deploy key
- Key에 붙여넣기 후 Add key
Allow wire access 하지 않으면 read-only 권한 부여됨
2. docker-compose.yml 작성
공식 홈페이지에서 안내되는 코드에 아래 사항만 추가&수정해주면 됨
- git-sync 추가
git-sync:
image: databurst/git-sync:latest
volumes:
- ./project_data:/app/sync #sync할 코드를 로컬에 mount
- <key_path>/id_rsa:/root/.ssh/id_rsa #1에서 생성한 프라이빗키를 git-sync 컨테이너에 mount
environment:
REPO_URL: git@github.com:hongjy21/test.git #git repo ssh clone url
GIT_BRANCH: main # sync할 브랜치 설정
DIRECTORY_NAME: project # git-sync 컨테이너에 clone해오는 위치
DESTINATION_PATH: /app/sync # sync할 코드 경로
SUBFOLDER_PATH: dags # git repo에서 sync대상인 위치 (optional)
INTERVAL: 10 # sync 주기
- airflow-common에서 dags 마운트 경로 변경
volumes:
# - ${AIRFLOW_PROJ_DIR:-.}/dags:/opt/airflow/dags
- ./project_data:/opt/airflow/dags # git-sync 컨테이너에서 코드 mount한 로컬 경로로 변경
Helm차트에서 git-sync 사용
Helm 차트에서는 옵션으로 git sync를 제공하기 때문에 더 간편하게 사용 할 수 있다.
1. SSH Key 설정
- SSH Key 생성과 Git Repo 설정은 위와 동일한 방식
- k8s secret에 private key를 등록해야 함
kubectl create secret generic airflow-ssh-secret \
--from-file=gitSshKey=/<key_path>/id_rsa \
--from-file=id_rsa.pub=/<key_path>/id_rsa.pub \
-n airflow
2.. Helm Chart values.yaml 수정
- values.yaml에서 git-sync 관련 파라미터 값 설정
dags:
(생략)
gitSync:
enabled: true
# git repo ssh clone url
repo: git@github.com:hongjy21/test.git
branch: main # sync할 브랜치 설정
rev: HEAD
# ref: v2-2-stable
depth: 1
# the number of consecutive failures allowed before aborting
maxFailures: 0
# repo 내부 sync path
subPath: "dags"
# 위에서 생성한 ssh-key secret 지정
sshKeySecret: airflow-ssh-secret
# sync 주기 설정.
period: 5s # Go-style의 시간 주기
wait: ~ # 하위버전 호환용. 초단위 시간
containerName: git-sync
uid: 65533
# When not set, the values defined in the global securityContext will be used
securityContext: {}
# runAsUser: 65533
# runAsGroup: 0
securityContexts:
container: {}
# container level lifecycle hooks
containerLifecycleHooks: {}
# Mount additional volumes into git-sync. It can be templated like in the following example:
extraVolumeMounts: []
env: []
resources: {}
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
'Data Engineering > Airflow' 카테고리의 다른 글
Airflow에서 custom timetable로 자유롭게 스케쥴 설정하기 (0) | 2024.07.28 |
---|---|
Helm Chart로 쿠버네티스에 Airflow설치(KubernetesExecutor 사용) (0) | 2024.04.13 |
docker-compose로 Airflow 설치하기 (0) | 2024.03.17 |
Airflow Rest API를 사용하여 DAG 호출하기 (0) | 2024.01.13 |
Airflow를 알아보자 (0) | 2023.05.14 |