扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
容器是数据中心创新领域最热门的潮流,尽管不是参与讨论的每个人都能准确地阐明具体原因。如果你想知道容器是不是适合自己的数据中心战略,或者如果你知道容器适合数据中心战略,但需要有法子向同行解释容器,那么这篇指南正适合你。
从最基本的层面上来讲,容器让你可以将更多的计算工作负载塞入到单单一台服务器上,并且让你可以在一瞬间为新的计算任务提高增加容量。从理论上来 说,这意味着你可以购买较少的硬件,自建或租赁较少的数据中心场地,并且雇用较少的人手来管理这些设备。容器不同于虚拟机――你可能早已在使用 VMware或Hyper-V虚拟化软件或者KVM或Zen等开源解决方案,运行虚拟机。我们会在下面解释一些差异。
具体来说,Linux容器为服务器上运行的每个应用程序提供了独自、隔离的环境来运行,但是那些容器都共享主机服务器的操作系统。由于容器没很必要 装入操作系统,你可以在一瞬间为虚拟机建立容器,而不是要花数分钟。如果应用程序遇到业务活动突然猛增的情况,比如人们进行更多次搜索或订购更多个产品, 这样的速度让数据中心能够非常迅速地响应。
下面是容器方面需要了解的九个基本事实。如果你有另外的基本事实需要补充,欢迎留言交流!
1. 容器不同于虚拟机。
想比较容器和虚拟机,一个办法就是看一看各自的优点:容器具有轻量级特性,所需的内存空间较少,提供非常快的启动速度,而虚拟机提供了专用操作系统 的安全性和更牢固的逻辑边界。如果是虚拟机,虚拟机管理程序与硬件对话,就如同虚拟机的操作系统和应用程序构成了一个单独的物理机。虚拟机中的操作系统可 以完全不同于主机的操作系统。
容器提供了更高级的隔离机制,许多应用程序在主机操作系统下运行,所有应用程序共享某些操作系统库和操作系统的内核。已经过证明的屏障可以阻止运行中的容器彼此冲突,但是这种隔离存在一些安全方面的问题,我们稍后会探讨。
容器和虚拟机都具有高度可移植性,但方式不一样。就虚拟机而言,可以在运行同一虚拟机管理程序(通常是VMware的ESX、微软的Hyper-V 或者开源Zen或KVM)的多个系统之间进行移植。而容器不需要虚拟机管理程序,因为它与某个版本的操作系统绑定在一起。但是容器中的应用程序可以移到任 何地方,只要那里有一份该操作系统的副本。
容器的一大好处就是应用程序以标准方式进行了格式化,之后才放到容器中。开发人员可以使用同样的工具和工作流程,不管目标操作系统是什么。一旦在容 器中,每种类型的应用程序都以同样的方式在网络上移动。这样一来,容器酷似虚拟机,它们又是程序包文件,可以通过互联网或内部网络来移动。
我们已经有了Linux容器、Solaris容器和FreeBSD容器。微软正与Docker(同名开源容器项目背后的公司)合作,开发Windows容器。
Docker容器里面的应用程序无法迁移到另一个操作系统。确切地说,它能够以标准方式在网络上移动,因而更容易在数据中心内部或数据中心之间移动软件。单一容器总是与单一版本的操作系统内核关联起来。
2. 容器不如虚拟机来得成熟。
如今容器与虚拟机之间一个显眼的区别就是,虚拟机是一项高度发展、非常成熟的技术,事实证明可以运行最关键的业务工作负载。虚拟化软件厂商已开发出了能处理成千上万个虚拟机的管理系统,那些系统旨在适合企业数据中心的现有运营。
容器更具有未来感――这种大有希望的新兴技术未必解决了每一个困难。开发人员正在开发相应的管理系统,以便一启动就将属性分配给一组容器,或者将要求相似的容器分成一组,以便组成网络或加强安全,但是这类系统仍在开发之中。
Docker最初的格式化引擎正成为一种平台,并附有许多工具和工作流程。而容器获得了一些大牌技术厂商的支持。IBM、红帽、微软和Docker在去年7月都加入了谷歌的Kubernetes项目,这个开源容器管理系统可用于将诸多Linux容器作为单一系统来管理。
Docker有730家厂商为其容器平台贡献代码。CoreOS是一款旨在运行现代基础设施堆栈的Linux发行版,它将广大开发人员的目光吸引到了Rocket,这是一种新的容器运行时环境。
3. 容器可以在几分之一秒内启动。
创建容器的速度比虚拟机要快得多,那是由于虚拟机必须从存储系统检索10GB至20GB的操作系统。容器中的工作负载使用主机服务器的操作系统内核,避免了这一步。谷歌云平台解决方案全球主管Miles Ward表示,容器可以在二十分之一秒内启动完毕。
拥有这么快的速度让开发团队可以激活项目代码,以不同的方式测试代码,或者在其网站上推出额外的电子商务容量――这一切都非常快。
4. 容器已在大规模环境证明了自身的价值,比如在谷歌搜索中。
谷歌搜索(Google Search)是世界上实施Linux容器的最庞大系统,谷歌将它用于内部运营。谷歌还擅长将容器托管在其应用引擎(App Engine)或计算引擎(Compute Engine)服务中,但是与其他云供应商一样,谷歌将来自不同客户的容器放入到单独的KVM虚拟机中,因为虚拟机之间的界限更清晰。
然而想运行谷歌搜索操作,它自己使用容器,每秒启动约7000个容器,每周就相当于约20亿个。谷歌支持世界各地不同地方的搜索,在每个数据中心的 活动量有高有低,这取决于时间段和影响所在地区的事件。容器是谷歌搜索引擎确保速度快、顺畅运营的秘诀之一。这种例子只会促进世人对容器的兴趣越来越大。
5. IT人员称容器为“轻量级”时,实际含义如下:
涉及容器的“轻量级”是指,虽然几十个虚拟机可以放在单单一台主机服务器上,每个虚拟机用自己的操作系统运行应用程序,几百个乃至几千个容器可以装 入到主机上。容器化应用程序共享主机的操作系统内核以执行工作。因而,容器带来了这种希望:就需要的场地和耗用的电力而言,有望成为理想的密集计算形式。
在过去十年间,虚拟化彻底改变了每台服务器运行一种应用的行事方式。同样道理,容器有望至少改变一些虚拟化工作负载,成为一种还要密集的计算形式。
6. 容器引发了安全方面的问题。
那么,容器完全只有好处吗?别急着下结论。现在发表的有关在一台服务器上并排运行多个(比如1200个)容器的安全性方面的研究并不多。一个运行中的容器无法闯入或窥视另一个容器已分配的内存空间。
但是,如果允许两个容器彼此对话,其中一个容器被装入了恶意代码,窥视被允许查看的数据当中的加密密钥,那又会怎样?由于共享内存里面存在太多的变数,宝贵数据(比如用户ID、密码和加密密钥)迟早会落到恶意软件的手中。
恶意代码还可能逐渐了解大体情况,知道一个或多个关联的容器在干什么。从理论上来说,这不会发生,因为容器旨在确保每个应用程序相互隔离。但是没有人确信计算机科学家是否想到并杜绝了可能出现某种恶意软件窥视行为的每一种情况。
彼此邻近的容器共享处理器、内存和磁盘等资源,这种行为让安全专业人员深为担忧。有人可能找到一种方法,让一个容器中的代码设法窥视或窃取另一个容器中的数据,尽管之前还没有人这么做过。
7. Docker已成为容器的代名词,但它不是唯一的提供者。
Docker这家公司提出了一种标准的方法来构建容器工作负载,那样工作负载就可以四处移动,但是在任何支持容器的环境中以易于预测的方式来运行。
无论是基于Linux的Docker容器、Solaris Zone还是FreeBSD Jail,所有容器都为在多应用程序主机上运行的应用程序提供某种隔离机制。既然如此,眼下我们为什么听到的除了Docker还是Docker呢?答案在 于这个事实:Jail和Zone确实是容器领域的开拓者,但是它们的采用很有限,这归咎于这个事实:使用Solaris和FreeBSD操作系统的公司比 较少。它们仍在企业得到使用,但是在公有云环境下只是稍微得到使用。
谷歌和开发Linux控制组(Linux Control Groups)的开发人员成功地将容器功能添加到Linux内核中后,鉴于Linux几乎遍地开花的态势,容器立马进入到了每一个企业和政府数据中心。
Docker这家公司大概也在同一时间成立。开发人员明白,如果有一种统一的方法来创建并移动容器,而不是有五花八门的容器格式化引擎,那么容器的实用性和移植性就会大大加强。眼下,Docker就是那种事实上的标准。
正如Docker的首席执行官Ben Golub喜欢说的那样,Docker就好比船运集装箱。每家货运公司、铁路公司和船厂都知道如何装卸和移动标准的船运集装箱。Docker容器在一系列广泛的计算环境下同样备受欢迎。
8. 容器能节省IT人力,加快更新,也许是这样。
在容器中运行生产代码有个优点。Docker构建工作负载时,它采用的方式是以特殊的顺序对文件排序,这个顺序体现了它们的启动次序。
一个服务或一部分应用程序逻辑需要在另一个之前启动,容器实际上用多层来创建,那些层可以彼此独立地访问。已知只影响一层的代码更改可以在不影响其 他层的情况下执行。这样一来,代码更改起来比在典型的整体式应用程序中来得安全;在后者当中,一个错误会让整个应用程序陷入停顿。
有了容器,还更容易修改应用程序。如果某一个层出现变化,可以在进行测试后投入到生产环境。如果某个问题出现,就可以迅速回滚/恢复,因为开发人员面对的只有一层。
与此同时,大型应用程序可以分解成许多小型应用程序,每个小应用程序都在各自的容器里面。打折奢侈品网站Gilt把七个大型应用程序分解成了300 个微服务,一支小队伍维护每个服务。据首席技术官Michael Bryzek声称,相比大型应用程序,这些服务可以更频繁、更安全地更新。
9. 容器仍面临一些没有解决的问题。
Containers及大力支持它的厂商Docker势必要克服一些潜在的问题,才能得到大众的采用。正如最初设想的那样,Docker原本对单一 计算机上运行的应用程序而言是一种格式化引擎。一个容器或一系列关联容器仍会一起驻留在单一主机上。要是应用程序需要10台服务器、100台服务器、乃至 1000台服务器,哪会怎样?
Docker仍需要考虑在一个计算机上运行的一个应用程序,但是大型企业IT部门(想想跨国银行、能源公司、汽车厂商和零售商)想要知道一种工具能处理庞大规模。
谷歌解决这个问题的办法就是,建立了自己的多容器管理系统,该系统的核心现在成为了开源Kubernetes项目。Kubernetes让IT部门 可以建立运行容器的集群,提供了联网功能和容器命名系统,让容器管理员可以同时管理多得多的容器。它让容器管理员可以跨诸多计算机运行多个容器中的大型 应用程序,不需要知道容器集群管理的所有细枝末节。
该项目只是自去年7月以来才在开发开源代码,所以还有一段路要走。但值得注意的是,谷歌将运行其业务所特有的代码放到了公众领域。IBM、红帽和微 软还有几十家主攻容器运营的初创企业对此极有兴趣。VMware同样对Kubernetes有兴趣,而且热衷于跟Docker合作,确保其虚拟化环境与容 器很好地协同运行。企业用户最终会看到这一切活动的成效。
结束语
有些人在不断寻求性能更好、速度更快、成本更低的计算技术,他们会发现容器有许多可圈可点之处。运行单个应用的老式x86服务器的处理器其利用率充其量也就在10%到15%左右。虚拟化服务器将利用率提高到了40%、50%,个别情况下甚至可以提高到60%。
容器有望进一步提高处理器的利用率,降低计算成本,并且让硬件、电力和场地方面的投入获得更大的回报。容器还带来了这种威胁:如果哪里出了问题,比 如说安全漏洞,它可能带来的后果会惨重得多。这就是为什么切忌仓促到处采用容器。容器仍是值得使用的技术,不过要谨慎使用;需深思熟虑,而不是贸然行动。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者