Kubernetes 환경에서 Apache Airflow를 설치하고, DAG 파일을 로컬 디렉터리에서 마운트하는 방법을 정리해보았습니다.
특히 Docker Desktop (Mac M1)에서 hostPath를 올바르게 설정하여 DAGs를 공유하는 방법과
Helm을 사용하여 기존 Airflow 환경을 업그레이드하는 방법을 포함합니다.
✅ 1. Docker Desktop 환경에서 Airflow 설치 개요
Docker Desktop의 내장 Kubernetes 기능을 사용하면 로컬 개발 환경에서 손쉽게 Apache Airflow를 실행할 수 있습니다.
그러나, DAG 파일을 로컬 디렉터리에서 관리하려면 Docker Desktop의 파일 공유 설정과 Kubernetes hostPath 설정이 필요합니다.
📌 목표
1. Helm을 사용하여 Airflow 최초 배포
2. 로컬 디렉터리를 Kubernetes Pod에 마운트하여 DAGs 공유
3. Helm Chart의 values.yaml을 수정하여 업그레이드
4. Docker 및 Kubernetes에서 DAG 마운트 여부 확인
✅ 2. Docker Desktop 설정 (File Sharing)
Airflow의 DAGs 디렉터리를 마운트하려면 Docker Desktop에서 파일 공유 설정을 활성화해야 합니다.
🔹 MacOS (M1, Intel 공통)
1️⃣ Docker Desktop 실행
2️⃣ Settings → Resources → File Sharing 이동
3️⃣ 다음 경로 추가:
/Users/your-username/workspace/airflow/dags
4️⃣ Apply & Restart 클릭 후 Docker Desktop 재시작
✅ 3. DAGs 마운트 테스트 (Docker에서 확인)
Helm을 이용해 Kubernetes에서 배포하기 전에, Docker에서 DAGs가 정상적으로 마운트되는지 확인해야 합니다.
docker run --rm -v /Users/your-username/workspace/airflow/dags:/mnt ubuntu ls /mnt
✅ 정상적으로 마운트되었을 경우 출력 예시
helloworld.py
openapi_to_mysql_dag.py
readme.md
📌 출력된 파일 목록이 로컬 디렉터리와 동일하면, 마운트가 정상적으로 작동하는 것!
🔹 컨테이너 내부에서 직접 확인하려면 -it 옵션 사용
docker run -it -v /Users/your-username/workspace/airflow/dags:/mnt ubuntu /bin/bash
• 이후 컨테이너 내부에서 ls -l /mnt 실행
• exit 입력 후 종료
✅ 4. Airflow Helm Chart 다운로드 및 배포
Apache Airflow는 Helm을 통해 Kubernetes에 쉽게 배포할 수 있습니다.
🔹 4-1. Helm Chart 저장소 추가 및 업데이트
helm repo add apache-airflow https://airflow.apache.org
helm repo update
🔹 4-2. Helm을 사용하여 Airflow 최초 배포
helm install airflow apache-airflow/airflow --namespace airflow --create-namespace -f values.yaml
✅ 5. values.yaml 수정 후 Airflow 업그레이드
배포된 Airflow의 설정을 변경하기 위해 Helm을 이용한 업그레이드를 수행합니다.
특히, PostgreSQL 보안 설정, Worker/Scheduler 리소스 조정, Scheduler의 InitContainer 추가를 적용합니다.
📌 MacOS M1 환경에 맞춘 values.yaml 설정
# Airflow Webserver 설정 및 기본 관리자 계정
webserver:
service:
type: LoadBalancer
resources:
requests:
memory: 1024Mi
cpu: 500m
limits:
memory: 2048Mi
cpu: 1000m
livenessProbe:
initialDelaySeconds: 60
periodSeconds: 20
readinessProbe:
initialDelaySeconds: 60
periodSeconds: 20
extraVolumeMounts:
- name: dags
mountPath: /opt/airflow/dags
extraVolumes:
- name: dags
hostPath:
path: /Users/your-username/workspace/airflow/dags # ✅ MacOS M1 환경에서 사용 가능한 경로
auth:
defaultUser:
enabled: true
username: admin
password: admin
# PostgreSQL 설정 (Airflow 메타데이터 DB용)
postgresql:
primary:
securityContext:
runAsUser: 0
fsGroup: 0
volumePermissions:
enabled: true
# Worker 설정
workers:
securityContext:
runAsUser: 0
fsGroup: 0
resources:
requests:
memory: 1024Mi
cpu: 250m
limits:
memory: 1536Mi
cpu: 500m
extraInitContainers:
- name: fix-worker-logs-permissions
image: busybox:latest
command:
- sh
- -c
- "mkdir -p /opt/airflow/logs/worker && chmod -R 755 /opt/airflow/logs/worker"
volumeMounts:
- name: logs
mountPath: /opt/airflow/logs
extraVolumeMounts:
- name: dags
mountPath: /opt/airflow/dags
extraVolumes:
- name: dags
hostPath:
path: /Users/your-username/workspace/airflow/dags # ✅ MacOS M1 환경에서 사용 가능한 경로
# Scheduler 설정
scheduler:
securityContext:
runAsUser: 0
fsGroup: 0
resources:
requests:
memory: 1024Mi
cpu: 500m
limits:
memory: 2048Mi
cpu: 1000m
extraInitContainers:
- name: fix-logs-permissions
image: busybox:latest
command:
- sh
- -c
- "mkdir -p /opt/airflow/logs/scheduler && chmod -R 755 /opt/airflow/logs/scheduler"
volumeMounts:
- name: logs
mountPath: /opt/airflow/logs
extraVolumeMounts:
- name: dags
mountPath: /opt/airflow/dags
extraVolumes:
- name: dags
hostPath:
path: /Users/your-username/workspace/airflow/dags # ✅ MacOS M1 환경에서 사용 가능한 경로
# MySQL 프로바이더 의존성 해결을 위한 추가 pip 패키지 설치
airflow:
extraPipPackages: "apache-airflow-providers-mysql"
✅ 6. Helm을 사용하여 Airflow 업그레이드
설정이 완료되면 Helm을 사용하여 Airflow를 업그레이드합니다.
helm upgrade --install airflow apache-airflow/airflow --namespace airflow -f values.yaml
🚀 이제 Kubernetes에서 Airflow가 업그레이드된 설정으로 실행됩니다!
✅ 7. Kubernetes에서 DAGs 마운트 여부 확인
🔹 7-1. Webserver Pod 내부에서 DAGs 확인
kubectl exec -it airflow-webserver-0 -n airflow -- ls -l /opt/airflow/dags
👉 DAG 파일이 보이면 정상적으로 마운트된 것입니다!
🔹 7-2. 볼륨 마운트 정보 확인
kubectl describe pod airflow-webserver-0 -n airflow | grep -A10 "Volumes"
'Data Engineering > Airflow' 카테고리의 다른 글
[Airflow 가이드 ep.2] 1부 개념과 설정 #2 | DAG란 무엇인가? DAG 구조와 트리거 방식 이해 (0) | 2025.03.25 |
---|---|
[Airflow 가이드 ep.1] 1부 개념과 설정 #1 | 워크플로 자동화란? Airflow의 필요성과 기본 개념 (0) | 2025.03.25 |
Airflow DAG 등록 및 MySQL 프로바이더 이슈 해결: Minikube와 Helm을 활용한 Airflow Cluster 구축 가이드 (0) | 2025.02.25 |
Apache Airflow를 Minikube와 Helm으로 설치하기 (Apple M1 환경) (0) | 2025.02.24 |
Apache Airflow 가이드: 역할과 아키텍처 정리 (0) | 2025.02.23 |