1. K8SM (Kubernetes Mesos)?


K8SM는 Apache Mesos에서 Google의 Kubernetes를 사용 할 수 있도록 개발 된 Mesos Framework 입니다.
초기 K8SM은 Mesosphere 팀에서 Kubernetes v0.14를 기준으로 개발 되었다가, Kubernetes v1.0 버전이 릴리즈 되면서, Kubernetes로 통합이 된 것으로 알고 있습니다.

K8SM을 구성하려면 Apache Mesos와 Google Kubernetes에 대한 이해가 있어야 합니다.
– Apache Mesos
https://www.yongbok.net/blog/apache-mesos-cluster-resource-management/

– Google Kubernetes
https://www.yongbok.net/blog/google-kubernetes-container-cluster-manager/

 

 

2. K8SM – Architecture


K8SM에 대해 제 나름 대로 그려 봤습니다.
(원본은 https://github.com/GoogleCloudPlatform/kubernetes/blob/master/contrib/mesos/docs/architecture.md 에서 확인 가능 합니다.)

원리는 아래와 같습니다.

2015-08-09-kubernetes-mesos
Fig 1. The architecture diagram of Kubernetes Framework for Apache Mesos

 
3. K8SM – 구성


본 구성은 Ubuntu 14.04 LTS 64bit에서 테스트 되었으며, 위의 아키텍처와 같게 구성 될 것이고, Hostname과 IP 정보는 다음과 같습니다.

만일, 물리 서버 1대 또는 개인 PC로 가상화를 통해 구성 할 생각이면, 아래 Docker를 활용 하는 방법도 있습니다.
https://github.com/ruo91/docker-kubernetes-mesos

 
4. K8SM – ETCD Cluster


ETCD를 빌드하기 위해서는 Go Language가 필요 합니다.
따라서, Go Language를 설치 후 ETCD를 빌드 합니다.

– Go Language 설치

 

– ETCD 설치
최신 버전도 좋지만, release 버전을 통해 설치 하겠습니다.

 

– ETCD Clustering

각각의 서버마다 실행 하시면 됩니다.
* etcd-0

 

* etcd-1

 

* etcd-2

 
5. K8SM – Mesos Master


Mesos를 패키지로 설치 할 경우 ZooKeeper도 함께 설치 되므로, ZooKeeper 서버를 따로 구성 하지 않아도 됩니다.
만일, ZooKeeper 서버를 따로 구성 하려는 경우 본문의 ZooKeeper 관련 설정은 무시 하면 됩니다.

– Mesos 설치

 

– ZooKeeper 설정

 

– ZooKeeper MyID 설정

* mesos-master-0

 

* mesos-master-1

 

* mesos-master-2

 

* mesos-master-3

 

– ZooKeeper 시작
각각의 서버마다 실행 하시면 됩니다.

 

– Mesos Master 시작
각각의 서버마다 실행 하시면 됩니다.
실행 할때 주의 할 점이 있는데, mesos 0.2x 버전대에서 quorum 옵션 값이 2이 상이 되면 리더 Master 서버가 죽는 문제가 있습니다.

이 문제는 값을 1로 하면 해결이 되며, 해당 링크는 https://gist.github.com/jaytaylor/3fced64bcf1fecc61d18 에서 확인 하실 수 있습니다.

 
6. K8SM – Minion & Mesos Slave


Minion에 Container가 실행 되므로, Docker가 설치 되어 있어야 합니다.
또한, Mesos Slave가 kubelet(executor), proxy를 실행 하기 위해서는 Kubernetes Server가 설치 되어 있어야 합니다.
– Docker 설치

 

– Docker 설정 (AUFS 사용자만 설정 하시면 됩니다.)
Docker 데몬 옵션 설정 파일에 스토리지 드라이버를 OverlayFS로 변경 후 재시작 합니다.
OverlayFS로 설정하는 이유는 Docker 1.x 버전대 중에 AUFS를 기본으로 사용하는데, 이 AUFS가 리눅스 커널과 충돌이 잦습니다.

Container 실행 중에 HostOS가 멈춤 현상이 발생 할 수 있기 때문에,
Docker 공식 문서에서도 AUFS 대신에, Devicemapper, Btrfs, OverlayFS를 사용 하도록 권장 하고 있습니다.
(참고로, OverlayFS는 Linux Kernel 3.10+ 이상에서 사용 가능 합니다.)

 

기존의 Docker 이미지 저장소를 삭제하고 재시작 합니다.

 

– Mesos 설치

 

– Mesos Slave 시작
각각의 서버마다 실행 하시면 됩니다.

 

– Kubernetes 빌드
kubernetes는 Docker를 활용하여 빌드가 됩니다. 따라서, Docker가 미리 설치 되어 있어야 합니다.
또한, 빌드시 주의 할 점이 있는데, KUBERNETES_CONTRIB 변수를 설정 하지 않으면, 빌드 완료시에 K8SM 관련 바이너리를 얻을 수 없습니다.

 

– Kubernetes Server 설정
빌드가 완료 되면 _output 디렉토리에 파일이 생성 됩니다.
여기서 필요한 파일은 server만 필요 하므로 client 파일은 SCP나 FTP로 파일을 따로 보관 바랍니다.

 
7. K8SM – Kubernetes Mesos Framework


K8SM도 기존 Kubernetes의 API Server, Scheduler, Controller Manager 서버를 km 바이너리로 실행 합니다.
따라서, 위 “K8SM – Minion & Mesos Slave”에서 언급한 “kubernetes-server-linux-amd64.tar.gz” 파일이 필요로 합니다.
(해당 server 파일을 /opt 디렉토리에 업로드 하였다는 가정하에 진행 하겠습니다.)
– Kubernetes Server 설정

 

– Mesos Cloud 설정 파일 생성

Mesos의 Master에 대한 설정을 해줘야 합니다. ZooKeeper를 사용하여 Mesos Master의 리더를 선별을 하도록 사용중이면,
아래와 같이 ZooKeeper 서버를 추가 해주면 됩니다.

 

만일, Mesos Master를 단일로 운용 중이라면 아래와 같이 Mesos Master만 추가 해주면 됩니다.

 

– K8SM 실행
K8SM의 실행 순서는 API Server -> Controller Manager -> Scheduler 로 합니다.

* API Server

 

* Controller Manager

 

* Scheduler

 
8. K8SM – Web Server


K8SM은 Mesos와 Kubernetes 조합이므로 Mesos Master의 UI, Kubernetes의 API Server UI 두 개를 통해 웹으로 확인이 가능합니다.
이 부분을 특정 도메인을 통해 접속이 이뤄지도록 Nginx에 리버스 프록시 설정을 하겠습니다.

– Nginx 설치

 

– Nginx Reverse Proxy 설정

 
9. K8SM – Client & Test


Pods를 생성하기 위해서는 kubectl 바이너리가 필요합니다.
따라서, 위 “K8SM – Minion & Mesos Slave”에서 언급한 “kubernetes-client-linux-amd64.tar.gz” 파일이 필요로 합니다.
(해당 client 파일을 /opt 디렉토리에 업로드 하였다는 가정하에 진행 하겠습니다.)

– Kubernetes Client 설정

 

Mesos Master에 K8SM이 정상적으로 등록이 되었는지 확인 해보겠습니다.
(-s 옵션은 API Server를 뜻하며, 실행시 k8sm-scheduler이 나오지 않는다면 구성에 문제가 있는 것입니다.)

 

예제 Nginx YAML 파일을 통해 Pods를 구성 해봅니다.

 

Pods를 확인 해봤을때, STATUS 부분에 Pending 상태로 되어있는 경우, Docker Images를 받아오는 중이라고 생각 하시면 됩니다.
또한, Running의 경우 Container가 실행 중이라는 뜻입니다.

 

Web Server 부분에서 설정한 도메인으로 접속 하면 웹에서 해당 UI를 확인 해볼 수 있습니다.

– Mesos Master WEB UI
k8sm_mesos_web_ui

– Mesos Master WEB UI – Framework
k8sm_mesos_web_ui_framework

– Mesos Master WEB UI – Framework ID
k8sm_mesos_web_ui_framework_id

– Kubernetes Web UI
k8sm_apiserver

– Kubernetes Web UI – Pods
k8sm_apiserver_pods

 
Reference


– Google Kubernetes
https://github.com/googlecloudplatform/kubernetes

– Mesosphere Kubernetes Mesos
https://github.com/mesosphere/kubernetes-mesos

– ruo91/docker-kubernetes-mesos
https://github.com/ruo91/docker-kubernetes-mesos

– Yongbok Blog: Apache Mesos Cluster Resource Management
https://www.yongbok.net/blog/apache-mesos-cluster-resource-management/

– Yongbok Blog: Google Kubernetes- Container Cluster Manager
https://www.yongbok.net/blog/google-kubernetes-container-cluster-manager/

Thanks :)