一.Mesos/marathon
Mesos容器编排工具,有master和slave节点。
二级调度。
marathon框架。
二.使用容器搭建mesos/marathon
将Spring boot项目docker化之后,准备使用Mesos来编排管理。
可惜革命尚未成功,先行记录如何部署的环境。
(marathon部署spring boot应用(docker镜像)总是重新部署,报错信息如下,待解决。已测试镜像使用docker可以启动)
I0821 09:09:59.345898 285 exec.cpp:162] Version: 1.6.2
I0821 09:09:59.354513 293 exec.cpp:236] Executor registered on agent 661c1f88-71ce-4c84-a5cc-e615bc02cf0d-S0
I0821 09:09:59.355615 291 executor.cpp:123] Registered docker executor on 192.168.0.241
I0821 09:09:59.356647 289 executor.cpp:179] Starting task messages-service.instance-7009f2a3-c3f3-11e9-99fa-02427fb14d49._app.1
W0821 09:11:00.587472 288 executor.cpp:650] The container process (pid: 16779) has exited, but Docker daemon failed to catch it.
I0821 09:11:00.588026 288 executor.cpp:729] Failed to get exit status of container
W0821 09:11:00.588026 285 logging.cpp:95] RAW: Received signal SIGTERM from process 1 of user 0; exiting
下面是部署Mesos和marathon的流程。
1.环境配置及安装的相应组件:
1台 ubuntu16.04 (8GB+40GB)主机 ,IP192.168.0.241, 安装Zookeeper+mesos(master+slave)+harbor组件
提示:安装harbor详见https://blog.csdn.net/weixin_42146764/article/details/99760586,可以不用安装harbor,但我需要用私库;docker安装zookeeper,使用下面命令:
docker run --name zookeeper -p 2181:2181 --restart always -d zookeeper
1台 CentosOS7(8GB+40GB)主机 ,IP192.168.0.245,安装marathon
1台 Windows(12GB+250GB)主机 ,IP192.168.0.240,使用docker toolbox 安装了docker,IP192.168.99.100,默认账户docker(密码tcuser),安装marathon-lb组件
三台主机处于局域网内。
2.下载镜像,编写各个组件启动脚本和启动验证:
到docker hub,搜索mesos-master,mesos-slave,marathon,marathon-lb获取各个组件的版本信息和启动方式,在相应的主机上拉取相应的组件。
下载镜像命令分别为:
docker pull mesosphere/mesos-master:1.6.2
docker pull mesosphere/mesos-slave:1.6.2
docker pull mesosphere/marathon: v1.9.34
docker pull mesosphere/marathon-lb: v1.14.0
按上述顺序编写组件启动脚本、启动和验证:
(1)Mesos-master(IP:192.168.0.241)
mkdir mesos
cd mesos
vi start-mesos-master.sh
内容:
#!/bin/bash
docker run -d --net=host \
--hostname 192.168.0.241 \
-e MESOS_PORT=5050 \
-e MESOS_ZK=zk://192.168.0.241: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 \
-e MESOS_EXECUTOR_REGISTRATION_TIMEOUT=10mins \
-v "$(pwd)/log/mesos:/var/log/mesos" \
-v "$(pwd)/work/mesos:/var/tmp/mesos" \
192.168.0.241:80/micro-service/mesosphere/mesos-master:1.6.2 \
--no-hostname_lookup --ip=192.168.0.241
启动:
执行
sh start-mesos-master.sh
验证:
打开浏览器输入http://192.168.0.241:5050,出现UI界面,表明成功
(2)Mesos-slave(IP:192.168.0.241)
vi start-mesos-slave.sh
内容:
docker run -d --net=host --privileged \
--hostname 192.168.0.241 \
-e MESOS_PORT=5051 \
-e MESOS_MASTER=zk://192.168.0.241: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)/work/mesos:/var/tmp/mesos" \
-v /sys:/sys \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/local/bin/docker \
192.168.0.241:80/micro-service/mesosphere/mesos-slave:1.6.2 --no-systemd_enable_support \
--no-hostname_lookup --ip=192.168.0.241
启动:
执行
sh start-mesos-slave.sh
验证:
打开浏览器输入http://192.168.0.241:5050,点击Agents
(3)Marathon (IP:192.168.0.245)
mkdir marathon
cd marathon
vi start-marathon.sh
内容:
#!/bin/bash
docker run -d --net=host \
192.168.0.241:80/micro-service/mesosphere/marathon:v1.9.34 \
--master zk://192.168.0.241:2181/mesos \
--zk zk://192.168.0.241:2181/marathon \
--task_launch_timeout=600000
启动:
执行
sh start-marathon.sh
验证:
打开浏览器输入http://192.168.0.245:8080
创建Mesos应用测试是否可以运行:
点击CreateApplication,输入以下内容,再直接点击create Application.成功会出现一个名为test的应用处于running状态,可以点击这个应用进去找到stdout查看结果
(4)Marathon-lb:(IP:192.16899.100)
mkdir marathon
cd marathon
vi start-marathon-lb.sh
内容:
#!/bin/bash
docker run -d --net=host \
-e PORTS=9090 \
192.168.0.241:80/micro-service/mesosphere/marathon-lb:v1.14.0 sse --group external --marathon http://192.168.0.245:8080
启动:
执行
sh start-marathon-lb.sh
验证:
打开浏览器输入http://192.168.99.100:9090/haproxy?stats
注意:在marathon创建应用时需要设置label:HAPROXY_GROUP external
external是启动时使用--group设置的
3.遇到的问题:
启动mesos-slave:报错
(1)EXIT with status 1: Failed to initialize systemd: Failed to locate systemd runtime directory: /run/systemd/system
执行命令查看需要添加的参数:docker run -it 192.168.0.241:80/micro-service/mesosphere/mesos-slave:1.6.2 --help |grep system
容器启动时添加参数:--no-systemd_enable_support
(2)main.cpp:503] EXIT with status 1: Failed to create a containerizer: Could not create DockerContainerizer: Failed to create docker: Failed to get docker version: Failed to execute 'docker -H unix:///var/run/docker.sock --version': exited with status 2
在docker上可以查看version:
[root@k8s-worker1 mesos]# docker -H unix:///var/run/docker.sock --version
Docker version 1.13.1, build b2f74b2/1.13.1
分析主要原因是:mesos-slave镜像是ubuntu构建的,只可以运行在ubuntu上(感觉是强行解释,暂时出现的情况就是同样的命令在ubuntu上执行成功,在centos上报错),而我采用的是centos,当然centos也有mesos-slave镜像