Docker 服务编排 Mesos Swarm Kubernetes 三种模式实践

提起Docker容器化 不得不提服务编排,众所周知目前Docker常用的服务编排模式有三种, Mesos DockerSwarm Kubernetes,下面将详细介绍这三种服务编排模式的架构和环境搭建。

一. Mesos

1.Mesos架构图

下图是在Mesos官网上对mesos架构的介绍

即使不看下面的英文描述,从这张图上我们也看看出Mesos的整体架构,主体为主从结构master/slave或者master/agent模式,对master节点来说为了避免单点,引入了多个master,多个master向Zookeeper注册自己,用zk实现选举。master节点运行一些任务调度器(scheduler),agent节点运行任务执行器(executor),一个agent节点可以运行多个执行器,有执行器来执行具体任务(task)。

2.Mesos任务执行调度过程

任务调度如下图:

从图中可以看出,这个调度分为四个过程:

1.Mesos Agent将自己所在机器(物理机,虚拟机,容器)的资源信息(可用的处理器,内存,磁盘等资源)上报给Mesos Master的资源分配组件(Allocation Module)。

2.master节点向framework发送资源邀约(resource offer),通知framework在agent上可用的资源信息。

3.框架调度程序(FW Scheduler)把需要在agent上运行的两个任务的信息发给master。

4.master将任务发送给agent,agent将需要的资源分配给执行器(Executor),执行器一次启动两个任务(task)。

当agent节点任务运行结束或者资源空闲时将循环此流程。

3.Mesos层级架构

下面的图将Mesos和Linux操作系统做了对比,很好说明了Mesos设计模式和Mesos和Framework 及Task之间的关系。

Mesos相对于Linux,BSD系统的内核,Framework相当于Linux的系统服务或者外壳,二者都是在此之上运行具体的任务。不同之处在于Mesos调度的是多台机器。

4.Mesos上手实践

以最简单的多结点服务为例,我有一个基于SpringBoot的已经打好Docker镜像的web服务,目前的需求是我们需要把这个服务部署在三个节点防止单点故障,并且以后随着环境的变化(用户访问量的增加/减少,容灾灾备等)我们还要对这个服务随时进行扩缩容。针对当前的需求分析后设计如下基于Apache Mesos的部署架构图。

简单介绍一下,再生产中我们的Mesos Framework选用Marathon,Marathon是一个中间层的生产级容器编排平台,可以运行在数据中心操作系统(DC / OS)和Apache Mesos上。具体资料可以从官方Github地址获取:http://mesosphere.github.io/marathon。使用Marathon lb实现自动负载均衡。

首先有三台机器分别为 server01 server02 server03,将server01作为Mesos master节点,server02 和 server03 作为slave节点,由于个人测试机器有限所以Zookeeper和Marathon Marathon lb 都部署在server01上,生产环境强烈建议部署独立的Zookeeper集群,Marathon也脱离Mesos独立部署。

4.1 Mesos 安装

Mesos安装方式有好几种,源码编译安装,二进制包安装,使用Docker镜像来运行Mesos。

前两种安装方式介绍在Mesos官网Getting Started 就可以找到,http://mesos.apache.org/getting-started,参考文档很容易就可以装好,我们介绍第三张基于Docker的安装方式,减少对容器环境的依赖,也方便管理。

如果不了解MesosDocker镜像的话,我们可以先去看看DockerHub上有没有已经做好的镜像,https://hub.docker.com,搜索mesos,可以看到已经有mesosphere为我们打好的镜像,mesosphere为dockerHub贡献的很多非常实用的镜像。

找到需要的镜像

点击去看看它的一些描述信息,ReadMe and Dockerfiles: https://github.com/mesosphere/docker-containers/tree/master/mesos

据此我们大致知道如何来运行master个slave的镜像,可以选择一个镜像版本,我就选择1.6.2了。

接下来开始安装,登录到master机器(server01),执行 docker version 确认docker安装信息。

关于安装并启动Zookeeper,参考我这篇文章,zookeeper 安装

