摘要: 众所周知,Mesos全面支持Docker。但是这意味着什么呢?在命令行里运行docker run...就可以使用Docker了。还需要做什么?让我们一起研究下Mesos的高级特性——和Docker的集成。本文选自《用Mesos框架构建分布式应用》。
因为Docker本身想管理整个容器,从chroot、命名空间到整个命名空间的cgroup,它会和默认的Mesos容器发生冲突。因此,Mesos添加了容器机的支持,一种可插拔的机制,让Mesos的容器机子系统可扩展:最初Mesos的基于 LXC/cgroup的容器被引入到容器机API里,Docker是添加的第一个新的容器机,现在也有了全面的文档协议,介绍如何添加新的容器机,比如KVM虚拟机。
使用Docker
为了使用Docker容器机技术,必须将其包含进Mesos slave的命令行里。比如,mesos-slave --containerizers=docker,mesos...允许在该台slave上使用Docker和Mesos容器。
可能还想增加执行器的注册超时时间,这样Mesos不会在容器还在下载的时候就认为容器发生了故障。一开始可以设成五分钟,确保有足够的时间下载Docker镜像。所以,slave命令行类似:
mesos-slave --containerizers=docker,mesos \
--executor_registration_timeout=5mins ...
使用带有应用程序的Docker非常简单——一旦启用了对Docker的支持,只需要设置TaskInfo或者ExecutorInfor里的container字段(类型为ContainerInfo)。
令人困惑的是,消息CommandInfo.ContainerInfo并不是正确的消息——需要在带有Docker相关字段的mesos.proto里设置最高级别的ContainerInfo。
要想使用Docker,需要将ContainerInfo里的type设置为DOCKER,并且将docker字段设置到ContainerInfo.Docker消息的一个实例里,该消息的image属性设置为Docker镜像的名称(比如myusername/webapp)。这里可以配置很多Docker参数,比如是使用HOST还是BRIDGE网络,映射使用哪些端口或者额外的Docker命令行参数。如果想让Docker容器使用Dockerfile里指定的docker run ...,还必须将TaskInfo的CommandInfo设置成shell=false。如果设置成shell=true,就需要禁用Dockerfile里的run,指定的command会由sh -c “”来运行。
当启动Docker容器机任务时,slave会首先获取(并且解包)沙箱里所有指定的URI,并且将Docker镜像拉取到本地。然后,slave通过运行docker启动Docker镜像。docker命令的HOME环境变量指向该沙箱,因此可以通过获取到的URI来配置Docker(详见下面的注意事项)。在Docker镜像里可以使用该沙箱,其路径保存在MESOS_SANDBOX环境变量里。最后,Docker的stdout和stderr会被重定向到Mesos沙箱里名为stdout和stderr的文件上。
高级Docker配置
必须记住的一点是,Docker容器机总是会尝试从registry里拉取Docker镜像。这意味着无法使用仅在本地安装了的Docker镜像——必须在某个地方部署该镜像。如果想要使用私有registry,可以提供一个.dockercfg文件。该文件由一个URI指定,这样Mesos slave就能够使用其自动获取URL的功能将.dockercfg文件拷贝到Docker进程所使用的HOME目录下。
相同的API也适用于基于Docker的执行器,唯一不同之处在于,执行器代码实际上可以在Docker容器内运行。要实现这一目的,需要完成上文所述的所有事情,但是是在ExecutorInfo消息里,而不是TaskInfo消息里。
本文选自《用Mesos框架构建分布式应用》,点此链接可在博文视点官网查看此书。
相关推荐
去哪儿网使用Mesos和Docker构建开发(DEV)和测试(BETA)环境,这一过程涉及多个方面的知识点。下面是对这些知识点的详细梳理。 一、背景知识 去哪儿网在构建DEV/BETA环境时,面临了传统虚拟机环境的诸多问题,...
2. **持续集成/持续部署(CI/CD)**:领科云可能利用了Docker与Mesos的结合,构建了一套自动化测试和部署流程,确保代码的快速迭代和稳定发布。 3. **网络策略和服务发现**:在Mesos和Docker环境下,服务间的通信...
假设我们有一个基于Mesos的集群,其中包含多个Docker容器和若干个应用程序框架(如Marathon和Chronos)。为了确保系统的稳定运行,我们可以采取以下监控策略: - **硬件监控**:通过Zabbix监控每个节点的CPU、内存...
Apache Mesos通过维护轻量级的Master和高可用的Zookeeper集成,解决单点故障问题。MesosMaster和MesosSlave是其核心组件,分别管理各个Framework和Slave节点,以及执行具体的任务。Framework如Hadoop或Spark等可以...
使用Sidecar和Sidecar Executor,无论运行的是哪个Mesos调度程序,都可以使服务运行状况检查与服务发现统一。 该系统在可能的范围内完全与调度程序无关。 请注意,与Sidecar不同,Sidecar Executor假定任务将作为...
4. **Mesos与Docker的结合**:Mesos与Docker的集成使得容器化应用的部署和管理更加便捷。Mesos可以自动发现和管理Docker容器,提供了一种可扩展且灵活的方式来运行微服务和分布式应用。 5. **Mesos Marathon**:...
2. Docker:Mesos可以与Docker集成,提供容器化和微服务编排功能。 3. Consul:Mesos可以与Consul集成,提供服务注册和发现功能。 4. Etcd:Mesos可以与Etcd集成,提供分布式键值存储功能。 Mesos可以为教育课件云...
### Mesos运行测试结果分析 #### 一、测试概述与目的 本次测试旨在评估Mesos在不同...对于未来的研究方向,建议进一步探索如何优化Mesos与现有技术栈的集成,以及如何提高其在大规模分布式系统中的适用性和性能表现。
本书《Spring Microservices: Build Scalable Microservices with Spring, Docker, and Mesos》深入探讨了如何使用Spring框架、Docker容器技术和Mesos集群管理系统来构建高效、可扩展的微服务架构。通过详细分析与...
总的来说,【mesos-flocker-integrations】项目提供了一个实用的学习平台,帮助用户理解和实践在Mesos环境中如何有效集成和使用Flocker,以解决容器化应用的数据持久化问题。通过这个项目,你可以深入理解Mesos的...
3. **Docker集成**:学习如何在Mesos框架中集成Docker,包括使用Docker容器运行时,定义Docker容器的资源需求,以及如何通过Mesos启动和管理Docker容器。 4. **Python编程**:熟悉Python的编程范式,如面向对象编程...
此外,由于 Mesos 支持 Docker 容器,因此它能够无缝集成现代微服务架构,提供强大的容器编排能力。 总之,Apache Mesos 是一种强大的资源管理平台,通过资源邀约机制和模块化架构实现了高效、灵活的资源调度。框架...
Heapster在与其他组件如Kubernetes或Mesos集成时,可能利用ZooKeeper来实现集群的同步和一致性。 “分布式”标签进一步强调了Heapster在处理大规模、跨节点的监控任务时的能力。在分布式系统中,Heapster可以收集并...