오늘 배운 것🤓
Docker Orchestration
- 다수의 호스트에서 구동되는 다수의 container을 효율적으로 관리하기 위한 도구
- 한 클러스터 안에 다양한 서비스들(DB, Web, Backend,...)이 공존한다. 각 서비스들에서 자원을 요청하고 마스터에서 그 요청을 모아 자원을 할당한다.
- 배포, 스케일링, 네트워크, 인사이트 등 다양한 기능을 제공한다.
- 다양한 툴 : Mesos, Marathon, DEIS, Rancher, Nomad, Docker Swarm, K8s 등
- 클라우드에서 지원 : EKS(AWS), AKS(Azure), GKE(Google)
제공하는 다양한 기능들
- 소프트웨어 배포
- 서비스 이미지를 container로 배포
- 이상이 감지되면 이전 안정버전으로 rollback
- 스케일링
- 서버의 utilization을 고려하여 특정 서비스의 container 수를 쉽게 늘리고 줄인다.
- 네트워크
- 서비스가 다수의 container로 나눠지면서 이들을 대표하는 load balancer을 만들어 준다.
- 서비스들 간에 서로를 쉽게 찾을 수 있도록 서비스 디스커버리 기능을 사용한다.
- 인사이트
- 노드/컨테이너 문제 시 해결
- logging/analytics 등등의 기능 제공
- 시각화와 문제 분석을 통해 전체 서비스 분석
Kubernetes(K8s)
- 컨테이너 기반 서비스 배포/스케일/관리 자동화를 해주는 오픈소스 프레임워크
- 현재 Cloud Native Computing Foundation이라는 비영리 단체에서 운영 중
- 가장 많이 사용되는 컨테이너 관리(Orchestration) 시스템
- 확장성이 좋아 다양한 환경에서 사용
- 머신러닝 : Kubeflow
- CI/CD : Tekton
- Service Mesh : Istio
- Serverless : Kueless
- 다수의 서버에서 컨테이너 기반 프로그램(대체적으로 docker container)을 실행하고 관리
기본 구조
- 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 실행환경 관리 방안
- 환경설정값(Variables, Connections, ...) 관리 방법
- web UI에서 관리하지 말고
docker-compose.yml
파일에서 관리
- 파일에서 관리하면 web에서 보이지 않지만 프로그램에서 사용 가능
x-airflow-common:
&airflow-common
...
environment:
&airflow-common-env
AIRFLOW_VAR_변수명: 값
AIRFLOW_CONN_변수명: 값
- 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 함수는 코드를 보면 볼수록 신기하다. 코드 분석 다시 해서 내가 직접 처음부터 짤 수 있도록 해야지!