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

本文讲的是尝鲜 | 在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集群

时间: 2024-08-01 17:57:44

尝鲜 | 在Docker中运行你的Mesos集群的相关文章

利用 Spring Boot 在 Docker 中运行 Hadoop

本文讲的是利用 Spring Boot 在 Docker 中运行 Hadoop,[编者的话]Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.本文介绍了如何利用Spring Boot在Docker中运行Hadoop任务. 简介 越来越多的应用都开始使用Hadoop框架.而开发者在使用过程中也遇到一些挑战,比如使用诸如Docker之类的容器开发和部署相关的技术栈开发的应用.我们将会在下面的例子中介绍如何克服这些挑战. 由于 S

在Docker中运行桌面应用

本文讲的是在Docker中运行桌面应用,[编者的话]本文作者Jessie Frazelle,本文重要介绍了很多基于文本的或者基于GUI的Docker应用.如果你想对原作者的更多Dockerfile或者镜像感兴趣的话,可以留意本文末尾的链接. 不知道你是否熟悉Docker,它是一个流行的开源容器引擎. 许多人使用Docker来部署应用到生产环境或者在容器环境里构建他们的应用.这可以节省开发者和运维工程师彼此头疼的问题,但是我喜欢以一种非典型的方式来使用Docker. 在我的电脑里,我使用Docke

在Docker中运行SQLServer ASP.NET应用

的文章在阿里云上运行ASP.NET Docker应用一文和大家探讨了如何在Docker中运行ASP.NET应用.本文是上一篇文章的续篇,讨论如何让应用访问SQLServer数据库. 创建SQLServer数据库 我们首先在阿里云上开通一个SQLServer服务器实例,创建用户user1. 创建一个名为Blog的数据库,并授权user1能够访问数据库.为数据库开通外网访问,获得数据库外网访问地址. 所有这些操作都能够在控制台完成,如果你想进入SQLServer的控制台,可以点击上图的登录数据库进入

Apache拟在Docker中运行Hadoop

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;Apache在其Hadoop维基百科发布了一个页面,主要整理了Docker中运行Hadoop的好处,以及要完全在Docker中运行Hadoop所需要完成的工作.在Docker,或者说其它容器中运行Hadoop YARN有很多优势,具体如下: 软件依赖和配置的隔离:在Docker中运行的应用,其软件依赖和配置是与宿主机完全没有关系的,跟其其它行在Docker中的应用也没

Docker Swarm和Kubernetes在大规模集群中的性能比较

本文讲的是Docker Swarm和Kubernetes在大规模集群中的性能比较,[编者的话]本文建立了一套通用测评工具,通过容器启动时延等指标测评Swarm和Kubernetes在大规模部署下的性能表现,分析结果认为Swarm比Kubernetes的性能好.此外还提供了详尽的测试数据, 供应用者参考. 这篇文章主要针对Docker Swarm和Kubernetes在大规模部署的条件下的3个问题展开讨论.在大规模部署下,它们的性能如何?它们是否可以被批量操作?需要采取何种措施来支持他们的大规模部

7条命令在docker中部署Mesos集群

7条命令在docker中部署Mesos集群   所有使用的Docker容器构建文件是有也.您可以在本地构建每个容器或只使用位于Docker Hub预构建的容器.下面的命令会自动下载所需的预建的容器为您服务.ZooKeeper - https://registry.hub.docker.com/u/garland/zookeeper/Meso Master - https://registry.hub.docker.com/u/garland/mesosphere-docker-mesos-mas

通过Docker来部署Mesos集群

本文讲的是通过Docker来部署Mesos集群,[编者的话]Apache Mesos系统是一套资源管理调度集群系统,可以用来管理Docker集群,换个思路,本文介绍了如何通过Docker容器来部署一个单节点和多节点的Mesos集群,整个过程非常简单,只需要七个命令即可完成,整个步骤作者也记录到了GitHub,推荐学习. 这篇文章将教你如何使用Docker容器部署一个单节点的Mesos集群,整个部署过程非常简单,只需要七个命令.在部署之前你需要准备一个装有Docker的环境,这个非常简单,我不赘述

在Docker中运行Dubbo应用

Dubbo是阿里开源的一个分布式服务框架,在国内粉丝很多.官网上的介绍是: DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo的文档很完整,网络上资源也很多,这里就不再重复了.本文做这样一个尝试,将一个Dubbo应用容器化,部署到阿里云的容器服务上. 极简Dubbo应用结构 在Dubbo世界里,服务调用

在Docker中运行Java:为了防止失败,你应该知道的

如果你尝试在容器中运行Java程序,或者专注于Docker,你可能会遇到一些关于JVM和堆大小的问题.本篇文章将介绍如何解决这些问题. 很多开发者会(或者应该)知道,当我们为运行在Linux容器(docker, rkt, runC, lxcfs, etc,)中的Java程序去设置JVM的GC.堆大小和运行时编译器的参数时并没有得到预想的效果.当我们通过"java -jar mypplication-fat.jar"的方式而不设置任何参数来运行一个Java应用时,JVM会根据自身的许多参