在生产环境中使用Apache Mesos和Docker

本文讲的是在生产环境中使用Apache Mesos和Docker,【编者的话】本文翻译自 IVO VERBERK博客,Docker容器软件已受到了从科技巨头到企业的广泛注意。但是,随着容器概念转变成为现实世界中的成熟技术,那么问题就变成了:怎么样才能快速把Docker应用于生产环境中呢?

介绍

在生产环境中安全有效地的运行Docker容器会有很多复杂的挑战。许多复杂性挑战都是在跨多主机间运行容器产生的。这些跨主机的容器可能需要保持或共享状态,也可能需要相互通信,还可能会随时消失。为了高容错性和可用性,你需要一个自动化的基础平台来关注存储、网络、容器调度和负载均衡等。

在这篇文章里,我将会描述一个基于Apache Mesos的Docker架构。我认为,作为一个为Docker容器提供跨主机间运行的平台,Mesos在性能和成熟度方面已经经过了严格的测试。这篇文章的目的是通过快速地开始和实践来升级Docker在生产中的架构。在这里,我不会深入解释所有(魔鬼)脚本,大部分脚本只需简单地用Vagrant启动虚拟机就可以了。如果你在技术实现上有任何问题请留下你的评论。

我们首先来看看总体架构。

架构

Docker registry: 保证每个Docker镜像的来源

Nginx: 为Docker容器提供负责均衡

Apache Mesos: 作为开启Docker任务的集群调度器

Mesosphere Marathon: 负责所有Docker容器的生命周期

Consul(-template): 为发现和动态配置提供服务

Registrator: 为发现Docker容器提供服务

安装

我已经创建了一个Vagrant安装配置,它可以在你的本地电脑上运行所有的栈。为了使它能够成功运行,你需要把下面的入口添加到本地的hosts文件中:

192.168.33.11   mm1.localdomain mm1  
192.168.33.12   mm2.localdomain mm2  
192.168.33.13   mm3.localdomain mm3  
192.168.33.14   ms1.localdomain ms1  
192.168.33.15   ms2.localdomain ms2  
192.168.33.16   ms3.localdomain ms3  
192.168.33.21   ms4.localdomain ms4  
192.168.33.20   app-test app-production  

下一步,你需要复制我的GitHub库获得所有必要的脚本,设置和辅助文件。下面的所有命令都是在这个库的根目录下进行的。

脚本用于提供配置虚拟机,它只会在第一次创建虚拟机时才运行。如果由于某些原因脚本没有运行成功你可以通过下面的命令触发它:

vagrant provision {{vm name}}

注意由于需要下载很多安装包和Docker镜像,有时为了等待脚本运行完,这条命令运行需要一些时间。

Docker仓库

首先,我们需要一个私人的Docker仓库,因此我们就可以确保Docker镜像的来源。这个Docker仓库将会在容器内运行,它将会通过一个永久的容器数据库本地存储这些镜像。

vagrant up registry

这个仓库会在IP地址为192.168.33.19上可用。我就可以在不采取任何安全措施下使用这个仓库。虽然在生产环境中这显然是一个错误的做法,但是对于本地测试环境使用这会是一个很好的选择。为了使用不安全的仓库你需要在你的docker daemon中添加一些选项:

--insecure-registry 192.168.33.19:5000

对于boot2docker或Docker机器来说,你可以在/var/lib/boot2docker/profile (ssh into the vm first)找到daemon选项。

Nginx 负载均衡

接下来,我们需要一些负责均衡器来路由流入后台容器的流量。为此,我们会用一个定制的Nginx容器来完成,为了动态更新和重载配置,Nginx容器会运行consul-template。

cd Docker/Nginx  
docker build -t 192.168.33.19:5000/nginx .  
docker push 192.168.33.19:5000/nginx  

看看github仓库上的镜像配置。基本上,consul-template会一直监听Consul中任何应用服务的改变和相应地重新加载Nginx的配置。

创建两台准备运行Nginx容器的虚拟机:

vagrant up lb1 lb2

这两台负载均衡器会通过vrrp协议彼此通信,除非其中一个掉线了,否则虚拟IP将不会失效。运行的负载均衡器在IP地址为192.168.33.20和前面添加应用测试或应用生产记录的本地hosts文件中的IP上可用。

Mesos: masters and slaves

