基於zookeeper+mesos+marathon的docker集群管理平台


參考文檔:

  1. mesos:http://mesos.apache.org/
  2. mesosphere社區版:https://github.com/mesosphere/open-docs
  3. mesosphere倉庫:https://github.com/mesosphere/open-docs/blob/master/downloads/mesos.md
  4. docker-ce安裝:https://docs.docker.com/engine/installation/linux/docker-ce/centos/
  5. 原理&安裝參考1:http://www.cnblogs.com/kevingrace/p/5685313.html
  6. 原理&安裝參考2:http://www.xuliangwei.com/xubusi/422.html

本文主要涉及基於zookeeper+mesos+marathon的docker集群管理平台的配置操作,原理可見上面參考文檔。 

一.環境

1. 拓撲

2. 拓撲說明

主機名

IP

OS

安裝服務

master-node1

10.11.4.156

CentOS-7-x86_64-1511

zookeeper, mesos-master, marathon

master-node2

10.11.4.157

CentOS-7-x86_64-1511

zookeeper, mesos-master, marathon

master-node3

10.11.4.158

CentOS-7-x86_64-1511

zookeeper, mesos-master, marathon

slave-node1

10.11.4.146

CentOS-7-x86_64-1511

mesos-slave, docker

slave-node2

10.11.4.147

CentOS-7-x86_64-1511

mesos-slave, docker

slave-node3

10.11.4.148

CentOS-7-x86_64-1511

mesos-slave, docker

3. 軟件版本

服務

版本

作用

zookeeper

3.4.10

保持各master之間的通信,選舉leader

mesos-master

1.3.0

管理接入mesos的各個framework & slave,並將slave上的資源按照相應策略分配給framework

mesos-slave

1.3.0

任務執行節點

marathon

1.4.7

調度器,用於下發任務,可保持長應用

docker

17.06.1.ce

具體執行docker下發任務

二.環境Master節點

以master-node1為例,master-node2/node3配置根據環境微調。

1. zookeeper安裝

請參考:http://www.cnblogs.com/netonline/p/7695034.html

ps:zookeeper需要java支持,這里安裝的是jdk-8u131-linux-x64。

2. mesos-master&marathon安裝配置

1)安裝mesos-master&marathon

# 添加mesosphere repository,根據github mesosphere社區版獲取最新repository
[root@master-node1 ~]# cd /usr/local/src/
[root@master-node1 src]# wget http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
[root@master-node1 src]# rpm -ivh mesosphere-el-repo-7-3.noarch.rpm
[root@master-node1 src]# yum install mesos marathon -y

2)mesos-master&marathon關聯zookeeper

[root@master-node1 src]# cd ~

#mesos-master選主
#完全替換默認配置
[root@master-node1 ~]# vim /etc/mesos/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos

#marathon選主
#默認marathon無相關配置目錄/文件
[root@master-node1 ~]# mkdir -p /etc/marathon/conf/
[root@master-node1 ~]# vim /etc/marathon/conf/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/marathon 

3)marathon連接mesos-master

#默認marathon無相關配置master文件
[root@master-node1 ~]# vim /etc/marathon/conf/master
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos 

4)mesos-master配置quorum&work_dir

#quorum設置為整數,且大於master節點數的1/2
[root@master-node1 ~]# echo "2" > /etc/mesos-master/quorum

#work_dir也在/etc/mesos-master/目錄下,保持默認值即可
[root@master-node1 ~]# cat /etc/mesos-master/work_dir 
/var/lib/mesos 

5)mesos-master&marathon配置ip&hostname

#hostname直接配置的本機ip,是為了防止出現dns無法解析的問題;
#其余兩個節點也配置本機地址即可
[root@master-node1 ~]# echo "10.11.4.156" > /etc/mesos-master/ip
[root@master-node1 ~]# echo "10.11.4.156" > /etc/mesos-master/hostname

#marathon配置hostname;
#其余兩個節點也配置本機地址即可
[root@master-node1 ~]# echo "10.11.4.156" > /etc/marathon/conf/hostname

#修改hosts
[root@master-node1 ~]# echo "10.11.4.156 master-node1" >> /etc/hosts

6)開機啟動

[root@master-node1 ~]# systemctl enable mesos-master marathon
[root@master-node1 ~]# systemctl disable mesos-slave
[root@master-node1 ~]# systemctl start mesos-master marathon

3. 設置iptables

# tcp2181,2888,3888與zookeeper相關;
# tcp5050是mesos-master的訪問端口;tcp5051是mesos-slave的訪問端口;
# tcp8080是marathon的訪問端口。
[root@master-node1 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2181 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2888 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3888 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5050 -j ACCEPT
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 5051 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

[root@master-node1 ~]# service iptables restart

三.Slave節點

以slave-node1為例,slave-node2/node3配置根據環境微調。

1. docker安裝配置

[root@slave-node1 ~]# yum remove docker docker-common docker-selinux docker-engine

#鏡像驅動使用device-mapper
[root@slave-node1 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

#添加repository
[root@slave-node1 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[root@slave-node1 ~]# yum makecache fast

[root@slave-node1 ~]# yum install docker-ce -y

#配置mirror
[root@slave-node1 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://xxxxxxxx.m.daocloud.io

#安裝brctl,方便查看bridge 
[root@slave-node1 ~]# yum install bridge-utils-1.5-9.el7.x86_64 -y

#開機啟動
[root@slave-node1 ~]# systemctl enable docker
[root@slave-node1 ~]# systemctl start docker

2. mesos-slave安裝配置

1)安裝mesos-slave

[root@slave-node1 ~]# cd /usr/local/src/
[root@slave-node1 src]# wget http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-3.noarch.rpm
[root@slave-node1 src]# rpm -ivh mesosphere-el-repo-7-3.noarch.rpm
[root@slave-node1 src]# yum install mesos -y

2)mesos-slave關聯zookeeper

[root@slave-node1 src]# cd ~

#完全替換默認配置
[root@slave-node1 ~]# vim /etc/mesos/zk
zk://10.11.4.156:2181,10.11.4.157:2181,10.11.4.158:2181/mesos

3)配置marathon調用mesos運行docker

[root@slave-node1 src]# cd ~
[root@slave-node1 ~]# echo "docker,mesos" > /etc/mesos-slave/containerizers

4)mesos-slave配置ip&hostname

