서버리스에서 쿠버네티스로 - Airflow 운영 경험기
김영준 · 컬리 · 컬리 기술 블로그
소개
서버리스 Airflow를 쿠버네티스 환경으로 전환하며 경험한 삽질들
AI 핵심 요약
컬리는 관리형 Airflow를 Kubernetes로 옮겨 성능과 비용을 최적화하는 과정에서 스케줄러 CPU 급등, 워커 OOM, 실행 로그 누락과 태스크 지연을 겪었다. DAG 분석 주기를 조정하고, 메모리 request·limit과 Taint·Tolerations로 자원을 격리했으며, 로그 상태와 실행 흐름을 추적해 워커 수를 늘리는 방식으로 지연을 줄였다. 전환 후 관리형 서비스의 고정 비용이 Kubernetes 노드 비용으로 바뀌며 약 50% 감소했고, 로그 수집과 모니터링을 더 고도화해야 한다는 과제도 확인했다. 운영 환경을 직접 관리하면 시행착오가 따르지만, 원인을 추적하고 조정하는 경험이 Airflow와 Kubernetes에 대한 기술 역량을 높인다는 점을 배웠다.
- DAG 변경이 잦지 않다면 `min_file_process_interval`을 늘려 스케줄러의 파일 분석 빈도와 CPU 사용량을 낮출 수 있다.
- Kubernetes의 메모리 OOM은 컨테이너·kubelet·OS 수준에서 발생할 수 있으므로 사용량을 관찰해 적절한 request와 limit을 설정해야 한다.
- 컴포넌트별 자원 요구량이 다르면 네임스페이스 전체에 일괄 제한을 두기보다 Taint와 Tolerations로 노드를 분리하는 방식을 검토할 수 있다.
- Airflow 태스크가 `scheduled`에서 `queued`로 넘어가는 흐름을 알면 로그가 남지 않은 실행의 원인을 좁히는 데 도움이 된다.
- 워커의 동시 처리량이 부족할 때는 자원 증설뿐 아니라 워커 수를 늘리는 스케일 아웃도 선택지가 된다.
비슷한 학습 자료
Testing Kubernetes Controller: Kubernetes Controller를 위한 테스트코드 작성 / if(kakao)2022
if kakao · YouTube
토스ㅣSLASH 24 - Kubernetes CPU 알뜰하게 사용하기
SLASH · YouTube
Apache Airflow 기반의 데이터 파이프라인
바스 하렌슬락 · Yes24
컬리 검색이 카프카를 들여다본 이야기 2
서민우 · 컬리 기술 블로그
컬리의 BigQuery 도입기 - 2부
허재진 · 컬리 기술 블로그
Kurly만의 MLOps 구축하기 - 쿠브플로우 도입기
구국원 · 컬리 기술 블로그