不可变基础架构与容器

本文讲的是不可变基础架构与容器,【编者的话】本文翻译自Tutum社区,在文章中,作者讲解了什么是immutable infrastructure、immutable infrastructure的优势,以及如何构建immutable infrastructure,并着重介绍了两种构建方式,突出了Tutum在构建应用程序容器过程中体现的优势。

很久以前,我在纽约参加了一场Docker见面会,在会上, Michael Bryze(Gilt的CTO)谈论了使用Docker过程中的不可变基础架构优势。有些人仍心存疑惑,但在Tutum,我们强力支持这个受益于容器崛起的model。

什么是“Immutable Infrastructure”?

当你向应用程序部署更新时,正常情况下,你会创建新的实例(存在于服务器或容器上),并删除旧的实例,而不是尝试去更新原有实例。一旦你的应用程序开始运行,就不要再动它。重复性、管理开销的减少、更易回滚等优势自然形成, 关于其优势,Chad FowlerMichael DeHaanFlorian Motlik曾在在他们的文章中深入探讨过。

为了实现这些优势,你需要构建一个应用程序来满足下面这两个基本要求:

  • 你的应用程序进程是无状态的。它们的状态要储存在一个服务中,这个要位于“immutable infrastructure”的范围之外(除了使用Volume的,并正在运行的容器,这个问题我们将会解决)
  • 你要有一个模板或一组可以从头部署应用程序实例的指令。

第二个要求是关键,虽然有很多种实现方式,但容器就是为了满足这个要求而创建的。

使用配置管理软件

在这个model中,需要使用容器吗?从技术上讲,答案是否定的。但是,使用容器能带来的巨大的帮助。

在没有使用容器的情况下,通过部署新的虚拟机,你仍然可以获得不可变性。这个新的虚拟机中,可以使用新版本应用程序的VM模板(应用程序可以是自动化的),也可以通过使用像Chef或者Puppet这样的配置管理软件来进行配置。目标是从头开始部署新的应用程序实例,并且处理流量。

一旦完成这些,你就可以切换你的负载平衡器,从而开始发送请求,并终止旧的负载平衡器。采用这种model,在为本地应用程序升级而移除代码时,你的'recipes'复杂度就降低了。

但老实说,为每一个只能在特殊cloud provider上工作的应用程序版本创建VM模板,这不是理想的解决方案(即使可以自动化进行,这个过程仍然是麻烦的),并且对开发者来说,避免持续性地测试配置管理脚本是一种有经验的做法。

借助容器进行工作

为什么使用容器?因为,相较于对虚拟机进行快照处理,或者为配置服务器运行脚本,容器可以做到快速创建、测试以及部署。并且,一旦你的应用程序完成构建、测试以及标记。部署它将是一个非常高效的过程,因为你已经从等式中基本移除了底层操作系统的配置。

为最新的Vanilla OS,部署cloud provider的基础模板,通过以上步骤,你就可以将重任委托给你的cloud provider。如果打过补丁,并且为虚拟机(关于虚拟机,你不用在意具体细节,只要虚拟机运行Docker就可以)优化过,它甚至可以有更好的性能。

每次你想要推送新版本的应用程序时,容器也不再需要部署新的服务器。因为,所有的应用程序依赖项和逻辑已经内置在容器中,并且已经被它们的新版本替代了,你的服务器可以保持,并获得不可变基础架构model的优势,这可以显著地减少开发时间。

最重要的是,你仍可以受益于容器,例如,不会被任意cloud provider或者Linux发布版所限制(只要它们运行的是Docker),如果可以在本地工作,那么,它同样也可以在任意provider上工作。这不是我们梦寐以求的吗?

通过使用容器,如何使你的新版本部署工作自动化地进行呢?下面有两个主要的步骤:

  • 构建你的新镜像。虽然有很多种构建应用程序镜像的方法(手动,或者使用配置管理软件等),但是,使用一个简单优化的Dockerfile是普遍的做法。在推送镜像前,你可以使用CI/CD平台进行测试。在生产部署时,要为镜像加上版本号标记,这有助于在必要时回滚应用程序。
  • 部署你的新容器。你可以在新的,或者已经存在的服务器上部署(手动或自动)容器,并切换负载平衡器,向你新部署的容器发送流量。这可以是实例级别的(例如,在每台AWS EC2的实例上使用应用程序容器,以及动态负载均衡器),也可以是容器级别的(使用haproxy或者nginx服务器,转发流量到你的应用程序容器)。

