在UHost上安装使用Mesos+Marathon

本篇介绍如何利用云知芯的云主机搭建Mesos+Marathon集群,用户可根据业务需要,灵活搭建单master和多master的集群。

单master部署

单master模式一般用于小型开发测试环境,或者用于体验mesos+marathon 的基本功能。

单master可以直接使用部署脚本mesos-deploy.tar.gz来部署,此脚本全部使用docker container来运行mesos所有组件:mesos-master, zookeeper, marathon, meoss-slave.

需要的版本信息如下:

Mesos-master,mesos-slave:1.1.0

Marathon:1.3.6

Zookeeper:3.4.9

环境准备

最基本的拓扑环境,为一台绑定了外网IP的UHost

(1)创建一台UHost,并绑定EIP

网络配置信息为,内网IP:10.9.116.105,外网IP:106.75.6.148

主机配置信息为,OS:CentOS 7.2 64位,kernel版本: 3.10.0-327.22.2.el7.x86_64

image

(2)配置防火墙

外网防火墙需要开启ssh,mesos-master和marathon端口,以及在marathon上跑的应用app的端口(假设为8100端口)

具体端口信息如下:ssh:22,mesos-master:5050,marathon:8080,app:8100

image

Docker安装

本文安装的docker版本为1.12.5

添加docker的yum源

本文使用的是官方yum源,在配置文件中添加docker yum源文件:

/etc/yum.repos.d/docker-main.repo

[docker-main-repo]
name=Docker main Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
查看可用docker-engine版本

使用如下命令查看版本信息:

yum provides docker-engine

结果如下: image

安装docker

使用如下命令安装,版本为1.12.5:

yum install -y docker-engine-1.12.5-1.el7.centos.x86_64

查看版本:

docker –v

image

可以修改部分docker参数:

##修改docker的启动参数
##docker service定义文件为/usr/lib/systemd/system/docker.service
##此处不做改动,直接启动docker服务
service docker start 
docker ps

实例结果如图: image

Docker-compose安装

本文安装的docker-compose版本为1.8

下载安装包并执行:

curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

安装结果如图: image

使用脚本部署mesos + marathon

可以通过 链接下载安装包mesos-deploy.tar.gz,并修改配置:

tar xf mesos-deploy.tar.gz
cd mesos-deploy
##根据你机器的IP修改env文件中的变量:
DEPLOY_MESOS_MASTER_IP(内网IP)
DEPLOY_MESOS_SLAVE_IP(内网IP)
DEPLOY_HOST_PUBLIC_IP(公网IP)
DEPLOY_MESOS_MASTER_PORT=5050 (master端口)
DEPLOY_MESOS_SLAVE_PORT=5051 (slave端口)
DEPLOY_MARATHON_PORT=8080 (marathon端口)

执行部署命令,部署mesos+marathon:

source ./env && docker-compose -p undefined up –d
#此过程会下载mesos,marathon,zookeeper镜像

结果如图: image

添加slave节点

Slave节点的部署步骤与前面Master的步骤一致,但是执行部署的命令有不同。

(1)创建的UHost,并绑定外网,信息如下:

内网IP 10.9.129.84,公网IP:106.75.64.95 image

(2)配置Slave节点信息,并部署节点:

需要配置master,slave的IP与端口:
DEPLOY_MESOS_MASTER_IP(master内网IP)
DEPLOY_MESOS_SLAVE_IP(内网IP)
DEPLOY_HOST_PUBLIC_IP(slave公网IP)
DEPLOY_MESOS_MASTER_PORT=5050 (master端口)
DEPLOY_MESOS_SLAVE_PORT=5051 (slave端口)
source ./env && docker-compose -p undefined up -d mesosslave
#此过程会下载mesos-slave镜像

image

结果如图: image

(3)在master UI上查询agent信息,可以看到Slave节点: image

使用marathon运行一个task

查看mesos 和 marathon信息

通过UI界面,可以查询Mesos和Marathon集群的详细信息。示例地址如下:

Mesos-master:http://106.75.6.148:5050

Marathon:http://106.75.6.148:8080

查询结果如图: image image image

运行一个nginx服务

利用UI界面,创建一个新服务,例如Nginx。首先定义CPU和内存配置。 image

网络配置为默认的bridge模式,可以直接使用slave的公网IP进行访问。 image

定义服务端口信息,如TCP 80端口。 image

最后点击“创建”按钮。 image

从UI界面,可看到正在拉取nginx镜像,应用在创建中。 image

