airflow를 운영할때 운영상의 어려움

  1. dag 늘어날수록, 모듈들간의 호환성 출돌 이슈
    + 수가 늘어날수록 해결하기가 불가능에 가까워짐

  2. dag 늘어날수록 worker 부족
    +싱글노드에서 멀티노드로 변화(서버증가)

  3. 바쁠때와 아닐때의 차이에 의해 서버낭비 발생 (내돈!!)
    +docker와 쿠버네티스가 도움이 될것임

 

 

위 문제들을 해결하는 방법

 

  1. 충돌이슈 : dag, task 코드를 docker image로 만들고 독립공간(docker 컨테이너) 을 만들어 실행
    +개발환경과 프로덕션 환경을 동일하게 유지 가능
  2. worker 부족 :
    서버 사양 높이기(scale up),

    서버분리후 증가(scale out)는 보통 aws 같은 클라우드 서비스,

    쿠버네티스(k8s) 컨테이너 기술(필요할때 받아서 사용하고 반납)
    +전용 서버를 할당할 필요가 없음(배민라이더 인해 배달원 따로 고용 x)
  3. 서버낭비 : 쿠버네티스(k8s) 를 사용!

그래서 구체적으로 어떻게 해결하는데?  (airflow에서 다음 방식으로 문제들을 해결하자)

  1. airflow operator로 kubernetespod operator, dockeroperator  사용
    KubernetesPodOperator : ubernetes 클러스터에서 실행되는 작업을 정의하는 데 사용, 각 작업은 Kubernetes Pod 내에서 실행되며, 컨테이너 이미지, 리소스 할당 및 다른 Kubernetes 설정을 지정할 수 있다.

    dockeroperator : 로컬 또는 원격 Docker 환경에서 실행되는 작업을 정의하는 데 사용, 각 작업은 Docker 컨테이너 내에서 실행되며, 사용할 이미지, 환경 변수 및 다른 Docker 설정을 지정할 수 있다
  2. airflow executor(task들을 관리하고 실행)을 아래를 3개 사용
    kubernetes Executor: Kubernetes의 강력한 컨테이너 오케스트레이션 기능을 활용하여 확장성이 뛰어나며 동적으로 자원을 할당

    celerykubernetes E :  Celery의 확장성과 Kubernetes의 컨테이너 관리 기능을 모두 활용

    localKubernetes E : 로컬 개발 머신에서 Kubernetes 클러스터를 모사하여 실행하는 에어플로우 실행자

    + 그외 Executor 들
    sequential executor : 병렬 처리가 없어 단일 프로세스 내에서 작업이 실행, 성능이 낮지만, 테스트 및 디버깅 용이
    local executor : 로컬에서 병렬로 여러 작업을 실행하는 에어플로우 실행자
    celery executor : Celery는 분산 작업 큐 시스템으로, 여러 워커에서 동시에 작업을 처리할 수 있도록 지원

+ Recent posts