데이터 공부/Apache Airflow

Airflow를 helm으로 배포해보기 - (1) 사이드카 패턴

한소희DE 2023. 3. 12. 02:02
오늘 포스팅에서는, 직접적인 helm 배포를 진행하기 전, 알아둬야 할 개념 중 하나인 사이드카 패턴에 대해 다뤄보고자 한다.

 

 

01. 사이드카 패턴이란

사이드카 패턴이란, 어플리케이션 컨테이너와 독립적으로 동작하는 별도의 컨테이너를 붙이는 패턴을 말한다.
사이드카를 형상화(?) 하면 이렇다.


이처럼, 메인 오토바이에 사이드카를 붙인 형태와 같은 패턴이 사이드카다.

이렇게 오토바이에 사이드카를 붙여 달릴 수도 있고 사이드카를 떼어서도 달릴 수 있는 형태처럼, 기본 컨테이너와 함께 하나의 컨테이너가 함께 실행될 수 있는 컨테이너 패턴을 짜는 것이 사이드카 패턴이다.

 

pod 안에 두 개의 컨테이너가 띄워져 있는 형국인데, 이때 pod안의 컨테이너들은 동일한 volumn과 연결이 가능하다. 또한, 하나의 pod 안에서는 같은 네트워크 안에서 동작하여, 같은 ip, port 를 공유한다는 특징이 있다.

 


 

02. SideCar 패턴의 장점

 


2-1. 기존 컨테이너의 변경 없이 기능을 수정, 확장을 할 수 있다.
사이드카 컨테이너를 통해서, 기존 컨테이너는 그대로 둔채 새 기능을 덧붙일 수 있다는 점이 큰 장점이다.

2-2. 동적 설정값 변경이 가능하다.

메인 컨테이너에서, 미리 정의된 디렉토리 설정 파일을 주기적으로 읽어 들이도록 구성을 하고, 사이드카 패턴으로 구성한 사이드 컨테이너에서는 해당 config 위치를 지켜보고 있다가 변경사항이 발생하면 디렉토리 설정 파일을 업데이트 할 수 있다.

 

 


03. Git Sync Relay

 

그렇다면, airflow를 배포할 시 에 sidecar 패턴을 알아야 하는 이유는 무엇일까?

바로, 이 패턴을 사용하여 기본 컨테이너 코드를 git 서버 풀과 동기화할 수 있기 때문이다. 바로 이것을 Git Sync 라고 한다.

 

 

git-sync란, git 코드 및 데이터가 변경되면, 주기적으로 로컬 디렉토리와 싱크를 맞춰주는 기능을 하는 사이드카 컨테이너를 말한다. git sync 컨테이너는 메인 컨테이너가 어떤 기능인지 중요치 않고, 오로지 git과 로컬 디렉토리를 sync하는데에만 목적을 둔다.

 

git sunc는 쿠버네티스에서 범용적으로 사용되는 대표적인 사이드카 패턴 중 하나이며, 많이 쓰인다.

 

airflow에서도, 운영을 하기 위해서는 단발성의 배포만 하진 않을 것이다. (dag가 변경될 때마다 pod를 죽이고 다시 생성할 수도 없을 것이다.) 따라서, airflow를 운영하기 위해서는, 꾸준히 dags들의 변경사항을 업데이트 하는 과정이 필요하다. 이때, git-sync를 사용할 수 있다.

 

 


 

04. Git Sync 예시

 

출처: https://github.com/astronomer/airflow-chart/blob/master/docs/git-sync-relay.md

 

 

Git Sync의 예시는, 다음 포스팅 시 진행할 Airflow 배포 과정이다. 만약 지정된 git 레포지토리에 dag가 추가되거나 변경사항이 발생하면, Git Sync 사이드카 컨테이너가 이를 인지하고 pod 내 디렉토리의 file 을 수정한다. 

 

 

 

  ## Configure Git repository to fetch DAGs
  git:
    ##
    ## url to clone the git repository
    url: http://<my_github_id>:<my_access_token>@github.com/<my_github_id>/<github_repository_name>
    ##
    ## branch name, tag or sha1 to reset to
    ref: master
    ## pre-created secret with key, key.pub and known_hosts file for private repos
    secret: ""
    ## The host of the repo so for example if a github repo put github.com (Only need if using ssh not https git sync)
    repoHost: ""
    ## The name of the private key in your git sync secret (Only need if using ssh not https git sync)
    privateKeyName: ""
    gitSync:
      ## Turns on the side car container
      enabled: true
      ## Image for the side car container
      image:
        ## docker-airflow image
        repository: alpine/git
        ## image tag
        tag: 1.0.7
        ## Image pull policy
        ## values: Always or IfNotPresent
        pullPolicy: IfNotPresent
      ## The amount of time in seconds to git pull dags
      refreshTime: 60

 

위의 values.yaml 일부는, airflow helm chart의 values.yaml 에서, git sync 를 맞추기 위해 수정해야 할 부분을 스크랩해보았다.

 

Airflow 의 helm 설치 시 values.yaml의 해당 부분을 수정해주면, 설정한 <github_repository_name>에 해당하는 레포 내 dag파일들의 업데이트본을 끌어오는 컨테이너가 생긴다.

 

 

다음 포스팅에서는 실제 배포를 진행해보며 알게된 것들을 기록해보도록 하겠다.