• 基于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"填写相关配置。

     

  • 相关阅读:
    windows2008下载
    js代码格式化
    javascript小实例【第二课时笔记】
    学习CSS的一些有效资源
    javascript小实例【第一课时笔记】
    关于HTML5的一些基础知识
    javascript小实例【第三课时笔记】
    c#缓存介绍(转)
    [C#] String与string的区别
    Asp.Net Cache缓存使用代码
  • 原文地址:https://www.cnblogs.com/netonline/p/7978844.html
Copyright © 2020-2023  润新知