在为应用程序使用多台主机和容器的情况下,如何使步骤2自动化地进行呢?那就使用Tutum。

借助Tutum进行工作

通过使用Tutum,部署新版本应用程序成了一个微不足道的任务。你只需要在服务定义上改变镜像标记,并点击重新部署就可以了。

在一个回滚到特定版本不是那么重要的非生产部署下,通过使用我们的
自动重新部署特性,或者与DockerHub相关的自动重新部署triggers,我们甚至可以使自动部署程序自动化地进行。

一旦自动部署程序开始工作,Tutum将会用新容器,一个接着一个地替代原有的旧容器。我们提供了一个tutum/haproxy镜像,这个镜像会根据它所处的容器进行自动配置。无论你是使用Docker links在本地部署,还是进入Tutum内部部署,当所连接的服务发生收缩或被重新部署等情况时,它都会自动化地重新调整它自己。

如果你想要并行地使用新容器与旧容器进行快速地回滚,你不需要一些和Asgard一样超级复杂的工具。

无论是部署一个使用新镜像标记的服务,还是从tutum/haproxy服务中增加一个链接。Tutum都将会检测到更改,并自动化地开始转发请求到新的服务和旧的服务。当你准备好切换时,你只需要终止旧的服务。默认情况下,tutum/haproxy会自动检测到死亡的应用程序容器,并再次发送请求到健康的容器。

要是开发者使用data volumes呢?我知道我刚才说过,这些应用程序需要是无状态的,但在Tutum中,volumes是跨部署的持久化存在,因此,如果你重新部署一个tutum/mysql容器(默认情况下,这种操作会为/var/lib/mysql创建一个data volume),Tutum将会重新使用这个Volume,并保留它的数据。

一旦你的容器开始运行,就不要去碰它!使用docker exec(或者Tutum的“terminal”特性)只能调试,并运行一次性管理任务,不要去改变你的应用程序代码!应用程序的改变应该在镜像和环境变量中完成,而不是正在运行的实例。

然后呢?

我们正在努力使从代码到部署的过程变得清晰明了,简单而有力。我们还有一些令人兴奋的新特性,这些特性会在接下来的几个礼拜内宣布。同时,我们听取社区的意见,并欢迎你的想法和观点。

原文链接:Immutable Infrastructure and Containers (翻译:洪国安 审校:魏小红)

============================================
译者介绍
洪国安,编程爱好者,目前是一名大三学生,希望通过帮社区翻译,提高自己的知识面。

原文发布时间为:2015-06-10

本文作者:Arthur

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

原文标题:不可变基础架构与容器

时间: 2024-08-02 19:03:35

不可变基础架构与容器的相关文章

用于第三方平台的超融合数据中心基础架构

全球基础设施市场正处于历史性的变革之中.诞生于第三方平台上的企业引发了对横向扩展和软件定义的基础设施的需求,这些基础设施专为超大规模数据中心而设计,这些数据中心的工作负载有限,而且对传统企业功能的需求也很少.同时,世界各地的成熟企业正在转向集成整合的基础设施,以改进长期的数据中心指标,如利用率.部署时间.运营成本和风险等级.这两大采购团体代表了两种根本不同的基础设施部署方法,这些方法正在推动投资的明显增加.本文中,我们将聚焦于超融合系统如何弥补企业所使用的功能丰富的传统集成基础设施与第三方平台的

电商基础架构建设之路

在2016年的最后一天,奉上本年度最后一篇文章,也是为自己在当当的工作画上句号. 本人已经离开当当(可称为猴厂),加入饿了么(人称饿厂),负责北京研发中心.以前是输送精神食粮,现在是物质食粮,都是为人民服务,而且人可以不读书,但是不能不吃饭,所以跟生活更息息相关. 在此感谢多年来给我帮助和支持的当当领导和同事,在当当的这几年,经历了很多,结识了很多好朋友,也收获了许多成长,相信当当会越来越好,架构部做出更多的成绩,引领当当技术体系更进一步,小伙伴们事业蒸蒸日上. 今天分享的内容是"电商基础架构建

云计算网络基础架构的实践和演进——打造云计算网络基石