创建完成,可以看到UI列表的更新。 image

点击具体服务,可以查看服务的详情信息,如下图: image

外网访问该nginx的服务,需要该机器外网防火墙开启对应端口: image

伸缩nginx的实例个数

编辑应用信息,可以修改服务的实例个数,点击“确定”,完成伸缩。 image

在UI界面,可观察到服务已伸缩至8个实例。 image

多master部署

以3个master节点为例,先需要申请3台带EIP的UHost主机。 image

组件及拓扑

(1)规划集群陪着和部署节点

部署节点:10.9.116.105,Cluster信息如下: image

(2)配置防火墙

外网防火墙需要开启ssh,mesos-master和marathon端口,以及在marathon上跑的应用app的端口(假设为8100端口)

具体端口信息如下:ssh:22,mesos-master:5050,marathon:8080,app:8100 image

部署脚本介绍

可以通过 链接下载部署包mesos-cluster.tar.gz快速搭建集群。 image

部署包中主要由脚本deploy.sh和umesos-deploy,umesos-slave组成,deploy.sh是部署脚本,umesos-deploy是master集群部署文件,umesos-slave是slave节点部署文件。

Master集群节点组件全部采用容器方式部署,部署过程中会下载官方镜像(UHost需要配置外网IP)。Slave节点采用yum方式部署。部署过程会升级内核至4.1.0-13.el7.ucloud.x86_64,并重新启动,有效避免一些docker的bug。

此部署脚本根据使用经验调整了一些参数,可以满足大部分的生产环境使用,并且可以分区域(azone)分节点(owner)部署多集群(cluster)。后续添加slave节点也十分方便。 此部署脚本适用centos6,centos7.

部署步骤

创建节点并配置key

a. 创建UHost并分配IP

创建流程参考上文单master章节部分

b. 下载解压部署包

下载部署包。部署需要用到pssh程序,将此程序拷贝到系统PATH中,比如:

tar xf mesos-cluster.tar.gz
cd umesos-cluster
cp pssh /usr/bin

c. 配置key

使用ssh-copy-id将部署节点key加入集群节点,后续可以无密码登陆

#如果没有生成key,使用ssh-keygen生成key。
ssh-copy-id -i root@10.9.116.242
ssh-copy-id -i root@10.9.111.248 
ssh-copy-id -i root@10.9.135.146 

image

登录示例如图: image image

用脚本添加集群信息

修改deploy.sh脚本,添加集群信息。 image

脚本各参数说明如下:

azone 是集群位置,比如bj集群;
cluster是内网IP;
clusterPublic是公网IP。此示例是3个节点集群,如果要建多节点(比如5)集群,需要添加ip信息,并修改quorum值。
Marathon_aut,可以设定marathon的用户名及密码,用冒号隔开。

可以通过deploy.sh –list 查看所有集群信息。

./deploy.sh --list 

image

部署master节点

a. 集群部署

确认信息无误后,直接运行./deploy.sh –azone=bj来部署bj集群。此过程会消耗一定时间,要保持网络畅通,若网络断开失败,可重新执行部署命令。

./deploy.sh –azone=bj	//bj为需部署的集群简称

部署完成后,通过deploy.sh –list 查看所有集群信息,如下图: image

注:第一次部署时,可能会有网络问题导致部署失败,或者各节点拉取镜像速度不一致,导致master集群创建不成功;此时可以再次使用相同命令重新部署一次;或者找到失败节点,重启,直至都加入mesos集群中。

b. 集群确认

安装成功之后,可以通过访问mesos和marathon的UI来确认是否集群工作。

UI访问地址如下:

Mesos-master:106.75.25.230:5050,106.75.64.31:5050,106.75.4.181:5050

image image

Marathon: 106.75.25.230:8080,106.75.64.31:8080,106.75.4.181:8080

image

默认用户名/密码:umesos/umesos

部署slave节点

添加Slave节点:

--azone指定slave添加到哪个集群,-s指定内网IP,-p指定外网IP
./deploy.sh -m slave --azone=bj -s 10.9.116.242 -p 106.75.13.243
./deploy.sh -m slave --azone=bj -s 10.9.111.248 -p 106.75.64.31
./deploy.sh -m slave --azone=bj -s 10.9.135.146 -p 106.75.4.181

image

Mesos-master UI可以看到成功注册到master中的slave节点。

image

使用marathon运行task

仍以运行nginx服务为例,使用方法请参考单master章节。