#其余兩個節點也配置本機地址即可
[root@slave-node1 ~]# echo "10.11.4.146" > /etc/mesos-slave/ip
[root@slave-node1 ~]# echo "10.11.4.146" > /etc/mesos-slave/hostname

#修改hosts
[root@master-node1 ~]# echo "10.11.4.146 slave-node1" >> /etc/hosts

5)開機啟動

[root@slave-node1 ~]# systemctl enable mesos-slave
[root@slave-node1 ~]# systemctl disable mesos-master
[root@slave-node1 ~]# systemctl start mesos-slave

3. 設置iptables

# tcp5051是mesos-slave的訪問端口。
[root@slave-node1 ~]# vim /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5051 -j ACCEPT

[root@slave-node1 ~]# service iptables restart

# iptabes重啟后重新加載配置文件中的配置,默認配置中沒有docker0網橋的nat表規則;
#重啟docker將相關規則加載到iptables中,再保存規則到配置文件中;
#如果iptables中沒有docker0網橋的nat表規則,在創建帶有端口映射的容器時,會報錯:"ExitCode": 128,iptables相關規則不能創建
[root@slave-node1 ~]# systemctl restart docker
[root@slave-node1 ~]# service iptables save

四.驗證

1. mesos

登陸mesos web:http://10.11.4.156:5050

#登陸10.11.4.157/158都可以,通過zookeeper選主,登陸任一地址都會跳轉到leader頁面。

1)mesos-homepage

  • (1). 從首頁可以看到mesos-master的leader是:10.11.4.157;
  • (2). mesos-agent:activated狀態的agent有3個;
  • (3). mesos-master管理的3個agent的資源已匯總。

2)mesos-Frameworks

  • (1). 在mesos框架中,marathon框架已經被識別,marathon的leader是:10.11.4.157;
  • (2). 雖然mesos-master與marathon的leader相同,但兩者的leader是zookeeper獨立選舉的,並沒有直接關系,是可以不同的。

3)mesos-Agents

  • (1). 在Agnets中能看到3個agent;
  • (2). 同時能看到每個agent的資源;

  • (3). 點擊任一agent id,能看到更詳細的agent信息。

4)mesos state

瀏覽器訪問:http://10.11.4.158:5050/master/state

2. marathon

登陸marathon web:http://10.11.4.156:8080

#或者點擊mesos-frameworks頁面中,已經選舉出的marathon leader;

#登陸10.11.4.157/158都可以,通過zookeeper選主,登陸任一地址都會跳轉到leader頁面。

1)marathon-homepage

  • (1). 在首頁中點擊右上角問號,選擇"About";

  • (2). marathon-leader:10.11.4.157:8080;
  • (3). marathon連接到mesos leader:10.11.4.157:5050。

3. marathon下發應用

1)API方式

#marathon是有api接口的,通過api的方式可調用marathon執行相關應用調度的請求
#在marathon服務所在節點創建json文件;
#以下json文件中的注釋需去掉。
[root@master-node1 ~]# vim nginx.json
{
  "id":"nginx1",                                 #容器名,只在marathon生效
  "cpus":0.2,                                    #cpu用量
  "mem":20.0,                                    #mem用量
  "instances": 1,                                #容器數量
  "constraints": [["hostname", "UNIQUE",""]],    #限制
  "container": {
  "type":"DOCKER",                               #應用類型
  "docker": {                                    #docker具體配置
     "image": "nginx",                           #采用的image
     "network": "BRIDGE",                        #網絡模式
     "portMappings": [
        {"containerPort": 80, "hostPort": 0,"servicePort": 0, "protocol": "tcp" }
      ]                                          #端口映射,”0”表示任意端口,"servicePort"服務端口
    }
  }
}

#調用json文件
[root@master-node1 ~]# curl -X POST http://10.11.4.156:8080/v2/apps -d @/root/nginx.json -H "Content-type: application/json" 
  • (1). 登陸marathon,查看應用已下發成功,處於"Running"狀態;容器的資源配置遵從json文件中的設置;針對應用,點擊最右側的"…"按鈕,可進行相關操作;

  • (2). 點擊應用名或狀態,查看應用具體信息,可查到此應用下發到slave節點:10.11.4.147,且映射主機的31896端口;同時可查看"stderr"與"stdout"日志等(也可到mesos任務的"Sandbox"中查看下載);

  • (3). Configuration標簽下,列出了生成的容器的相關配置,除json文件預設置的參數外,還有json文件中定義的"任意值"也有了明確的配置;同時可以"Edit";

  • (4). 在slave節點:10.11.4.147下查看容器;
    [root@slave-node2 ~]# docker ps

  • (6). 登陸mesos,"Active Tasks"有處於運行狀態的任務。

2)通過marathon web頁面手工創建

  • (1). 點擊marathon首頁右上角的"Create Application",選擇"JSON Mode",粘帖相關json配置,實質上這也是在調用marathon的api接口,只是入口變為web頁面;

  • (2). 取消"JSON Mode",可以看到粘帖的json配置已經被記錄下來;也可以直接在非"JSON Mode"填寫相關配置。

 


免責聲明!

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



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