容器技术会最终取代虚拟化技术吗?十拿九稳!

作者介绍:Randy Bias

maxresdefault

Randy 是 Cloudscaling 的联合创始人兼 CTO,他同时也是 OpenStack 的基金会董事。他对云计算行业的深刻理解和真知灼见奠定了他在业内的权威地位。在他的文章和公开演讲中,Randy 都是 OpenStack  项目的拥趸者。

本期内容:

继 OpenStack 之后,我近期被问及最多的问题都是关于容器,以及容器对企业和云原生应用的商业前景。大多数人感兴趣的是,容器技术是否能最终取代 VMware 或 Linux KVM 之类的虚拟化技术(大多数人用 OpenStack 部署的默认选项)。有人对此感到困惑,因为很多人还区分不了容器和虚拟机的差别,还有些人总拿安全性说事儿,认为虚拟机就是比容器安全。

凡此种种问题说明,人们不仅在基础结构层面上缺少对容器的正确认识,而且也不知道容器在经过小更新后,将在未来发挥怎样的作用。人们同样不知道 VMware ESX 这类传统的虚拟化技术的价值正在急剧缩水。在我看来,虚拟机所剩的时日无多,消亡仅仅是时间早晚的问题。

在此消彼长的当前,容器是应该在虚拟机上运行?还是干脆用裸机上的容器技术彻底代替虚拟化技术呢?

最后,OpenStack 在其中的地位是什么?不同于 ESX,OpenStack 不是虚拟化技术,而且事实上它可以和容器、虚拟机或者裸机都能很好地兼容。

那么下面咱们来好好聊聊吧。

作为基础架构的容器 VS. 以应用为中心,作为打包和管理工具的容器

这一点我以后会细讲,但目前必须知道的是,容器和虚拟机不同,你对容器的认识可能是双向的:它是基础设置(又名“轻量级虚拟机”)呢,还是应用管理和配置系统呢?其实都是。如果你是底层工程师,你会认为它是前者;如果你是开发工程师,你会认为它是后者。

事实上,这指明了一种方法,可以解决栈中的一些问题,并简化大部分底层架构,简化它们与应用的交互方式。在以后的博文中我会详谈。

在这篇博客里,我准备从基础设施工具的层面来讨论容器。

虚拟化技术何时消亡

当英特尔通过 Intel-VTx 指令系统,把虚拟化技术大多数独特的功能直接放进芯片时,虚拟化技术的丧钟就已经敲响。在此之前,VMware 和 Xen 有两种特别的机制向虚拟化技术提供功能:二进制转换和半虚拟化。两者曾比拼谁的速度快,但 Intel-VTx 横空出世后,凭借内植于芯片裸片的优势,后来者居上,成了事实上的速度之王。

从此以后,VMware ESX 和 Xen 都把 Intel-VTx 作为默认配置。KVM 这类 100% 依靠 Intel-VTx 芯片组来实现功能的虚拟机也应运而生。也许最重要的是,它消除了 “type-1” 和 “type-2 ” 中虚拟化管理软件之间的差异。

你现在当然可以说虚拟化技术还有价值,但这种价值早已不可同日而语,而且基本上是在异构环境中为遗留应用提供支持。结果是,虚拟化技术允许你在客户系统之内运行不同的操作系统。

让我来具体解释下。

虚拟化技术中的半虚拟化驱动层

Intel-VTx 出现后,管理现有剩余工作量的一大问题就是支持各类操作系统。这一问题广泛存在于今天的企业环境中,因此支持异构环境是相当关键的。不幸的是,即便能在 Intel-VTx 上运行未修改的操作系统内核,系统发出的网络和硬盘指令还是无法触发模拟硬件。Intel-VTx 主要解决了分离问题,封闭问题,以及高性能的直接 CPU 指令和内存读取(通过拓展分页 EPT)。Intel-VTx 没有解决网络和硬盘通路的问题。虽然有 SR-IOV,VT-d 和其他方法尝试过处理这一问题,但从来没有真正解决过。

