컨테이너 오케스트레이션 솔루션 동향 (2016년 9월 기준)
Kubernetes, Mesos DC/OS, Docker(Swarm) 비교
|
Kubernetes |
Mesos DC/OS |
Docker Swarm |
특징 |
가장 안정적인 솔루션 |
가장 화려한 솔루션 |
가장 쉬운 솔루션 |
운영 가능한 host 머신 수 |
1,000 node |
10,000 node |
1,000 node |
라이선스 모델 |
아파치 |
아파치 |
아파치 |
버전 히스토리 |
v1.3.6 (latest, 2016-08-27) |
v1.8 (latest,
2016-08-04) |
v1.2.5 (latest, 2016-08-18) |
Managed Service |
Google Container Engine (구글) |
Azure Container Service (MS) |
Docker Cloud (도커) |
비고 |
. 기술자료 풍부 * CNCF: Cloud Native Computing Foundation |
. 기술자료 부족 |
. 기술자료 풍부 |
Mesos DC/OS 상세 자료
· 트위터, AirBnB 에서 사용
· MS Azure 에서 Managed 서비스 제공 ==> Azure Container Service
· DC/OS 란?
o 랩탑 컴퓨터를 쓰면서 어떤 어플리케이션이 어떤 코어에서 실행될지 관리한 적이 있는가?
§ 어플리케이션이 실행될 코어를 스케줄링하는 것은 커널이 할 일이다
§ 마찬가지로, 컨테이너가 실행될 host 머신을 선택하는 것은 오케스트레이터(DC/OS)가 할 일이다
o DC/OS는 싱글 컴퓨터 OS가 그런 것처럼 다양한 문제를 해결하기위한 다양한 도구를 포함한다,
o GUI나 CLI가 제공되지 않는 랩탑을 써본적이 있는가?
§ 수백대의 host 머신을 ssh 접속으로 관리하는 것은 불편하다
§ DC 전체를 조감/관리할 수 있는 UI가 필요하다
§ 어떤 어플리케이션이 어느 host 에서 실행되는지 한눈에 볼 수 있는 UI 가 필요하다
o Service Discovery를 위한 DNS 도 필요하다
o 이 모든 서비스들을 하나로 번들링한 패키지가 필요하다 ==> DC/OS!
· DC/OS = Mesos + Marathon + Chronos
o Mesos는 데이터센터를 위한 분산 시스템 커널
o Marathon은 작업(컨테이너) 관리용 스케줄러 (Kubernetes도 컨테이너 관리용 스케줄러로 사용 가능)
o Chronos는 배치작업용 스케줄러
o 1개의 DC/OS 클러스터에서 다수의 스케줄러 동시 이용 가능
· DC/OS 구성 요소 및 process 실행 시퀀스
o 구성 요소 & 관계
o process 실행 시퀀스
· 주요 기능
o Stateful Storage Support
§ external persistent volume 지원
· app 입장에서 사용 편리, 전통적인 disk와 동일
· elasticity와 replication의 대가로 speed를 희생 (느림)
§ distributed file system 지원
· app 입장에서 storage 사용법이 생소
· 네트워크 기반으로 동작하기 때문에 느림
§ local ephemeral storage 지원
· stateless, semi-stateless 12-factor, cloud native app 에 적합
· stateful service에는 부적합
§ local persistent volume 지원
· fast and persistent storage 제공
· data replication, RAID drive & backup 프로세스 등을 함께 사용한다면 speed 저하 없이 강인한(fault tolerant한) storage로 사용 가능
o Elastic Scalability
§ horizontal scaling 지원
· Marathon을 이용, service instance 숫자를 언제든지 쉽게 조정
· Marathon Load BAlancer를 이용, autoscaling 가능
§ vertical scaling 지원
· Marathon을 이용, 서비스 다운타임 없이 instance 용량 업데이트 가능
o Zero Downtime Upgrade
§ 다운타임 없이 서비스 자동 업데이트 가능
§ DC/OS 위에서 실행되는 서비스는
· rolling, blue-green, canary deploy pattern을 사용 가능
· deploy 실패시 이전 시점으로 one-click 복구 가능
o Service Discovery and Distributed Load Balancing
§ 자동 DNS endpoint 생성 기능 제공
§ 서비스 lookup API 제공
§ 내부 통신 고속화를 위한 L4 virtual IP proxing 기능 제공
§ 외부향 서비스를 위한 L7 load balancing 기능 제공
Docker (Swarm) 상세 자료
· 2016년 7월 Docker 1.12 가 릴리즈됨
· 소감:
o k8s처럼 pod(관련 컨테이너들의 집합)라는 낯선 개념을 도입하지 않고도, 도커에 내장된 Swarm을 통해
§ overlay-network,
§ replica 관리 (실행되는 컨테이너 수를 사용자 지정값과 같도록 관리),
§ scaling 처리,
§ service discovery,
§ load balancing 처리 기능을 k8s와 동등하게 지원하는 것이 인상적 ==> 새로 배울 개념이 적다 !
o docker 데몬/클라이언트에 내장된 명령으로 Swarm 클러스터를 관리 ==> 새로 배울 도구가 적다 !
· Docker 1.12 특징
o Swarm 명령이 native 지원됨 ==> The Best way to orchestrate Docker is Docker !
§ docker swarm 명령들이 추가됨
o Service 모니터링
§ docker service 커맨드로 service의 desired state를 지정/관리
§ health check
§ replica 관리 (실행되는 컨테이너 수가 설정된 값과 같도록 관리)
§ scaling 관리
o Self Healing
§ service가 죽으면 도커 엔진이 다시 스케줄링함
§ k8s 같은 별도의 오케스트레이션 도구 필요 없음
§ Swarm 클러스터 위에서 실행되는 컨테이너에 대해 지속 실행과 스케일링을 지원함
§ 데모 동영상 ~ https://www.youtube.com/watch?v=F7hoq0KwHD4&t=8m13s
o Security
§ 도커에 인증서를 관리하는 CA 서버가 통합됨
§ 추가 설정 없이 host 머신들 사이의 모든 통신을 암호화 처리함 (디폴트)
o Load Balancing
§ 클러스터 위에 service를 publish 하면 클러스터에 속한 모든 host 머신의 해당 port에 접근 가능
§ 도커가 모든 host 머신의 해당 port로 들어오는 service request를 적절한 컨테이너로 re-라우팅 & 로드밸런싱
o Rolling Deploys
§ replica 실행 중에 컨테이너를 한개씩 또는 두개씩(개수 설정 가능) 업데이트
§ 새로 추가된 명령어 한방으로 처리
§ 데모 동영상 ~ https://www.youtube.com/watch?v=F7hoq0KwHD4&t=6m38s
o 도커 1.11 대비 1.12 개선점 요약
· Docker 1.12 Networking Model
o 모든 컨테이너는 3 종류의 오버레이 네트워크에 연결됨
§ ingress
· 도커가 정의하는 오버레이 네트워크
· port를 publish (-p 옵션)한 service만 ingress 네트워크에 붙음 (port를 publish 하지 않은 컨테이너는 ingress 네트워크에 붙지 않음)
§ docker_gwbridge
· 도커가 정의하는 오버레이 네트워크
· 클러스터 외부와 연결하기 위한 네트워크
§ user-defined overlay
· 사용자가 정의하는 오버레이 네트워크
· 사용자는 다수의 오버레이네트워크를 정의할 수 있음
· $ sudo docker network create -d overlay mynet
§ 오버레이네트워크는 host 머신에 처음 컨테이너가 할당되어 실행될 때 생성됨
o Routing Mesh
§ 도커는 내장된 Routing Mesh의 도움으로 클러스터 안의 모든 host 머신으로 유입되는 요청이 컨테이너가 실행되는 적절한 host 머신으로 re-라우팅되도록 보장함
§ 클러스터 외부의 로드밸런서는 도커 클러스터 내부의 컨테이너 실행 상황(어떤 컨테이너가 어떤 host 머신에서 실행되는지)을 몰라도 됨
· Apache Mesos 소개
o ~ http://www.mimul.com/pebble/default/2013/10/27/1382885361083.html
· "Nexus: A Common Substrate for Cluster Computing"
o ~ https://www2.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-158.pdf
· "Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center"
· 범용 PaaS 플랫폼 mesos(mesosphere)
o ~ http://www.slideshare.net/songaal/paa-s-mesosmesosphere
· Mesosphere 튜토리얼
o ~ http://docs.mesosphere.com/intro-course
· Mesosphere DC/OS on Google Cloud Platform
o ~ https://mesosphere.com/google/
o ~ https://docs.docker.com/swarm/
· Docker Swarm vs. Kubernetes
o ~ https://outofbedlam.github.io/docker/2016/03/12/DockerSwarm-vs-Kubernetes/
· What's New In Docker 1.12
o ~ http://blog.nimbleci.com/2016/08/03/whats-new-in-docker-1.12/
· Docker Engine 1.12 comes with built-in Distribution & Orchestration System
o ~ http://collabnix.com/archives/1317
· Docker 1.12 Networking Model Overview