학습주제
도커가 왜 필요한지
학습내용
에어플로우 운영관점에서 왜 도커가 필요하고, 컨테이너 실행해주는데 도움되는 쿠버네티스 왜필요한자.
3. 그 전에 VM과의 차이점.
4. 도커 설치.
5. 어떻게 이미지를 만들고 컨테이너 상에서 실행하는지
3개의 실습. 간단하게 node.js를 도커 이미지로 빌드, 도커 허브 레지에 등록, 다른 서버에서 받아서 실행해봄.
이미 누가 만들어놓은 우분투, mysql 실행시켜본다.
꼭 에어플로우만은 아님, 다수 서버로 운영되는 소프트웨어 해당
데이터 리니지 이슈도 있음.
어떤 대그는 파이썬 2.0, 3.8 등 다양한 버전으로 대그들이 돌음
해결이 거의 불가능한 경우가 있음.
워커 노드의 수가 부족.
대그의 수가 늘어나면 노드 하나로 부족. 워커노드를 추가해야함.
싱글노드에서 멀티 노드로 확장됨. 운영상의 어려움 발생.
서버들이 노는 경우 발생 - 자원의 낭비. 데브옵스 관점에서 에어플로우에 웹서비스를 구성하는 다양한 서비스를 별도로 할당해야함.
각각이 바쁘고 노는시간 발생함.
이런 문제를 풀기위해 도커와 쿠버네티스를 사용함
대그의 수가 늘어나다보면 같은 종류의 소프트웨어를 써도 버전이 다르고,
디펜던시가 있는 라이브러리가 버전이 다른경우.
대그마다, 태스크마다 다른 시스템과 분리가 된 별도의 독립공간을 만들어주면 좋음.
파이썬 venv. 그래도 리눅스 소프트웨어 충돌 등은 해결 어려움
도커를 사용해 별도의 공간(컨테이너) 그 안에 이미 설정이 다 끝난 이미지를 실행함.
도커 이미지 - 실행하는데 필요한 디펜던트한 라이브러리 묶은 패키지
도커 컨테이너 - 작게 분리된 일종의 컴퓨터(공간)
대그 수 증가로 워커 부족
서버 한대로 시작함.
마스터 안에 워커가 같이 존재.
워커는 파이썬으로 구성. CPU 수만큼 할당.
에어플로우 용량이 부족해지면
스케일 업 - 서버 사양을 올려줌. 가장 단순한 방법. 어느 시점에 한계에 도달
스케일 아웃 - 워커 노드를 별개로 마스터 노드로 분리. 계속 증가시킴. 가능하면 클라우드 기반 에어플로우 서비스 고려. 아님 쿠버네티스 고려. 에어플로우에서 대그, 태스크 실행하면 자체 워커 실행 X. 서버를 빌려서 실행하고 리턴하고.
어떤 역활이 명확하게 지정되지 않았지만 바로 사용할 수 있는 공용 서버 클러스터
필요한 자원을 마스터가 요청 받아서 제공하고 리턴받음.
에어플로우가 갖고 있는 문제 뿐 아니라, 스파크, 웹서버, DB에서 모두 사용. 서버가 탄력적으로 돌아가야하는 상황.
에어플로우 전용 워커노드 10대를 할당했지만, 항상 바쁜건 아님. 보다시피 많이 바쁠대 있지만 안바쁜 시간대가 꽤나 보임. 일반적인 패턴
웹 서버들도 보통 저럼.
전용 하드웨어를 할당한다는 건
놀고있는 시간이 있고, utilization이 낮아짐.
피크타임을 고려하면 서버를 더 할당해야하는 경우도 생김.
쿠버네티스를 구현해 온디멘드 형태로 제공하면 전체적으로 capacity 관리도 편해짐.
utilization도 올라감.
해결책.
도커 이미지로 만들어 도커 컨테이너에서 실행.
개발 환경, 프로덕션 환경 동일 유지
쿠버네티스에 연결해서 전용 워커 쓰지 않고, 자원을 받아서 사용
가장 많이 사용됨.
컨테이너 오케스트레이션 서비스로 에어플로우의 워커를 쿠버네티스에 할당
에어플로우에서 구현
완전, 부분 구현
오퍼레이터 레벨에서 도커, 도커 + 쿠버네티스
오퍼레이터 - 데이터 파이프라인(대그)는 이것들을 집합으로 가짐.
태스크 - 오퍼레이터
어떤 태스크를 도커 오퍼레이터 -> 실행자체가 도커 이미지로 실행. 워커 위에서 컨테이터를 론치함.
분리된 전용 공간을 만들어줘 충돌이 없음.
전용 서버를 쓸 때 환경출돌 이슈가 몇개 대그에 있으면 도커 오퍼레이터 사용
좀더 스케일러블
도커 이미지들을 - 쿠버네티스에서 서버를 받아서 실행시킴.
위의 a,b 두개는 오퍼레이터를 쓰기에 대그 자체는 에어플로우 전용 서버에서 실행, 스케줄링됨. 다른 오퍼레이터도 계속 사용 가능
c. 로컬, 시퀸셜 등등. 에서 쿠버네티스 엑시큐터 등 에어플로우 전용 하드웨어가 아닌 쿠버네티스 하드웨어 쓰거나 하이브리드로 사용하는 경우 있음.
뒤에서 실습으로 몇개 해본다.
엑시큐터가 무엇인지 좀 더 얘기해보자.
대그에 있는 태스크들을 관리하고 실행하는 역할 수행
태스크들이 병렬, 일렬, 어떤 워커에서 실행되는지 결정
시퀸셜 - 싱글쓰레드 DB에서만 사용가능. 병렬사용 불가. 태스크들이 일렬로
로컬 - 다수의 쓰레드를 지원 postgres, mysql 사용 가능. 여전히 워커노드가 하나밖에 없고 마스터 노드임.
셀러리 엑시큐터 - 워커노드가 1개 이상일 때, 셀러리 큐에 집어넣고 큐에서 읽어가는 형태.
쿠버네티스 - 쿠버네티스 클러스트를 이용하여 독립 환경에서 태스크 돌림 모든 태스크, 대그는 도커 이미지임.
로컬 쿠버네티스 엑시큐터 - 하이브리드 지원.
몇개를 뒤에서 실습때 사용
안전하고
스케일러블 - 도커, 쿠버네티스 사용
쿠버네티스 엑시큐터
셀러리 쿠버네티스 - 하이브리드. 쿠버네티스, 에어플로우 전용 워커
로컬 쿠버네티스 - 하이브리드. 워커노드 1개로 대그 실행, 어떤건 쿠버네티스에서 서버로 받아다가 실행.