从零开始搭建基于 Mesos 的私有容器平台

栏目: 服务器 · 发布时间: 6年前

内容简介:从零开始搭建基于 Mesos 的私有容器平台

【云计算尖子班】 技术分享

分享时间:2017.04.06

分享人:崔广章

主题:《从零开始搭建基于Mesos的私有容器平台》

一.目的

本实验的目的是在一台vmware虚拟机上搭建一套私有的容器云平台,由于只有1台虚拟机,因此这个环境只是一个实验环境,如果想在测试或者测试环境使用,需要扩容和调整容器平台的各个组件。

容器云架构为 zookeeper+mesos+marathon+docker+haproxy 。看完这篇文章之后,您会发现在一台虚拟上做集群实验是如此的简单。

给我一台虚拟机, 我能把你公司全部架构给你模拟出来.:):):):)

二.基于Mesos的容器云架构图

从零开始搭建基于 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地址分配如下:

从零开始搭建基于 Mesos 的私有容器平台

四.创建 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 的私有容器平台

七.故障排查

  • 外网访问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 的私有容器平台》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Defensive Design for the Web

Defensive Design for the Web

37signals、Matthew Linderman、Jason Fried / New Riders / 2004-3-2 / GBP 18.99

Let's admit it: Things will go wrong online. No matter how carefully you design a site, no matter how much testing you do, customers still encounter problems. So how do you handle these inevitable bre......一起来看看 《Defensive Design for the Web》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器