airflow를 운영할때 운영상의 어려움
- dag 늘어날수록, 모듈들간의 호환성 출돌 이슈
+ 수가 늘어날수록 해결하기가 불가능에 가까워짐 - dag 늘어날수록 worker 부족
+싱글노드에서 멀티노드로 변화(서버증가) - 바쁠때와 아닐때의 차이에 의해 서버낭비 발생 (내돈!!)
+docker와 쿠버네티스가 도움이 될것임
위 문제들을 해결하는 방법
- 충돌이슈 : dag, task 코드를 docker image로 만들고 독립공간(docker 컨테이너) 을 만들어 실행
+개발환경과 프로덕션 환경을 동일하게 유지 가능 - worker 부족 :
서버 사양 높이기(scale up),
서버분리후 증가(scale out)는 보통 aws 같은 클라우드 서비스,
쿠버네티스(k8s) 컨테이너 기술(필요할때 받아서 사용하고 반납)
+전용 서버를 할당할 필요가 없음(배민라이더 인해 배달원 따로 고용 x) - 서버낭비 : 쿠버네티스(k8s) 를 사용!
그래서 구체적으로 어떻게 해결하는데? (airflow에서 다음 방식으로 문제들을 해결하자)
- airflow operator로 kubernetespod operator, dockeroperator 사용
KubernetesPodOperator : ubernetes 클러스터에서 실행되는 작업을 정의하는 데 사용, 각 작업은 Kubernetes Pod 내에서 실행되며, 컨테이너 이미지, 리소스 할당 및 다른 Kubernetes 설정을 지정할 수 있다.
dockeroperator : 로컬 또는 원격 Docker 환경에서 실행되는 작업을 정의하는 데 사용, 각 작업은 Docker 컨테이너 내에서 실행되며, 사용할 이미지, 환경 변수 및 다른 Docker 설정을 지정할 수 있다 - airflow executor(task들을 관리하고 실행)을 아래를 3개 사용
kubernetes Executor: Kubernetes의 강력한 컨테이너 오케스트레이션 기능을 활용하여 확장성이 뛰어나며 동적으로 자원을 할당
celerykubernetes E : Celery의 확장성과 Kubernetes의 컨테이너 관리 기능을 모두 활용
localKubernetes E : 로컬 개발 머신에서 Kubernetes 클러스터를 모사하여 실행하는 에어플로우 실행자
+ 그외 Executor 들
sequential executor : 병렬 처리가 없어 단일 프로세스 내에서 작업이 실행, 성능이 낮지만, 테스트 및 디버깅 용이
local executor : 로컬에서 병렬로 여러 작업을 실행하는 에어플로우 실행자
celery executor : Celery는 분산 작업 큐 시스템으로, 여러 워커에서 동시에 작업을 처리할 수 있도록 지원
'docker(도커) 및 쿠버네티스' 카테고리의 다른 글
dockerhub 연동 실행, 수정 실습 (1) | 2023.12.24 |
---|---|
dockerfile 구조, 만들어보기 (0) | 2023.12.23 |
Docker 프로그램 개발 과정 (1) | 2023.12.23 |
Docker 설치 (window) (0) | 2023.12.23 |
docker 란 무엇인가? VM과 비교 (0) | 2023.12.23 |