我们至少需要3个Mesos master节点来确保完全控制集群。正如上面架构图所示,master服务器上也会运行Consul服务器,Marathon框架,ZooKeeper和Registrator容器。相对于http://www.ivoverberk.nl/towar ... esos/目前Zookeeper作为Mesos的的先决条件,我更倾向于用Consul作为发现需要的服务,因为Consul提供了很多好的优势以及consul-tempate会是一个额外的好工具。对于master节点,Registrator并不是严格必须的;但是为了一致性我在Mesos的master节点和slave节点上都添加了它。Marathon framework会帮我们管理Docker容器的生命周期。开启Master节点:
vagrant up mm1 mm2 mm3
它会按序地开启虚拟机。如果单独地同时在不同的终端上创建这些虚拟机速度会快很多。运行实际的Docker容器时需要一些Mesos slave节点。我们已经创建了4个slave节点。其中的两个(ms1和ms2)在测试环境中使用,其他两个(ms3和ms4)在生产环境中使用。Registrator可以添加或删除Consul服务目录中的任何容器。开启第一个slave节点:
vagrant up ms1
在第一个slave节点安装完成后,开启剩下的节点:
vagrant up ms2 ms3 m4
第一个slave节点充当NFS服务器,它是其他slave节点成功完成它们的脚本运行的前提条件。我选择用NFS作为介绍分布式文件系统的简单方式。
你也可以考虑其他选择比如GlusterFS、Ceph等文件系统。如果它们更适合你的环境,你也可以跳过使用本地分布式存储系统而去寻找基于云的解决方案。

概观

好了,到目前为止,我们已经在我们的本地机器上拥有了一个完整的Mesos栈。现在,我们可以看看这些组成部分是怎么样相互协作创建生产平台的Docker。通过下面的URL可以使用基于web的GUI接口:

http://mm1.localdomain:5050 (Mesos) 

http://mm1.localdomain:8080 (Marathon) 

http://mm1.localdomain:8500 (Consul)

在Mesos的接口上,你应该可以看到4个运行的slave节点和一个运行的Marathon框架。对于Consul应该只有两个入口和Marathon应该提供了一个空应用概述。

应用部署

在里面,我已经包含了一个小的演示应用(Notejam)可以测试我们框架。Notejam是一个简单的记笔记应用,它创建了一个登陆会话和在sqlite3数据库上创建了一个存储信息的文件。建立一个Docker镜像我们才能够部署:

cd Docker/App  
docker build -t 192.168.33.19:5000/app .  
docker push 192.168.33.19:5000/app

看看github仓库上的镜像配置。把我们刚刚建立的镜像部署到集群中的测试slave节点上:

cd Docker/App  
APP_VERSION=latest APP_ENV=test ./deploy.sh 

检查Marathon接口看看部署是不是已经开始了。由于镜像需要从slave节点上拉取下来,第一次运行可能需要一些时间。如果这三个容器已经开启了你可以跳到: http://app-test。这个应用应该可见。在页面底部应该有一个状态线,这表明这个环境中的应用是在运行的和环境中的容器是在被服务的,刷新这个页面将会展现这个应用是被多个后台提供服务的。

现在我们升级我们的应用到集群中的生产节点上:

cd Docker/App  
APP_VERSION=latest APP_ENV=production ./deploy.sh 

这个应用现在应该可以在http://app-production上访问的到。我希望你能看到把这个步骤应用到自动化部署是非常容易的。在这个架构概览中,你可以找到必要组成部分。

你可以通过Marathon接口添加或减少后台容器的数量。负载均衡器会随着容器的变化自动更新。

未来

虽然这篇博客中描述的安装配置是一个可靠的,非常简单的初级的预生产Docker架构,但是,在某些领域还有一些未解决的问题比如存储,网络和管理。接下来一系列博客文章将会专注于深入探索这些领域。

原文链接:TOWARDS DOCKER IN PRODUCTION WITH APACHE MESOS(翻译:占帅兵 )

===========================

译者介绍

占帅兵,研究生在读(华南师范大学),主要研究方向云计算与大数据处理。曾在公司做过微信公众平台的开发和参与过开发智能综合公交枢纽科研项目。现对PaaS平台中Docker技术有浓厚的兴趣。

原文发布时间为:2015-04-23 

本文作者:Doit05

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:在生产环境中使用Apache Mesos和Docker

时间: 2024-11-03 22:00:37

在生产环境中使用Apache Mesos和Docker的相关文章

三个生产环境中使用Docker的案例

本文讲的是三个生产环境中使用Docker的案例[编者的话]本文为2017年初Docker线下见面会的记录,Solita.Zalando和Pipedrive公司做了Docker化经验分享,并对生产环境中使用Docker的细节进行讨论.本文还推荐了一些Docker生产环境中常使用的优秀工具. [3 天烧脑式 Docker 训练营 | 上海站]随着Docker技术被越来越多的人所认可,其应用的范围也越来越广泛.本次培训我们理论结合实践,从Docker应该场景.持续部署与交付.如何提升测试效率.存储.网

