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

本文讲的是生产环境中的容器之工作流,【编者的话】很多公司已经在生产环境里大规模使用容器。前一篇文章里介绍了Spotify,DramaFever,Built.io和IIIEPE如何以及为什么使用容器。本文继续深入讨论这几个公司的工作流。

构建应用程序以及管理pull请求

在生产环境使用容器的一大吸引人之处是创建无缝的开发到生产环境的能力,最先代码在开发人员的笔记本上,然后能够整体移动到测试环境,并且随后直接部署,而不会因为底层基础架构环境的改动而导致问题。

IIIEPE怎么做

Luis Elizondo,IIIEPE的首席开发人员,说,在Docker之前,将应用程序移动到生产环境是他们最大的挑战。现在,开发人员构建基础镜像,并且公开将这些镜像发布到Docker Hub上。所有应用程序都有标准结构,包括应用程序,日志和文件子目录。这是开发人员使用最多的子目录,而Docker Compose的Dockerfile,YAML文件,和Makefile隐藏了应用程序容器环境相关,而开发人员无需了解细节的复杂性。

DramaFever怎么做

视频流网站DramaFever在其主要站点上使用了Python和Django框架,微服务使用Go语言来处理一些功能,比如镜像大小调整,播放书签和DRM。在每种情况下,版本化的可部署artifact都会作为容器镜像存储及部署。
对于Bridget Kromhout,DramaFever的前运维工程师而言,使用容器帮助遍布全球的开发人员团队确保标准的开发环境。她说容器“契合团队的分布式特点。它使得问题变得更少,因为减少了之前会降低开发速度的不一致情况的发生。”

Spotify怎么做

在Spotify,推荐开发人员在本地机器的build中使用Java,ZooKeeper和VirtualBox。工程师使用GitHub存储和共享代码并且pull请求,还使用Bintray存储容器镜像。

持续集成工作流配置

一旦开发人员编写完代码或者合并了pull请求,就需要构建新的基础镜像,然后通过不同阶段的QA测试。对于很多在生产环境使用容器的应用程序环境而言,通过持续集成工具,比如Jenkins,来实现这一目的,来尽可能多地自动化。

IIIEPE怎么做

Elizondo坚定地认为开发人员不应该在容器环境之外进行开发,之后才为部署构建镜像。“让Jenkins为你完成这些,”他说。
如前一篇文章所述,IIIEPE有两台服务器:一台运行MaestroNG,处理stock Docker容器,另一台运行Jenkins来自动化重复性任务。
“Jenkins还允许记录故障历史来替代Cron提交,并且我们写程序让Jenkins在每个应用程序上运行Cron,这样就能够在出错时得到日志和历史信息,”Elizondo说。

DramaFever怎么做

像Elizondo一样,Kromhout使用Jenkins做所有容器的镜像构建。“我们每周创建基础build,因为Python-Django build能够永远执行,”她说。因此,如果他们每周构建出基础build,那么开发分支的持续集成build的时间就能够减少;主页www项目的Dockerfile使用了“FROM www-base”。当在本地工作时,开发人员从GitHub里的master分支pull代码,并且将代码mount到容器里,容器是docker pull下来的最新的build环境。Kromhout说这样做比使用Vagrant更快。“Jenkins为所有平台仅仅build一个镜像,它仅仅构建一个镜像并且添加标签,”她说。“这对于保持一致性很有帮助。”

Spotify怎么做

Goldin说Spotify用Bintray构建镜像,然后部署到AWS上。Helios可以随后用来做服务发现,但是它还能插入到更多特定的,功能更完整的服务发现工具里,包括SkyDNS和Consul。

编排和管理

随着企业越来越多地使用容器,编排和管理的挑战变得越来越大。从技术上讲这里有三个流程:第一,容器如何连接,通常称为编排。第二,需要一个调度和放置的引擎,能够决定这些容器必须运行在哪个主机上。最后,容器管理包括在容器下线时通知,在服务部署等情况时报告服务状态。但是,这些术语之间的区别通常很模糊,所以通常用编排来涵盖这三种功能。

IIIEPE怎么做

因为IIIEPE要求选用开源方案,并且要求能够用于Drupal,这是很多IIIEPE的web应用程序构建所使用的框架,所以Elizondo能够选择的编排方案并不多。特性集的问题也限制了Elizondo的选择,虽然他从很多方案里摘取特性组合在一起。比如,虽然Shipyard缺少自动管理的能力,但是其作为查看器很有用,IIIEPE使用它监控容器和Docker服务的状态,来确定什么时候容器崩溃了,以及重启死锁的容器。
IIIEPE最终选择MaestroNG作为其核心编排工具,是因为它能够管理多台主机,有命令行接口,并且使用YAML文件来描述所有东西。安全方面,MaestroNG安装在服务器上,是唯一连接到Docker的服务。一旦Jenkins完成了新镜像build的测试,就会推送到IIIEPE的私有registry上,随后Jenkins使用SSH安全协议连接到MaestroNG服务器,并且完成生产环境的部署。

DramaFever怎么做

DramaFever的编排目前还很简单。因为DramaFever 100%在AWS上,他们使用DNS和ELB,在特定的自扩展组里启动实例,完成docker pull来运行必需的容器,并且在特定的ELB里响应。
Jenkins构建出新镜像,在自动和手动测试完成之后,会标记成staging,随后通过fabric,一个基于Python的工具发布到生产环境里。因此通过QA的Docker镜像就是推送到生产环境的镜像(通过分布式私有Docker registry)。

Spotify怎么做