为了勉强维持网络和硬盘的表现,主流的虚拟化技术都转向了半虚拟驱动。半虚拟驱动很类似于 Xen 上的半虚拟核心。在虚拟化技术及其客户操作系统中,有一个专为网络或硬盘设置的半虚拟驱动。这个驱动和虚拟化技术核心与客户核心“分裂”,从而保证更大的吞吐量。

但根据工作量的不同,网络和硬盘仍会有 5-30% 的性能损失。半虚拟驱动无法像裸机那样操作。

除了性能问题,半虚拟(PV)驱动还存在一些其他问题。其中之一是,半虚拟驱动是由不同的供应商编写的,你要给每个虚拟化管理软件(诸如 ESX,Xen,KVM 等)和每个操作系统(诸如 Windows7,Windows10,RHEL,乌班图,FREEBSD 等)配一个半虚拟驱动。这会导致代码量巨大,受攻击面巨大,支持任务和测试机制巨大,以及质量差异巨大。

最重要的是,到这一步,虚拟机本身变成了一个支持半虚拟驱动的层,而半虚拟驱动本身也是一个支持异构操作系统的层。

有人会问:“还有多久,我们才能在企业数据中心里用上异构操作系统?”

企业数据中心的同构化意味着容器的最终胜利

随着云原生应用和第三方平台的普及,我们都迫切需要把底层操作系统标准化和正规化。如果你运行着 20 种不同的操作系统,你的操作效率不可能提高。如果你需要容器,那么你也希望能在同构或接近同构的环境中运行容器。如果你迁移到任何一个 PaaS 平台之上,你都在把底层的操作系统标准化。你所做的一切,都是在去除 “异构” 。 

在这样一个环境下,半虚拟驱动层(甚至推广到虚拟化管理软件本身)的价值是极其微弱的,甚至弱到几乎没有价值。

力挺虚拟化技术的论调,主要围绕对敏感型应用的支持。这需要诸如 VMware DRS 和 HA 这类的高级特性来实现,来完成操作系统的异构化,来创造封闭以达到“更高的安全性能”。

不幸的是,对于虚拟化技术而言,这一切在容器时代都必将实现——除了异构化,因为它根本没用。

容器和安全性

有一种流行的观点,认为容器技术不如虚拟化技术安全,但事实是,对于我们中的一些人,容器在设计伊始就是一种应用安全机制。它把应用打包,使得其受攻击面降到最低,在一个封闭环境中,以非特权用户的身份运行应用。传统的虚拟机式操作方法则需要你牵动操作系统的大部分,需要经常打补丁和维护。显然容器在这一点上优越得多。

很多人狡辩说虚拟化技术也能创造封闭环境,比如用拓展页表(EPT)。不过 EPT,以及其他许多虚拟化管理软件内的功能,已经不再由管理系统本身提供了,而是由 Intel-VTx 指令系统提供。而且,让 Linux 操作核心与其他命令分隔开来,也没什么特别的。实际上,已经有斯坦福之外的,来自 DUNE 工程的代码,能够为普通应用实现这一点。把它整合进容器平台只是小菜一碟。

你可以期待英特尔继续完善 Intel-VTx 指令系统,让 Linux 操作核心和容器能够摆脱虚拟化技术的中介,利用好这些功能。

再加上,虚拟化管理软件中的应用,其操作系统大多被强制打包,如果能移除掉这些操作系统,容器技术就会真的比虚拟化技术模型更安全。假以时日,相信这一点终能成真。

容器和弹性

接下来我们一定会问:“DRS(分布式资源调度程序)和 HA(高可用性集群)又怎样呢?”

且不论这些功能主要是用于支持敏感型应用,容器根本不属于这个世界;事实是就连 DRS 和 HA,在弹性灵活的第三方平台也是基本没必要的。CloudFoundry 这类平台即服务(PaaS)工具,Kubernetes、Mesos 这类容器管理系统,和类似的管理工具,都已经设计出来,用于动态计量你的工作量。它们会在你运行中的应用里检测性能表现和失败事件,并预先采取步骤处理之。

由此可见,虚拟化技术唯一的价值——用半虚拟驱动支持各种操作系统——在下一代的数据中心里已经不重要了。

