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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是生产环境中的容器之工作流,【编者的话】很多公司已经在生产环境里大规模使用容器。前一篇文章里介绍了Spotify,DramaFever,Built.io和IIIEPE如何以及为什么使用容器。本文继续深入讨论这几个公司的工作流。
本文讲的是生产环境中的容器之工作流 【编者的话】很多公司已经在生产环境里大规模使用容器。 前一篇文章里介绍了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。
原文标题:生产环境中的容器之工作流
相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
缓存 弹性计算 Kubernetes
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
关注“阿里巴巴云原生”公众号,后台回复 “ 416 ” 即可下载 PPT。
在生产环境中,阿里云如何构建高性能云原生容器网络?(含 PPT 下载)
|
4月前
|
Java Maven Docker
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
SpringBoot项目打包部署到阿里云服务器、通过Maven插件制作Docker镜像、部署项目容器、配置生产环境
160 0
|
10月前
|
Kubernetes 负载均衡 网络协议
如何在生产环境中使用 Docker Swarm 调度容器?
随着我们的业务规模越来越大,我们的容器规模也逐渐增大时,数量庞大的容器管理将给我们带来许多挑战。Docker 官方为了解决多容器管理的问题推出了 Docker Swarm ,我们可以用它来管理规模更大的容器集群。
192 0
|
人工智能 Kubernetes 负载均衡
直播预约 | 在生产环境中,阿里云如何构建高性能云原生容器网络?
首次 SIG-Cloud-Provider-Alibaba 召开后,我们收到了很多开发者 PR、Issue 以及对于 Roadmap 提出的建议。本次直播为网研会第 2 期,我们邀请了阿里云技术专家 溪恒探讨《在生产环境中,阿里云如何构建高性能云原生容器网络?》
直播预约 | 在生产环境中,阿里云如何构建高性能云原生容器网络?
|
存储 NoSQL 数据库
为生产环境准备Docker容器的有关课程
本文讲的是为生产环境准备Docker容器的有关课程【编者的话】本文为独立顾问James Higginbotham于DZone网站中发布的文章Lessons in Preparing Docker Containers for Production,此文描述了在使用Docker进行生产时需要记住的一些关键点,包括自动化,数据库决策以及编排等方面的重要性。
1565 0
|
监控 安全 测试技术
如何在生产环境运行容器
本文讲的是如何在生产环境运行容器【编者的话】Vivek Juneja是一名工作首尔的云服务工程师。他从2008年就开始接触云服务,是最早的AWS和Eucalyptus的使用者。本文中总结了在生产环境中使用容器的几个方面,特别是对虚拟机与容器的混合部署的观点很值得推荐给大家。
1746 0
|
存储 运维 监控
IT生产环境中容器编排系统的五个最佳做法
本文讲的是IT生产环境中容器编排系统的五个最佳做法【编者的话】本文主要讲述了生产环境中使用容器编排系统需要注意的5个最佳做法。
1609 0
|
传感器 Docker 微服务
使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流
本文讲的是使用短生命周期容器(Ephemeral Containers)构建微服务化的工作流,【编者的话】本文作者Ross Jimenez来自CenturyLink Labs,他受到了Iron.io一篇介绍容器微服务的相关文章的启发,于是介绍了自己团队在构建Panamax的时候所用到的微服务的理念,此外作者还大致介绍了微服务和容器技术相结合之后的优势,以及他们怎样通过微服务化的容器来构建工作流模型。
1573 0
|
1天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复