[Docker] Docker 소개 / Virtual Machines vs. Docker Containers

MINJI·2024년 11월 21일

Docker, Kubernetes(K8s)

목록 보기
3/4

⭐ Airflow 운영상의 어려움

1. 관리해야하는 DAG의 수가 100개를 넘어간다면?

  • 데이터 품질이나 데이터 리니지 이슈 이외에도 다양한 이슈들이 발생
  • 라이브러리 충돌, Worker Node의 부족, Worker 서버들의 관리와 활용도 이슈

라이브러리 충돌

  • DAG에 따라 실행에 필요한 라이브러리/모듈이 달라지기 시작
  • 이로 인해 DAG 혹은 Task별로 별도의 독립공간을 만들어주는 것이 필요

Worker의 부족

  • 용량 늘리는 법
    • Scle Up
    • Scale Out (클라우드 서비스 사용)
    • K8s와 같은 컨테이너 기술 사용 (필요한대로 서버 요청)

낮은 Server Utilization 이슈

  • Airflow 전용 하드웨어를 지정했는데 서버들이 항상 바쁘지 않다면?
  • 서비스별로 전용 서버를 할당하는 것은 여러 이슈가 생길 수 있음
  • K8s를 통해서 해결할 수 있음

2. 해결책

  • 태스크나 DAG 코드를 Docker Image로 만들어서 Docker Container 형태로 실행
  • Airflow Worker를 K8s에서 필요한대로 동적으로 할당하여 사용

Airflow에서 이를 해결하는 3가지 방법

  • Airflow Operator로 KubernetesPodOperator를 사용
  • Airflow Operator로 DockerOperator를 사용
  • Airflow Executor로 아래를 사용
    • KubernetesExecutor
    • CeleryKubernetesExecutor
    • LocalKubernetesExecutor

3. Airflow Executor란?

  • Task들을 관리하고 실행하는 역할 수행
  • 다양한 수의 타입이 존재
    • Sequential Executor : 디폴트로 설치되며 Sqlite와 같은 싱글스레드 DB에서만 사용가능
    • Local Executor : task들을 Airflow 마스터 노드안에서 실행
    • Celery Executor : 다수의 Worker 노드가 있는 경우 사용되며 Celery 큐를 사용해 task들을 worker노드로 분산하여 실행
    • Kubernetes Executor : K8s 클러스터를 사용하여 task들을 독립된 환경에서 사용
    • Local Kubernetes Executor와 Celery Kubernetes Executor도 존재

Airflow -> Docker와 K8s를 사용하는 방법

  • Airflow Operator -> KubernetesPodOperator
  • Airflow Operator -> DockerOperator
  • Airflow Executor로 다음 중 하나를 사용
    • KubernetesExecutor
    • CeleryKubernetesExecutor
    • LocalKubernetesExecutor

⭐ Docker 소개

내가 만든 프로그램이 다른 컴퓨터에서 안 돌아간다면❓

💡 아이디어 : 내 컴퓨터 환경을 그대로 패키징해서 다른 이에게 줄 수 있다면❓
- Docker Image, Docker Container

Docker의 목표

소프트웨어를 일관되게 빌드하고 실행하고 배포


⭐ Virtual Machines vs. Docker Containers

1. Virtual Machine (VM) 이란?

소프트웨어를 이용해 물리적인 컴퓨터(호스트)를 가상화하여 하나의 시스템에서 여러 개의 독립적인 운영 체제를 실행할 수 있는 기술

  • AWS의 EC2가 대표적인 가상머신

2. Virtual Machine의 장단점

장점

  • 소프트웨어를 실행하기 위한 독립적이고 분리된 공간을 제공
  • 다수의 소프트웨어를 각 VM단에서 독립적으로 실행가능

단점

  • 각 VM은 자신만의 OS를 필요로 함 (가상 하드웨어 위에서 돌기 떄문)
    • 유료 OS라면 라이센스 비용 필요
  • 자원을 많이 사용함 (VM들끼리 자원을 나눠써야함)

3. Docker Container란?

소프트웨어를 실행하기 위한 독립적이고 분리된 공간
Volume을 갖고 있음 (자체 파일 시스템)

4. Container의 장단점

장점

  • 소프트웨어를 실행하기 위한 독립적이고 분리된 공간 제공
  • 자원 소비가 적음 (lightweight)
  • 호스트 OS를 사용 (별도 라이센스 비용 없음)
  • 리눅스 기반의 소프트웨어 개발에 용이

단점

  • 많은 수의 Docker Container를 관리하는 것은 쉽지 않음
  • Host OS를 사용하기에 Cross-platform compatibility를 항상 지원하지 않음
  • GUI 소프트웨어 개발에 적합치 않음

0개의 댓글