尝鲜 | 在Docker中运行你的Mesos集群

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: 本文讲的是尝鲜 | 在Docker中运行你的Mesos集群,【编者的话】本文介绍了在Docker中运行Apache Mesos,Mesos官方网站提供了安装包来直接运行它,但文中尝试使用Docker来运行Mesos,Mesosphere也提供了相应的镜像。
本文讲的是尝鲜 | 在Docker中运行你的Mesos集群 【编者的话】本文介绍了在Docker中运行Apache Mesos,Mesos官方网站提供了安装包来直接运行它,但文中尝试使用Docker来运行Mesos,Mesosphere也提供了相应的镜像。在Docker中运行Mesos也有它的好处,读者可以尝试下。

很多人都已经开始在Apache Mesos中运行容器化的应用,我们也是这样。尽管我们尝试在容器中运行应用,但我们还是通过传统的 安装包 来在自己的主机上安装Mesos。尽管这是最简单和直接的方式来安装Mesos,大部分也都这样做。但不知道你是否想过,在容器中安装和运行Mesos?

在容器中安装Mesos可以帮助我们解决一个非常实际的问题,我们可以在任意版本的主机系统上运行Mesos和它的框架,包括各种测试版本。因为基于容器,问题就转化为只需要在主机上运行不同的Docker镜像。

Mesos、 Marathon和Zookeeper的Docker镜像

目前在Docker Hub上有几个不同的 Apache Mesos Docker镜像 ,(注意Mesos master 和 slave是两个镜像)。我们选择 Mesosphere 的镜像。 Redjack 的仓库同样提供高质量、文档丰富的Mesos镜像。使用哪个取决于你,哪个都可以正常运行,不过需要注意配置可能有些不同。注意这篇文章中使用的是Mesosphere提供的镜像。

上周 Thijs Schnitger  创建了一个 ZooKeeper 3.5的镜像 。Apache ZooKeeper在这个版本引入了动态主机重配置,一个非常酷的特性,特别是在一个经常变化的环境中特别有用,集群也是。所以我们也使用ZooKeeper容器化的解决方案。

我们还会用到 Mesosphere的Marathon Docker 镜像

容器化集群配置

我们使用 Terraform 启动集群。参考 terraform-mesos 的GitHub仓库并下载它的 容器 分支,你会找到解决方案(至少在写这篇文章时)。不久,它会被合并到master分支。

让我们来看一下配置过程的有趣部分,通过Docker来运行Mesos、Marathon和Zookeeper。

Mesos 主节点

QUORUM=2 # number of masters divided by 2 plus 1
CLUSTERNAME="cluster7"
ZK="zk://<quorum_string>/mesos"
MESOS_VERSION="0.22.1-1.0.ubuntu1404"

docker run -d \
-e MESOS_QUORUM=${QUORUM} \
-e MESOS_WORK_DIR=/var/lib/mesos \
-e MESOS_LOG_DIR=/var/log \
-e MESOS_CLUSTER=${CLUSTERNAME} \
-e MESOS_ZK=${ZK}/mesos \
--net="host" \
redjack/mesos-master:${MESOSVERSION}
--mesosphere/mesos-master:${MESOSVERSION} 

如你所见,我们仅仅传递给镜像几个相关的版本tag就能运行指定版本的Mesos。除此之外,为了Mesos正常工作还需要传递几个环境变量给容器并启用 host networking

简而言之,带 MESOS_ 前缀的变量保存配置的值,我们一般会写到主机 /etc/mesos* 目录下的配置文件。

在集群中的每台主机上运行主节点容器。

Mesos从节点

ZK="zk://<quorum_string>/mesos"
HOSTNAME="host1" # use a hostname of the host
IP="10.20.30.2" # use an IP address of the host
MESOSVERSION="0.22.1-1.0.ubuntu1404"

