内容简介:从零开始搭建基于 Mesos 的私有容器平台
【云计算尖子班】 技术分享
分享时间:2017.04.06
分享人:崔广章
主题:《从零开始搭建基于Mesos的私有容器平台》
一.目的
本实验的目的是在一台vmware虚拟机上搭建一套私有的容器云平台,由于只有1台虚拟机,因此这个环境只是一个实验环境,如果想在测试或者测试环境使用,需要扩容和调整容器平台的各个组件。
容器云架构为 zookeeper+mesos+marathon+docker+haproxy
。看完这篇文章之后,您会发现在一台虚拟上做集群实验是如此的简单。
给我一台虚拟机, 我能把你公司全部架构给你模拟出来.:):):):)
二.基于Mesos的容器云架构图
2.1 组件说明
-
Mesos
包括Mesos-master和Mesos-slave,Mesos-master管理Mesos-slave上报的资源信息,并将相应资源分配给运行Mesos-master之上的应用编排框架(比如Marathon)。Mesos-slave负责管理所在节点运行的容器和资源信息,上报给Mesos-master。
-
Marathon
应用编排框架,管理应用的配置,扩缩容和高可用。
-
Zookeeper
负责Marathon集群和Mesos-master集群的高可用。
-
HAProxy
负责云平台上运行应用的访问流量的负载均衡。
-
ETCD(实验中未使用)
存储云平台上运行的应用的配置信息。
-
CONFD(实验中未使用)
从ETCD中取出应用的配置信息,生成HAProxy配置文件并重新加载HAProxy。
注意:ETCD+CONFD主要用来做服务发现,但在实验中没用这一块。
三.实验环境
vmware虚拟机一台,虚拟机IP为 192.168.5.21
docker版本 1.12
及以上
容器的ip地址分配如下:
四.创建 docker 网络
docker network create --driver bridge --subnet 172.18.1.0/24 --gateway 172.18.1.254 zookeeper
五.配置平台组件
5.1 zookeeper
docker pull mesoscloud/zookeeper:3.4.8-centos-7docker run -d --restart always --name zk1 --network zookeeper --ip 172.18.1.1 -e MYID=1 -e SERVERS=172.18.1.1,172.18.1.2,172.18.1.3 mesoscloud/zookeeper:3.4.8-centos-7docker run -d --restart always --name zk2 --network zookeeper --ip 172.18.1.2 -e MYID=2 -e SERVERS=172.18.1.1,172.18.1.2,172.18.1.3 mesoscloud/zookeeper:3.4.8-centos-7docker run -d --restart always --name zk3 --network zookeeper --ip 172.18.1.3 -e MYID=3 -e SERVERS=172.18.1.1,172.18.1.2,172.18.1.3 mesoscloud/zookeeper:3.4.8-centos-7
5.2 mesos_master zk节点:/mesos/my_mesos
docker pull mesoscloud/mesos-master:0.28.1-centos-7
docker run -d --restart always --name master1 --network zookeeper --ip 172.18.1.4 \-e MESOS_HOSTNAME=172.18.1.4 \-e MESOS_IP=172.18.1.4 \-e MESOS_QUORUM=2 \-e MESOS_ZK=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/mesos/my_mesos \ mesoscloud/mesos-master:0.28.1-centos-7docker run -d --restart always --name master2 --network zookeeper --ip 172.18.1.5 \-e MESOS_HOSTNAME=172.18.1.5 \-e MESOS_IP=172.18.1.5 \-e MESOS_QUORUM=2 \-e MESOS_ZK=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/mesos/my_mesos \ mesoscloud/mesos-master:0.28.1-centos-7docker run -d --restart always --name master3 --network zookeeper --ip 172.18.1.6 \-e MESOS_HOSTNAME=172.18.1.6 \-e MESOS_IP=172.18.1.6 \-e MESOS_QUORUM=2 \-e MESOS_ZK=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/mesos/my_mesos \ mesoscloud/mesos-master:0.28.1-centos-7
5.3 marathon zk节点:/marathon/my_marathon
docker pull mesoscloud/marathon:1.1.1-centos-7
docker run -d --restart always --name marathon1 --network zookeeper --ip 172.18.1.7 \-e MARATHON_HOSTNAME=172.18.1.7 \-e MARATHON_HTTPS_ADDRESS=172.18.1.7 \-e MARATHON_HTTP_ADDRESS=172.18.1.7 \-e MARATHON_MASTER=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/mesos/my_mesos \-e MARATHON_ZK=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/marathon/my_marathon \ mesoscloud/marathon:1.1.1-centos-7docker run -d --restart always --name marathon2 --network zookeeper --ip 172.18.1.8 \-e MARATHON_HOSTNAME=172.18.1.8 \-e MARATHON_HTTPS_ADDRESS=172.18.1.8 \-e MARATHON_HTTP_ADDRESS=172.18.1.8 \-e MARATHON_MASTER=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/mesos/my_mesos \-e MARATHON_ZK=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/marathon/my_marathon \ mesoscloud/marathon:1.1.1-centos-7
5.4 haproxy
docker pull haproxy:1.6
docker run -d --restart always -p 5050:5050 --name mesos_proxy --network zookeeper --ip 172.18.1.9 \ -v /usr/etc/haproxy/haproxy3.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:1.6docker run -d --restart always -p 8080:8080 --name marathon_proxy --network zookeeper --ip 172.18.1.10 \ -v /usr/etc/haproxy/haproxy4.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:1.6 docker run -d --restart always -p 2181:2181 --name zk_proxy --network zookeeper --ip 172.18.1.11 \ -v /usr/etc/haproxy/haproxy2.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:1.6
5.5 mesos_slave
docker pull mesoscloud/mesos-slave:0.28.1-centos-7
docker run -d --restart always --name slave1 --privileged --network zookeeper --ip 172.18.1.12 \-e MESOS_HOSTNAME=172.18.1.12 \-e MESOS_IP=172.18.1.12 \-e MESOS_MASTER=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/mesos/my_mesos \ -v /sys/fs/cgroup:/sys/fs/cgroup \ -v /var/run/docker.sock:/var/run/docker.sock \ mesoscloud/mesos-slave:0.28.1-centos-7docker run -d --restart always --name slave2 --privileged --network zookeeper --ip 172.18.1.13 \-e MESOS_HOSTNAME=172.18.1.13 \-e MESOS_IP=172.18.1.13 \-e MESOS_MASTER=zk://172.18.1.1:2181,172.18.1.2:2181,172.18.1.3:2181/mesos/my_mesos \ -v /sys/fs/cgroup:/sys/fs/cgroup \ -v /var/run/docker.sock:/var/run/docker.sock \ mesoscloud/mesos-slave:0.28.1-centos-7
六.测试
以下测试不全面, 只提供参考
6.1 测试zookeeper
-
进去每个容器内, 使用echo stat|nc ip:2181获取zookeeper状态信息, 都有正确的信息返回, 说明集群正常
-
在vmware内使用zookeeper的客户端访问zk_proxy, 比如用./zkCli.sh -verser 192.168.5.21:2181连接zookeeper, 连接之后能正常操作命令表明一切正常. 命令无法操作表明zookeeper有2个或者全部down了. 命令操作有一定概率卡顿表明zookeeper有一个down了.
6.2 测试mesos
-
进入每个容器内, 使用cul http://ip:5050命令, 都有网页信息返回, 说明集群正常
-
mesos_proxy中的haproxy.cfg文件配置中的服务,只能是mesos集群中的leader. 然后在windows上用浏览器访问192.168.5.21:5050, 有mesos界面出来表明代理正常
6.3 测试marathon
-
进入每个容器内, 使用cul http://ip:8080命令, 都有网页信息返回, 说明集群正常
-
在windows上用浏览器访问192.168.5.21:8080, 有marathon界面出来表明代理正常
6.4 应用发布
七.故障排查
-
外网访问mesos的代理不通
理论上轮询访问后端服务是没有问题的, 但是master有自己的leader, 只将master中的leader提供用户访问。解决方法: (1)做个服务发现,调用master接口以便获取到leader的ip和port,然后配置到haproxy的配置文件中; (2)手动将leader的ip和port配置到haproxy中.
-
主机与容器的网络不通
创建docke网络和容器之后,发现主机与容器的网络不通,从返回的信息来看,是我创建的网络网关172.18.1.254到容器ip不通.删除网络重新创建,问题依旧.再次删除网络,使用ip addr发现以前的网桥还在,可是docker network ls查看已经不存在了.没办法重启主机试试看,重启之后恢复正常.
-
slave容器起不起来
有个库文件不存在,从其他主机上拷贝过来就ok了
-
marathon启动的应用,健康检查不通过
marathon健康检查检测的是 主机名+端口,其中主机名就是slave向marathon注册的MESOS_HOSTNAME参数,端口是docker代理的端口,因此这里marathon检查的是(172.18.1.12:端口).
实际上slave调用主机docke.sock启动容器时,做docker代理是用的主机ip,而主机的ip是192.168.5.21,因此正确的代理是(192.168.5.21:端口).明显与marathon检测的不一样,将slave里的MESOS_HOSTNAME参数改成主机ip地址192.168.5.21,就ok了.
以上所述就是小编给大家介绍的《从零开始搭建基于 Mesos 的私有容器平台》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图片转BASE64编码
在线图片转Base64编码工具
SHA 加密
SHA 加密工具