图示变化

为了让你意会这一变化长啥样,这里有一幅图,假设虚拟化技术“赢得了”乙方平台,成为支持遗留工作量的关键工具,而容器技术“赢得了”云原生应用的第三方平台,成为现代数据中心及其工作量的主要工具。

hypervisors-vs-containers-diagram

某种意义上,这是一个简单化的图示,但我在此想说的是,如果你不在意多用户操作系统,如果你从斯坦福把 DUNE 图书馆整合进了容器,如果你依赖标准的 Linux 用户权限,如果你要直接面对实体资源,那么容器就是:

1、高性能的

2、正确配置后,和任何虚拟化管理软件一样安全

3、比虚拟化管理软件简单得多,管理费用更省,操作系统的超复杂运算更少

第三点值得详细谈谈。我以后会专门写一篇博文进行具体分析,在这里会先讲个大概。一个以容器为中心的模型,不仅可以如前所述的那样,显著简化应用架构,从虚拟化管理软件层中消除多余的层级和运算量,还能对基础架构栈进行进一步的“抹平”。我这句话是什么意思呢?我的意思是,随着我们越来越“以容器为中心”,我们同时会无可避免地“以应用为中心”。应用本身不关心基础架构拓扑,不关心它们有多少硬盘,是什么种类,用什么网络——这些要素都不重要。

应用,和现代云原生应用的开发者,仅仅关心基础架构协议:我调用了一个 API,我获得了基础架构资源,它要么对服务等级协议(SLA)表现,要么不表现。如果不表现,我就去掉它,换个新的,而如果我不想再用之前的基础架构,我就命令另一个(水平缩放)。

我想事实已经明了——虚拟化技术和“受虐”心理(“pet” type mentality)把我们拖入了过于紧张,过于复杂的基础架构拓扑之中,而这对于现代应用是完全没有必要的。

OpenStack 和容器:合作还是对抗?

有些人心怀疑惑:云原生应用和现代数据中心是被 OpenStack 统治,还是被容器生态系统统治?有些人则觉得两者是并肩工作的。其实两种观点都站得住脚。一方面,OpenStack 可以看作是在基础设施即服务(laaS)的大潮中过于复杂,过于激烈的一次尝试。另一方面,没有哪一个生态系统能如此全面地囊括 DNS 服务,网络服务,存储,虚拟机,裸机,容器,数据库服务,密钥管理等等。

如果考虑到 OpenStack 上的基础 “PaaS” 平台都是基于容器而来的(如 Kubernetes,Cloud Foundry 等等),事情就更复杂些。越来越多的用户选择 OpenStack 和 KVM 虚拟机作为运行的基质。对于一般的企业开发者,也许 CloudFoundry 这类基于容器的平台能最大限度地规避和掩盖 OpenStack 的复杂性。 

一个显而易见的趋势是,虚拟化技术和容器技术会在短期内共存,但随着时间的推移,栈中的问题终究会得到解决,我们将可以直接在裸机系统上运行容器,把虚拟化技术淘汰出局,大大简化栈的运作,同时还能提供更高的安全性,可用性,以及更优的性能。最终的结局将如上图所示。

虚拟化技术的时代已经渐行渐远

在我看来,虚拟化技术的时代已经渐行渐远。现在是容器技术和下一代云原生应用的世界,到达那里只是时间问题。与此同时,在虚拟化基质上运行容器,依然是 “快速启动” 的常用方法,当然底层技术也在不断前进,最终能让容器在裸机上直接运行。现代数据中心将非常复杂,就像那些给我们带来云计算的网络公司一样。它将掌控强有力的云原生应用。在容器及其生态环境的轨道上,这些应用将用 Cloud Foundry 这类平台管理其自身的弹性,比以前所有的应用更安全,更高效,并享有更高的利用率。

我衷心热爱眼中所见,料诸君亦如是。

英文原文:http://cloudscaling.com/blog/cloud-computing/will-containers-replace-hypervisors-almost-certainly/

Leave a Reply

Your email address will not be published. Required fields are marked *