IT生产环境中容器编排系统的五个最佳做法

本文讲的是IT生产环境中容器编排系统的五个最佳做法[编者的话]本文主要讲述了生产环境中使用容器编排系统需要注意的5个最佳做法. [深入浅出学习 etcd]etcd为分布式系统提供可靠.高效的配置管理服务,在Docker.Kubernetes.Mesos等平台中扮演了越来越重要的角色.作为2013年开始的项目,它还很年轻,官方文档中缺乏实现上全面.系统的介绍,本课程深入浅出地介绍了etcd的实现,并为运维和二次开发提供了系统的指导和建议. 如果您的企业IT运维组织结构已转移到Docker等容器技术

生产环境中使用Docker Swarm的一些建议

本文讲的是生产环境中使用Docker Swarm的一些建议[编者的话]实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes,Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它们之中,Swarm是Docker原生的,同时也是最简单,最易学,最节省资源的,至少值得我们多了解一下.本文将介绍一些非常实用的建议. [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述.架构.日志和监控,部

使用IBM性能分析工具解决生产环境中的性能问题

序言 企业级应用系统软件通常有着对并发数和响应时间的要求,这就要求大量的用户能在高响应时间内完成业务操作.这两个性能指标往往决定着一个应用系统软件能否成功上线,而这也决定了一个项目最终能否验收成功,能否得到客户认同,能否继续在一个行业发展壮大下去.由此可见性能对于一个应用系统的重要性,当然这似乎也成了软件行业的不可言说的痛 -- 绝大多数的应用系统在上线之前,项目组成员都要经历一个脱胎换骨的过程. 生产环境的建立包含众多方面,如存储规划.操作系统参数调整.数据库调优.应用系统调优等等.这几方面互

生产环境中的容器之工作流

本文讲的是生产环境中的容器之工作流,[编者的话]很多公司已经在生产环境里大规模使用容器.前一篇文章里介绍了Spotify,DramaFever,Built.io和IIIEPE如何以及为什么使用容器.本文继续深入讨论这几个公司的工作流. 构建应用程序以及管理pull请求 在生产环境使用容器的一大吸引人之处是创建无缝的开发到生产环境的能力,最先代码在开发人员的笔记本上,然后能够整体移动到测试环境,并且随后直接部署,而不会因为底层基础架构环境的改动而导致问题. IIIEPE怎么做 Luis Elizo

在生产环境中使用Docker必须注意的事情

本文讲的是在生产环境中使用Docker必须注意的事情,[编者的话]本文以最近非常火的希特勒怒喷Docker的视频为线索,详细分析了Docker存在的一些问题和弱点,以及在生产环境中使用Docker所要注意的方面.这些问题包括隔离性.镜像安全.Docker缺省配置.发布及部署:文章的最后分析了微软最近在容器支持方面的动作. 我们不能否认Linux容器是一个非常强大的概念,它组合了众多优秀的Linux内核功能和Docker开源工具,任何背景知识的开发者都很容易使用. 在2016年容器峰会上,Brya

在生产环境中使用 NODEJS 一年记

本文讲的是在生产环境中使用 NODEJS 一年记, 本文是「我为什么弃 Python 从 Node.js」一文的续集.一年多前,我因为对 Python 的挫败,还想解释为什么转而尝试 Node ,故写下那篇文章. 一年后,公司内部的 CLI(命令行) 工具,客户项目以及我司产品的更新,这些都是我学到的.不仅仅是 Node,基本上对 JavaScript 也学到不少. 易学难精 Node 学起来很容易,尤其是对有 JavaScript 的基础的人.谷歌搜索一些入门教程,折腾一会儿 Express,

基于在生产环境中使用php性能测试工具xhprof的详解_php实例

xhprof 是facebook开源出来的一个php性能测试工具,也可以称之为profile工具,这个词不知道怎么翻译才比较达意.跟之前一直使用的xdebug相比,有很多类似之处.以前对xdebug有一些记录还可以供参考,但是它的缺点是对性能影响太大,即便是开启了profiler_enable_trigger参数,用在生产环境中也是惨不忍睹,cpu立刻就飙到high.而xhprof就显得很轻量,是否记录profile可以由程序控制,因此,用在生产环境中也就成为一种可能.在它的文档上可以看到这样一

详解将ASP.NET Core应用程序部署至生产环境中(CentOS7)_实用技巧

将ASP.NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署