🔒 내부용 · 비배포 (포트폴리오에는 일반화 버전만 공개) · 출처: 운영 기록/장애 회고 수집물
0한눈에
- 대상: 데이터 수집 파이프라인(크롤러/DAG)을 구동하는 Airflow 플랫폼 + K8s 클러스터.
- 전환:
Docker Compose → Kubernetes Helm Chart (2024-08).
- 실행기:
KubernetesExecutor (Task별 Pod 격리), DAG 동기화: Git-Sync 사이드카, 메타DB: PostgreSQL.
1아키텍처 흐름
Git-Sync(DAG-as-Code) → Airflow(KubernetesExecutor) on K8s → 수집 DAG(크롤러 Task별 Pod) → PostgreSQL(메타) · 모니터링.
- K8s 클러스터 직접 운영: 컨트롤플레인 / 워커 노드, 스토리지 클래스 · Ingress · cert-manager.
- 하이브리드 확장: WireGuard + NAT 구성으로 클러스터를 확장·연결하고 트러블슈팅.
2왜 K8s로 전환했나
Docker Compose 단일 호스트 운영은 Task 간 격리가 없고 DAG 배포가 수동이라 형상 관리가 어려웠다. K8s 전환으로:
- KubernetesExecutor로 Task마다 Pod를 분리해 자원·실패를 격리
- Git-Sync 사이드카로 DAG를 코드로 동기화(DAG-as-Code)해 배포·이력 관리
- 메타데이터를 PostgreSQL로 분리해 상태 일관성·복구성 확보
3주요 장애 & 근본 원인 대응
- CoreDNS / Airflow scheduler CrashLoopBackOff: git-sync ↔ scheduler 통신이 마비되며 스케줄러 다운 → 통신 경로 복구.
- 노드 Inode 고갈 · DiskPressure: 디스크 압박으로
Pod Eviction 발생 → 디스크/Inode 사용 원인 분석 및 해소.
- Airflow Task 실패:
etcd 응답 지연이 원인 → etcd HA 도입 검토.
- gitSshKey 장애: DAG 동기화용 SSH 키 문제로 git-sync 실패 → 키/권한 복구.
- 권한 만료 · 디스크 접근 실패: 실행/마운트 경로 권한 이슈 복구.
패턴: 단순 재기동에 그치지 않고 CrashLoopBackOff → 통신 경로, Eviction → Inode/Disk, Task 실패 → etcd 처럼 근본 원인까지 추적해 재발을 줄였다(HA 개선 포함).
4정기 운영
- 크롤러/DAG 일상 운영 및 상태 모니터링.
- 수집 RAW 데이터 및 DB 백업 경로 관리.
결과: 수집 파이프라인의 안정성·가용성 확보, 반복 장애의 근본 원인 해소.
5온보딩 포인트
- 흐름은 항상 Git-Sync → scheduler → KubernetesExecutor가 Task Pod 생성 → PostgreSQL 상태 기록. 이 중 한 고리가 끊기면(특히 git-sync↔scheduler) 전체 스케줄링이 멈춘다.
- 노드 디스크/Inode와 etcd 상태는 Airflow Task 안정성과 직결 — 모니터링 우선순위.
- DAG 변경은 코드(Git)로만 — 수동 배포 금지(DAG-as-Code).
6공개(포트폴리오)와의 차이
공개 버전(human/portfolio/items/infra-k8s-airflow-ops.html)은 내부 호스트명/IP(172.30.x, 211.115.x 등)·내부 식별자·동료 이름·고객사명을 제거하고 아키텍처·장애 대응·임팩트 중심으로 일반화했다. 이 내부 문서는 본인 참고/온보딩용으로, 장애 항목과 운영 세부를 더 구체적으로 남긴다.