摘要:从传统IT部署到云,人肉运维已经是过去式,云上运维该怎么开展?人工智能对于运维"威胁论"也随之袭来,如何去做更智能的活,当下很多运维人在不断思考和探寻答案.在2017运维/DevOps在线技术峰会上,阿里云专家云登就为大家分享了云计算网络基础架构的实践和演进,精彩不容错过. 以下内容根据演讲视频以及PPT整理而成. 众所周知,云计算是以计算.存储和网络作为基础的.网络作为云计算的重要基石之一,其架构设计和演进是云计算发展的重要一环,而网络架构涉及可靠性.性能.可扩展性等多方面内容

《MySQL DBA修炼之道》——1.2MySQL 的基础架构和版本

第1章 理解MySQL 1.2MySQL 的基础架构和版本 1.2.1 软件架构中数据库的定位 数据库一般位于整个软件架构的后端,而不直接服务于用户,数据的展示.应用逻辑的处理都是由其他层次的程序来实现的.比较流行的一种软件架构的分类是"双层"."三层"."多层"架构.客户端直接和数据库服务器通信,比如通过ODBC.JDBC连接数据库,一般称为"双层架构"或"client-server"架构.若客户端和数据

构建一个高可用及自动发现的Docker基础架构

Docker的生态日趋成熟,开源社区也不断孵化出优秀的周边项目,覆盖网络.监控.维护.部署.开发等方面.帮助开发.运维人员快速构建.运营Docker服务环境,其中也不乏有大公司的影子,如Google.IBM.Redhat,甚至微软也宣称后续将提供Docker在Windows平台的支持.Docker的发展前景一片大好.但在企业当中,如何选择适合自己的Docker构建方案?可选的方案有kubernetes与CoreOS(都已整合各类组件),另外一种方案为Haproxy+etcd+confd,采用松散

基于超融合架构的容器云管部署实践

作者介绍 张扬,DaoCloud售前工程师,致力于企业IT环境中容器化.超融合和云计算方面的需求分析,方案设计和技术支持.曾任职IBM AICS云服务项目并负责Cloud Infra和DevOps相关工作.Nutanix社区活跃用户,个人微信号:小张烤茄.   随着云计算的逐步落地,容器化和超融合等技术开始风靡整个IT圈.本次分享主要从技术层面讲述云计算环境中容器化和超融合的双擎工作模型.    一.超融合概念   超融合基础架构(Hyper-Converged Infrastructure,或

云存储基础架构:如何选择公共云与私有云

共云和私有云基础架构灵活,可扩展,成本相对较低.然而,每个云的实施都有其熟悉的和鲜为人知的缺点. 许多IT专业人士认为,私有云存储只是其当前基础设施的另一个名称,公共云存储也是同样如此,而只是在某公司的公共数据中心实施.那些存在这些想法的供应商通常缺乏云存储基础设施技术,或者试图在技术上赶上其他市场的发展. 传统的IT基础架构将数据中心分为多个功能:应用,计算,网络,存储和设施以及专业技术.孤立的数据中心基础设施对于缓慢增长,非动态,可预测的工作负载非常有利.这种类型的基础架构负责预测基础架构生

配置一个服务器端WebSphere Application Server基础架构

具体步骤包括安装必备产品(IBM® Worklight Studio.部署到一个 IBM WebSphere® Application Server Liberty Profile 的 Worklight Server,以及一个 Base Profile),启用服务器端.端到端安全:配置服务器端基础架构以实现 FIPS 140-2 合规性:最后通过 WebSphere 基础架构的日志记录.跟踪和测量设施来测量.收集.分析和验证 FIPS 140-2 合规性. 来自美国国家标准和技术研究所 (NI

混合云和多云管理不再难:基础架构即代码来帮忙

随着运维流程变得越来越灵活,IT团队面临着越来越大的复杂度.当应用动态改变时,可以使用敏捷或者持续应用开发.但是当IT资源本身动态变化的时候怎么办呢? 多云和混合云是这一新的.动态的IT大格局的一部分--并且带来了新的风险.要解决这里的问题,一些企业使用了基础架构即代码方案. 配置管理(CM)在大规模IT基础架构里一直是必需配置.有一些CM工具,来自于云供应商,比如Amazon Web Services或者Microsoft Azure,或者来自于虚拟化或私有云软件供应商,比如OpenStack