编排正是Spotify构建并且使用Helios的正真原因。Goldin说Helios解决了一个问题,并且解决得很好:在跨云的云集群网络上,真正决策在哪里启动容器实例。虽然Helios是开源的,Spotify还构建了内部帮助工具。为了辅助持续集成,Spotify目前正在扩展Helios的特性集,使之能够视图化显示部署的内容,由谁部署以及部署在哪里。

其他方案

Built.io也为其移动后台即服务(MBaaS)容器架构,创建了自己的编排/管理层。该管理层使用REST API作为主要的通信渠道来管理新容器的搭建,并且能够审核客户profile,为付费多的客户创建大型容器。通过使用API连接的管理层,他们还能够让客户从Built.io产品的用户界面里直接访问到一些编排和管理的功能。

服务发现和负载均衡器

在生产环境里维护应用程序需要服务发现——也就是说,需要能够了解跨应用程序基础架构运行的容器的当前状态。负载均衡器随后确保应用程序流量跨服务器分布,从而确保生产环境里应用程序的高性能。

IIIEPE怎么做

Elizondo说IIIEPE使用Consul来做服务发现,因为etcd仍然要求很多额外的学习投入。Consul存储IP,端口以及应用程序状态。当Consul识别出应用程序的变更,Elizondo创建了一个触发器来创建Consul-template,它能够重新配置负载均衡器的配置。
Elizondo使用NGINX作为负载均衡器,但是计划切换为更加复杂的HAProxy。“NGINX很好,”他说,“我知道如何处理NGINX抛给我的80%的问题。但是NGINX是一个web服务器。它可以作为负载均衡器,但是这并不是它最擅长的。”

DramaFever怎么做

Kromhout在Jenkins job里通过Packer使用Chef客户端来为主机实例生成Amazon Machine Image,由必需的模板填充而成,这样正确的Docker镜像会被pull并且运行,作为特定Elastic Load Banlancer(ELB)的成员从特定自扩展组里启动实例。使用NGINX的proxy_pass到不同upstream的ELB的每个微服务,Kromhout说,这样使得DramaFever能够将动态服务发现相关的更为复杂的问题推迟。“我们为一些数据库连接池使用HAProxy,但是在流量路由领域,ELB+NGINX要简单得多。当能够预测容器在哪里启动时,位置块能很好地工作,”她解释道。“当然,这意味着利用率并没有达到最佳。如今,Peter Shannon,DramaFever目前的运维经理,正在研究更为动态的服务发现方案。应用程序容器集群是如何实现高效使用率的方式。”

都试一试

现在总结最佳实践还为时过早,但是业内正在涌现一些方法论示例,展示容器生产环境工作流看上去应该是什么样子。本文提到的一些工具并不是容器特定的技术;相反,容器让这些技术在部署代码时变得不那么重要了。
在这所有的案例里,最终选择的工作流都将容器和一些最先进的生态系统开源工具组合在一起。除了这样的方案,还有的企业会使用私下的workaround,或者使用仅仅能够解决个别企业应用程序编程语言,数据服务器基础架构,安全策略和持续交付承诺而自行创建的方案。

原文链接:CONTAINERS IN PRODUCTION, PART II: WORKFLOWS(翻译:崔婧雯 校对:) 
===========================
译者介绍
崔婧雯,现就职于IBM,高级软件工程师,负责IBM WebSphere业务流程管理软件的系统测试工作。曾就职于VMware从事桌面虚拟化产品的质量保证工作。对虚拟化,中间件技术,业务流程管理有浓厚的兴趣。

原文发布时间为:2016-04-18

本文作者:崔婧雯 

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

原文标题:生产环境中的容器之工作流

时间: 2024-09-08 09:53:51

生产环境中的容器之工作流的相关文章

80/20定律:在生产环境中使用容器所能带来的收益

本文讲的是80/20定律:在生产环境中使用容器所能带来的收益[译者的话]二八定律又名80/20定律.帕累托法则(定律),它指出了在大部分情况下:多数努力,它们只能造成少许的影响:而少数的部分,它们造成主要的.重大的影响. 将容器应用到你的日常工作当中,花费20%的精力或许就能带来你所期望的80%的收益,避免将时间和精力花费在琐事上,要学会抓重点. 今天许许多多的人都在谈论容器,容器编排,以及容器相关的生态,而相比之下却只有少数几个组织能够真正的在生产中使用容器. 鉴于使用容器所能带来的那些好处,

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

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

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

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

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

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

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

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

详解将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上的部署

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

本文讲的是在生产环境中使用Apache Mesos和Docker,[编者的话]本文翻译自 IVO VERBERK博客,Docker容器软件已受到了从科技巨头到企业的广泛注意.但是,随着容器概念转变成为现实世界中的成熟技术,那么问题就变成了:怎么样才能快速把Docker应用于生产环境中呢? 介绍 在生产环境中安全有效地的运行Docker容器会有很多复杂的挑战.许多复杂性挑战都是在跨多主机间运行容器产生的.这些跨主机的容器可能需要保持或共享状态,也可能需要相互通信,还可能会随时消失.为了高容错性和可

生产环境中Docker的持久化存储模式

本文讲的是生产环境中Docker的持久化存储模式[编者的话]在生产环境中使用Docker实现持久化存储一直是业界的热点问题,本文从到配置文件.机密材料.数据库.共享数据等方面做了些探讨,文中也谈到了一些需要避免的问题以及尽量将应用设计为无状态服务的原则. 一般看法认为容器对于无状态的应用程序是很好的,但是不适合有持久化数据的有状态应用.如果这是真的,这并不是因为技术不到位,而是因为管理持久化数据和有状态应用程序的模式并不总是为人们所熟知.你面临的挑战很多不是关于持久化状态的,而是如此操作不会影响

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

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