基于Docker快速搭建(支持Docker管理的)單節點Mesos+Marathon集群開發環境
在進行Mesos+Marathon開發的時候,最麻煩的事情莫過于基礎環境的搭建。Mesos還好有mesosphere幫忙 build好了,但是你想使用最新版還得自己make,在install的時候,還會遇到fetch code.google.com的網絡問題,折騰環境的過程早已經把一腔熱血潑滅了。因此為了快速搭建Mesos+Marathon單節點開發環境,使用 Docker弄了一套。
Mesos是集群資源管理系統,Marathon是運行在Mesos之上的集群計算架構。將Mesos和Marathon打包到Docker鏡像中,開發者便可以在本機上快速搭建Mesos/Marathon集群,進行學習和測試。
本鏡像非常簡單。Docker容器運行在Ubuntu主機之上,Mesos和Marathon運行在該容器之中。具體來講,Docker容器中運行了一個Mesos Master和一個Mesos Slave,以及Marathon和ZooKeeper。
由于很多同學搭建Mesos是為了管理Docker鏡像,而且Mesos也原生支持了Docker,因此使用marathon管理Docker是 一件非常amazing的事情。但是奈何默認marathon配置沒有加上對Docker的支持,因此你需要自己去配置一下啟動參數和兩個文件,這樣才能 使用marathon管理Docker容器。
已經有同學實現了Docker搭建單節點的Mesos+Marathon環境,但是經過試用,發現只能運行非容器化的應用,對于Docker是不支持的,在log里面一直報錯。
None of the enabled containerizers (mesos) could create a container for the provided TaskInfo/ExecutorInfo message
goolge得知是因為沒有在mesos-slave上配置對于Docker的支持,因此需要增加配置。
首先需要在mesos-slave這臺機器上install docker,這個就不詳細說了,安裝Docker已經是必備的技能。
為了讓Mesos知道我們要使用Docker作為虛擬化工具,需要增加兩個文件如下
echo 'docker,mesos' > /etc/mesos-slave/containerizers echo '5mins' > /etc/mesos-slave/execu`enter code here`tor_registration_timeout
這兩個文件的意思是,一個說我將要使用Docker作為我第一選擇,然后如果不行的話再去使用Mesos。然后第二個文件是設置超時時間,因為每個image都需要pull下來,如果pull的時間太長就會被認為是超時。
這是完了這兩個文件后,還需要在啟動mesos-slave的時候增加一個參數。
/usr/sbin/mesos-slave --containerizers=docker,mesos --master=zk://127.0.0.1:2181/mesos --log_dir=/log/mesos >>/dev/null 2>&1 &
這樣slave就會可以支持Docker了。其實根據我最后的使用經驗來看,這個slave僅僅是使用了docker-client,真正的 docker-daemon是使用的host的,這樣對于端口映射就會非常簡單的完成,就像你在本地機器自己裝了一個Docker一樣。
最后啟動容器就OK了。
docker run -p 8080:8080 -p 5050:5050 --name mesos -ti -w /root -v /sys/fs/cgroup:/sys/fs/cgroup -v /var/run/docker.sock:/var/run/docker.sock single-docker-mesos
這里比較奇怪的參數是那兩個-v,一個是將本地的Docker Daemon綁定到容器內部,另外一個是將cgroup綁定到容器內部,因為Docker的運行需要cgroup的支持,這樣Marathon就能在容器內部管理外部的容器了。
最后,其實上面這些東西只要明白大概意思就可以,真正使用灰常的簡單。我把代碼放到 GitHub 上,你可以clone下來本地build,然后run一下就可以測試使用Marathon 管理Docker了,如果你還嫌麻煩,我把已經build好的image傳到了靈雀云上,你可以直接pull下來使用,更加方便。