新建一个放置启动脚本的路径,创建启动脚本。

mkdir -p /data/mesos
cd /data/mesos
vim mesos-master.sh

对之前提供的启动命令进行调整,修改zk地址,指定net模式,修改挂载日志和临时文件路径,指定镜像版本,关闭host查询,指定hostname,具体如下(IP为虚拟):

#!/bin/bash
docker run -d --net=host \
  --hostname=36.107.107.175 \
  -e MESOS_PORT=5050 \
  -e MESOS_ZK=zk://127.0.0.1:2181/mesos \
  -e MESOS_QUORUM=1 \
  -e MESOS_REGISTRY=in_memory \
  -e MESOS_LOG_DIR=/var/log/mesos \
  -e MESOS_WORK_DIR=/var/tmp/mesos \
  -v "/data/mesos/log/mesos:/var/log/mesos" \
  -v "/data/mesos/tmp/mesos:/var/tmp/mesos" \
  mesosphere/mesos-master:1.6.2 --no-hostname_lookup --hostname=mesos.mrpei.cn

确认已启动Zookeeper后,执行如下脚本即可启动Mesos master

sh mesos-master.sh

查看容器信息

docker ps

如果启动失败,可以执行

docker logs [container id]

查看日志,定位问题。

类似的 在slave机器上也执行以上操作,下面给出slave的启动脚本:

#!/bin/bash
docker run -d --net=host --privileged \
  --hostname=36.107.107.180 \
  -e MESOS_PORT=5051 \
  -e MESOS_MASTER=zk://36.107.107.175:2181/mesos \
  -e MESOS_SWITCH_USER=0 \
  -e MESOS_CONTAINERIZERS=docker,mesos \
  -e MESOS_LOG_DIR=/var/log/mesos \
  -e MESOS_WORK_DIR=/var/tmp/mesos \
  -v "$(pwd)/log/mesos:/var/log/mesos" \
  -v "$(pwd)/tmp/mesos:/var/tmp/mesos" \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /sys:/sys \
  -v /usr/bin/docker:/usr/local/bin/docker \
  mesosphere/mesos-slave:1.6.2 --no-systemd_enable_support

都启动以后可以访问master的5050端口,可以看到Mesos的基本信息面板。

agent信息

4.2 Marathon 和 Marathon lb安装

有了上面的经验,我们对这两个组件也采用运行docker容器的方式来启动。DockerHub查看Marathon 和 Marathon lb的镜像。其实mesosphere已经为我们准备好了,我们去看看这两个镜像的描述信息。

对于Marathon可以看到如下信息:

我们可以根据提供的信息编写一个启动脚本:

#!/bin/bash
docker run -d --net=host \
 mesosphere/marathon:v1.5.15 \
 --master zk://36.107.107.175:2181/mesos \
 --zk zk://36.107.107.175:2181/marathon

启动Marathon:

sh marathon.sh

Marathon lb镜像信息如下:

编写启动脚本如下:

#!/bin/bash
docker run -d -p 8090:9090 \
 -e PORTS=8090 mesosphere/marathon-lb:v1.13.0 sse --group external --marathon http://36.107.107.175:8080

启动Marathon lb:

sh marathon-lb.sh

查看镜像启动情况:

访问8090查看Marathon UI

4.3 部署web服务

Marathon UI里 点击create application 填写id 需要的资源 和 镜像地址,端口映射信息,由于之前我已经把镜像打好推到了dockerHub,所以直接填写镜像pull的地址即可。点击create即可。

关于镜像仓库:标准企业生产环境是有自己的私有镜像仓库的,用的比较多的是 Vmware 开源的 Harbor,我之前在一台机器上起着Harbor来着,由于机器资源有限,并且三台机器并不是一家云服务供应商,1M带宽下 镜像 push pull 都很慢,所以在这里就没有引入Docker 私有仓库的问题。如果要使用私有仓库,可以直接在三台机器上分别执行 docker login 登录到私服就可以了。

二. Swarm

 

转载于:https://my.oschina.net/mrpei123/blog/3044002

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值