docker run -d \
-e MESOS_LOG_DIR=/var/log/mesos \
-e MESOS_MASTER=${ZK} \
-e MESOS_EXECUTOR_REGISTRATION_TIMEOUT=5mins \
-e MESOS_HOSTNAME=${HOSTNAME} \
-e MESOS_ISOLATOR=cgroups/cpu,cgroups/mem \
-e MESOS_CONTAINERIZERS=docker,mesos \
-e MESOS_PORT=5051 \
-e MESOS_IP=${IP} \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /sys:/sys:ro \
--net="host" \
redjack/mesos-slave
--mesosphere/mesos-slave:${MESOSVERSION} 

对于Mesos从节点,配置有点复杂,主要是需要确保从节点可以访问主机上的Docker后台进程(同一个后台进程用来运行这个Mesos从节点实例)。通过挂载 /var/run/docker.sock 文件, /usr/bin/docker 执行文件和 /sys  目录(只读)到Mesos从节点容器实现。请注意,这还不是一个完美的解决方案,例如当从Marathon运行另一个Mesos框架,需要再进行细微调整。

Zookeeper

# 第一个节点
docker run -d -p 2181:2181 containersol/zookeeper 1

# 其它节点
MYID="2" # 3,4,5,...
FIRST_NODE="cluster7-mesos-master-0" # hostname of the first node

docker run -d -p 2181:2181 containersol/zookeeper ${MYID} ${FIRST_NODE}
--需要更改端口2888:2888,3888:3888

在这个配置中,运行容器化的ZooKeeper需要一点小技巧。在第一个节点以“standalone” 模式运行,等其它所有节点ZooKeeper实例能连接到它并运行正常,ZooKeeper接着会自动重新配置它自己向所有节点同步。

Marathon

因为我们想运行应用容器和其它框架,我们在Mesos之上安装“datacenter init system” Marathon框架。
MARATHONVERSION="v0.8.2"
ZK="zk://<quorum>" # zookeeper quorum string

docker run -d \
-p 8080:8080 \
-p 5051:5051 \
mesosphere/marathon:${MARATHONVERSION} \
--master ${ZK}/mesos \
--zk ${ZK}/marathon

注意 ,我们指定Marathon UI 运行在8080端口,监听5051端口。我们运行任意版本镜像并传递两个强制参数:

master  – quorum hostname/ip and Mesos registration path
zk  – quorum hostname/ip and Marathon registration path

这样就可以在Docker容器中运行Mesos集群的关键组件了。除了运行不同版本的组件,这个我们最大的动机,这种方式自然而然的带来在集群管理层次容器化的所有好处:快速部署,维护简单和设备可移植性。

在这一过程,我们还需要解决haproxy-marathon bridge和 Mesos DNS 配置的问题。

如果你有任何问题或者要进行评论,请直接在文章下面留言或者在  GitHub上创建issues

原文链接:Containerized Mesos Cluster (翻译:朱高校)

原文发布时间为:2015-09-04
本文作者:unodba
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:尝鲜 | 在Docker中运行你的Mesos集群
目录
相关文章
|
4月前
|
Prometheus 监控 Cloud Native
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
除了Prometheus,还有哪些工具可以监控Docker Swarm集群的资源使用情况?
360 79
|
7月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
923 91
|
6月前
|
SQL 数据库 Docker
【赵渝强老师】在Docker中运行达梦数据库
本文介绍了在Docker容器中部署达梦数据库(DM 8)的具体步骤,包括创建文件夹、下载安装包、导入镜像、启动容器、登录数据库及查看状态等操作。同时,通过视频讲解辅助理解。文中还分析了将数据库服务容器化的潜在问题,如数据安全性、硬件资源争用、网络带宽占用和额外隔离带来的挑战,指出数据库服务在生产环境中可能不适合容器化的原因。
336 4
【赵渝强老师】在Docker中运行达梦数据库
|
5月前
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
360 10
|
9月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
9月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
494 64
|
8月前
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
718 25
|
9月前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
336 8
|
9月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
380 5
|
9月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
222 4