Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)


1. Mesos簡介

1.1 Mesos

Apache Mesos 是一個分布式系統的管理軟件,對集群的資源進行分配和管理。

Mesos主要由以下幾部分組成:

Master: 管理各Slave節點

Slave: 為集群提供資源

Framework: scheduler從Master請求資源,executor在Slave上執行任務

Slave節點上的每個executor是一個容器

 

官方文檔:

http://mesos.apache.org/documentation/latest/architecture/

http://mesos.apache.org/documentation/latest/getting-started/

 

Mesos主服務器使用Zookeeper進行服務選舉和發現。它有一個注冊器記錄了所有運行任何和從服務器信息,使用MultiPaxos進行日志復制實現一致性。

Mesos有一個從服務器恢復機制,無論什么時候一個從服務器死機了,用戶的任務還是能夠繼續運行,從服務器會將一些關鍵點信息如任務信息 狀態更新持久化到本地磁盤上,重新啟動時可以從磁盤上恢復運行這些任務(類似Java中的鈍化和喚醒)

 

1.2 Marathon

Marathon 是Mesos的一個Framework,用來執行需要長時間運行的任務。如果把Mesos比喻成Kernel的話,那么Marathon就是它的守護進程Daemon。

它還具備HA,Health Checks,服務發現等功能。如果某個Docker進程崩潰,Marathon會重新啟動同樣的進程。

 

1.3 Chronos

Chronos本質上是cron-on-mesos,這是一個用來運行基於容器定時任務的Mesos框架。

 

1.4 ZooKeeper

ZooKeeper用於集群的管理,包括統一配置管理,選舉Leader等。

 

2. 安裝Mesos

本次測試環境的構成如下:

Mesos Master: test166

Mesos Slave:  test166,test167

Marathon:  test166

Chronos:  test166

ZooKeeper:  test166

 

2.1 安裝准備

在所有機器上,安裝Mesos源

# rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

 

在所有機器的/etc/hosts中,指定主機名

# vi /etc/hosts
10.86.255.166  test166
10.86.255.167  test167

 

2.2 安裝Master

2.2.1 在Master上安裝Mesos,Marathon,Chronos,ZooKeeper

# yum install mesos marathon chronos mesosphere-zookeeper

如果服務器上之前裝過jdk,升級到最新版本

2.2.2 ZooKeeper設定

本次配置的Master是單節點環境,ZooKeeper也是單點

# vi /etc/mesos/zk
zk://test166:2181/mesos

2.2.3 啟動服務

# systemctl start zookeeper
# systemctl start mesos-master
# systemctl start marathon
# systemctl start chronos

 

2.3 安裝Slave

2.3.1 在Slave上安裝Mesos,Docker

# yum install mesos docker

2.3.2 Docker相關設定

# echo 'docker,mesos' > /etc/mesos-slave/containerizers
# echo '5mins' > /etc/mesos-slave/executor_registration_timeout

2.3.3 ZooKeeper設定

# vi /etc/mesos/zk
zk://test166:2181/mesos

2.3.4 啟動服務

# systemctl start docker
# systemctl start mesos-slave

 

2.4 確認

Mesos的頁面

http://10.86.255.166:5050/

 

Marathon的頁面

http://10.86.255.166:8080/

 

Chronos的頁面

http://10.86.255.166:4400/

 

3. 使用Mesos

在Mesos Slave頁面,可以看到兩個Slave

 

3.1 執行framework測試

3.1.1 在服務器上執行framework測試命令

# ./src/examples/python/test-framework 10.86.255.166:5050

3.1.2 在Frameworks頁面,可以查看任務的執行情況

3.1.3 點擊結束的任務頁面,可以看到在哪個Slave上執行的

 

3.2 測試Marathon

用nc命令啟動一個HTTP服務

3.2.1 在各節點上安裝netcat

# yum install nmap-ncat

3.2.2 在Marathon頁面,點擊“Create Application”創建任務

command: while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l $PORT; done

3.2.3 點擊“Create”后,創建並執行任務

3.2.4 在Applications頁面,點擊任務,可以看到任務的詳細信息

可以看到任務分布在兩個節點上,訪問HTTP服務啟動的端口

3.2.5 在各節點可以看到nc進程正啟動着

test166:

test167:

 

3.3 測試Chronos

3.3.1 在Chronos頁面,點擊“New Job”創建任務

注意:時間是UTC時間

 

3.3.2 在Chronos頁面,可以看到任務執行的情況

3.3.3 在Mesos頁面,可以看到任務執行的情況

 

4. 執行Docker任務

4.1 測試通過Marathon執行Docker任務

啟動Docker,抓取ubuntu鏡像,date命令輸出當前時間

 

任務Deploying的時候,從docker.io抓取鏡像,抓取下來后,開始Running。

如果抓取鏡像的時間過長,失敗的時候,可以先用docker pull命令在節點上抓取鏡像后,再執行任務。

4.1.1 創建json文件

# vi marathon-test.json
{
  "container": {
    "type": "DOCKER",
    "docker": {
    "image": "libmesos/ubuntu"
    }
  },
  "id": "ubuntu-marathon",
  "instances": 2,
  "cpus": 0.5,
  "mem": 256,
  "uris": [],
  "cmd": "while sleep 10; do date -u +%T; done"
}

4.1.2 在Marathon上創建任務

# curl -X POST -H "Content-Type: application/json" http://test166:8080/v2/apps -d@marathon-test.json

4.1.3 在Marathon頁面確認容器已經啟動

4.1.4 在Mesos頁面確認任務正在執行中

4.1.5 從stdout信息確認輸出的時間

4.1.6 在節點上確認容器已經啟動

# docker ps

4.1.7 查看容器的日志,確認輸出的時間

# docker logs CONTAINER_ID

 

4.2 測試通過Chronos執行Docker任務

啟動Docker,抓取nginx鏡像,啟動nginx容器

4.2.1 創建json文件

# vi chronos-test.json 
{
  "container": {
    "type": "DOCKER",
    "image": "nginx",
    "network": "BRIDGE"
  },
  "schedule": "R\/2015-12-20T07:30:00Z\/PT2M",
  "name": "chronos-nginx",
  "cpus": "0.5",
  "mem": "256",
  "uris": [],
  "command": "/usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf"
}

network": "BRIDGE",因為Docker默認的網絡模式是橋接,不指定默認也是BRIDGE

4.2.2 在Chronos上,創建任務

# curl -L -H "Content-Type: application/json" -X POST -d@chronos-test.json http://test166:4400/scheduler/iso8601

4.2.3 在Chronos頁面確認任務已做成

本次是測試,所以在Chronos的任務頁面,點擊「Force Run」強制執行

4.2.4 在Mesos頁面確認任務的詳細信息

4.2.5 在節點上確認容器啟動

# docker ps

4.2.6 確認nginx網頁可以訪問

5. 后記

Mesos, Marathon 使得 Docker集群的管理變得簡單方便,為在生產環境部署使用Docker集群提供了可能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM