[데이터 엔지니어링 데브코스] TIL 47일차 - Docker & K8S (5) & Airflow 고급 기능 배우기(1)

박단이·2024년 1월 2일
0

데브코스 TIL

목록 보기
47/56

오늘 배운 것🤓

Docker Orchestration

  • 다수의 호스트에서 구동되는 다수의 container을 효율적으로 관리하기 위한 도구
  • 한 클러스터 안에 다양한 서비스들(DB, Web, Backend,...)이 공존한다. 각 서비스들에서 자원을 요청하고 마스터에서 그 요청을 모아 자원을 할당한다.
  • 배포, 스케일링, 네트워크, 인사이트 등 다양한 기능을 제공한다.
  • 다양한 툴 : Mesos, Marathon, DEIS, Rancher, Nomad, Docker Swarm, K8s 등
  • 클라우드에서 지원 : EKS(AWS), AKS(Azure), GKE(Google)

제공하는 다양한 기능들

  1. 소프트웨어 배포
    • 서비스 이미지를 container로 배포
    • 이상이 감지되면 이전 안정버전으로 rollback
  2. 스케일링
    • 서버의 utilization을 고려하여 특정 서비스의 container 수를 쉽게 늘리고 줄인다.
  3. 네트워크
    • 서비스가 다수의 container로 나눠지면서 이들을 대표하는 load balancer을 만들어 준다.
    • 서비스들 간에 서로를 쉽게 찾을 수 있도록 서비스 디스커버리 기능을 사용한다.
  4. 인사이트
    • 노드/컨테이너 문제 시 해결
    • logging/analytics 등등의 기능 제공
    • 시각화와 문제 분석을 통해 전체 서비스 분석

Kubernetes(K8s)

  • 컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈소스 프레임워크
  • 현재 Cloud Native Computing Foundation이라는 비영리 단체에서 운영 중
  • 가장 많이 사용되는 컨테이너 관리(Orchestration) 시스템
  • 확장성이 좋아 다양한 환경에서 사용
    • 머신러닝 : Kubeflow
    • CI/CD : Tekton
    • Service Mesh : Istio
    • Serverless : Kueless
  • 다수의 서버에서 컨테이너 기반 프로그램(대체적으로 docker container)을 실행하고 관리

기본 구조

K8s 기본 구조

  • Master 속 프로세스
    • API server : K8s 클러스터의 entrypoint(가장 중요!)
    • Scheduler : 노드들의 상황을 고려해 pod를 생성하고 할당
    • Controller Manager : 전체 상황을 모니러팅하여 fault tolerance 보장
    • etcd : 환경정보가 저장되는 key/value 스토어로 백업
  • 모든 노드에는 Controller runtime이 적용된다.

Pod

  • K8s 사용자가 사용하는 가장 작은 빌딩 블록. 즉, 사용 최소 단위
  • 같은 디스크와 네트워크를 공유하는 하나 혹은 그 이상의 컨테이너들의 집합(보통, 하나로 구성)
  • 하나보다 많은 경우 보통 helper container를 같이 사용
  • 같은 pod 안에서는 디스크와 네트워크가 공유된다.
  • Fail over을 위해 복제본(replica)을 지정하는 것이 일반적
  • Pod는 host 이름을 갖고 있기 때문에 네트워크 주소를 갖는 self-container over

Airflow

Airflow 실행환경 관리 방안

  1. 환경설정값(Variables, Connections, ...) 관리 방법
    • web UI에서 관리하지 말고 docker-compose.yml 파일에서 관리
    • 파일에서 관리하면 web에서 보이지 않지만 프로그램에서 사용 가능
x-airflow-common:
  &airflow-common
  ...
  environment:
    &airflow-common-env
    AIRFLOW_VAR_변수명:# Variable
    AIRFLOW_CONN_변수명:# Connection
  1. Airflow 이미지 및 docker-compose.yml 관리 범위
    • Production의 경우, DAG를 airflow image에 넣고 그 이미지를 docker-compose.yml에서 사용하는 것이 좋다.
    • 개발의 경우, 공식 airflow image를 사용하여 host volume으로 내 폴더를 마운트하는 것이 좋다.
    • DAG 관리의 경우도 위의 방식을 사용하는 것을 추천

.airflowignore

  • Airflow가 의도적으로 무시해야 하는 dag의 디렉토리 또는 파일을 지정
  • Airflow DAG 스캔 패턴때문에 이것은 필수!
    dags_folder가 가리키는 서브폴더까지 다 스캔해서 DAG 모듈이 들어간 모든 python script를 일정한 주기(기본 5분)마다 실행하기 때문에 test하는 DAG가 에러를 내는 경우 문제를 일으킬 수 있다.

DAG 작성 시 Operator를 config 파일로 작성하기

  • 환경 설정 중심의 접근 방식이다.
  • dags 폴더 안에 config 폴더 생성 후 그 안에 DAG를 통해 만들 table 이름으로 config 파일을 생성한다.
  • Python dictionary 형태를 유지할 것이기 때문에 .py 확장자를 유지한다.
  • 즉, config 파일은 dag_table_name.py 형태이다.
  • 이 모든 것은 Operator와 helper함수를 직접 구현하는 것이다.

느낀 점😊

docker/K8s 부분 재미있었는데 금방 끝나서 아쉽다. docker-compose 구성을 혼자할 자신이 없다. 다시한번더 복습할 필요가 있다.

airflow 고급 기능 생각보다 오래 걸리는 것 같다. config 파일을 사용하여 DAG를 작성할 때 생성하는 Operator와 helper 함수는 코드를 보면 볼수록 신기하다. 코드 분석 다시 해서 내가 직접 처음부터 짤 수 있도록 해야지!

profile
데이터 엔지니어를 꿈꾸는 주니어 입니다!

0개의 댓글