容器将取代Hypervisor?几乎是板上钉钉的事!

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

继OpenStack之后,这些天我被问到的最多的话题是容器及其在企业及原生云应用上的前景。很多人对容器取代类似VMware ESX或Linux KVM(多数OpenStack部署的默认选项)这类Hypervisor的前景尤其有兴趣。然而,还存在一些误区。很多人分不清容器与虚拟机的差异。还有些人为支持虚拟机,喜欢挥动安全性大旗,坚称容器不安全。

这其中缺失的不仅是对基础设施层面上容器是什么的正确理解,还有未来伴随着各类琐碎的更新后的容器可以是什么的正确理解。同时缺失的还有对VMware ESX这类正快速衰退的传统Haypervisor价值的理解。从我的角度来看,虚拟机的时光正在消逝,只是这种变化发生有多快的问题。

在此期间,容器需要运行于虚拟机之上么?或者,运行于裸机上的容器将简单地完全取代Hypervisor?

最后,OpenStack在这其中的位置是什么?与ESX不同,OpenStack不是一个Haypervisor,实际上,它可以与容器、虚拟机或裸机等友好共处。

我们来探讨一下。

容器作为基础设施 vs 容器作为以应用程序为中心的打包与管理工具也许将来我会更多地讨论这个话题,不过重要的是要理解,与虚拟机不同,容器具有两个视角:它们是基础设施(即“轻量级虚拟机”)?或是应用程序管理与配置系统?事实是,它们两者皆是。如果你是基础设施人员,你可能会将其视为前者,如果是开发人员,则可能会将其视为后者。

这指向了用于扁平化部分云技术栈的一个事实上的途径,并提供了用于简化底层基础设施及其与应用程序交互的能力。我会在未来的文章中对此进行详述。

本文中,我将主要讨论容器作为基础设施工具的一面。

当Hypervisor消亡时当Intel通过Intel-VTx(https://en.wikipedia.org/wiki/X86_virtualization)指令集在芯片中直接提供Hypervisor所特有的众多功能时,Hypervisor的丧钟就已经敲响。在此之前,VMware和Xen具有两种特有的方法来提供Hypervisor功能:二进制翻译及半虚拟化。关于哪种方法更快的争论不休,但是Intel-VTx一出现,凭借其在芯片中的优势,立即成为了事实上的速度赢家。在之后,VMware ESX及Xen都默认使用了Intel-VTx。100%依赖于Intel-VTx芯片组这些功能的KVM应运而生。最为重要的可能是,它消除了“类型1”和“类型2”Hypervisor之间绝大部分的差异。

当然,现在你会说,Hypervisor依然有价值,不过这种价值已大不如前,并且主要集中在异构环境中为传统应用程序提供支持。实际上,Hypervisor允许你在访客系统(虚拟机)中运行不同的操作系统。

我来解释一下。

Hypervisor中的半虚拟化驱动层

Intel-VTx出现之后,管理现存的传统“宠物”型(译者注:有状态应用,需要关注其每个具体实例的运行状态)工作负载的最大问题在于支持各种各样的操作系统。这是如今企业环境的现状,支持异构系统的关键在于支持这些系统。不幸的是,当你在Intel-VTx上运行未经修改的内核,涉及网络和磁盘的系统调用依然会访问仿真硬件。Intel-VTx主要解决的问题是:分离、隔离并允许高效访问直接的CPU调用及内存访问(通过扩展页表[Extended Page Table,EPT],https://en.wikipedia.org/wiki/Second_Level_Address_Translation)。Intel-VT未解决网络与磁盘的访问,虽然SR-IOV、VT-d等尝试解决这个问题,但还离实现还很远。

为了维持更高的网络和磁盘性能,主流Hypervisor都采用了半虚拟化驱动。半虚拟化驱动非常类似于Xten的半虚拟化内核。在Hypervisor及其访客操作系统中有一个用于网络或磁盘的特殊的半虚拟化驱动。你可以想像一下,这个驱动被Hypervisor内核与访客内核“劈成两半”,从而允许更高的吞吐量。

取决于不同的工作负载,还是会有5-30%的网络与磁盘性能影响。半虚拟化驱动终究还是无法像裸机那样操作。

除了性能问题之外,半虚拟化(PV)驱动还有其他问题。其中之一:PV驱动由不同的操作系统提供商编写,每个Hypervisor(ESX、Xen、KVM等等)以及每个访问操作系统(Windows 7、Windows 10、RHEL、Ubuntu、FreeBSD等等)都需要不同的PV驱动。这会产生大量代码、更大的可能被入侵的攻击面、一个巨大的支持与测试矩阵,以及显著的质量差异。

最重要的是,Hypervisor自身只是用于支持PV驱动的一层,而后者也是用于支持异构操作系统的一层。

我们不得不问道:“在企业数据中心,异构操作系统还需要维持多久?”

企业数据中心的同质化意味着容器将最终胜出在向原生云应用程序及第三方平台迁移时,我们都强烈地意识到需要对底层操作系统进行标准化和规范化。如果你运行着20个不同的操作系统,你无法获得更高的运维效率。如果你想要容器,那么你也将寻求在同质化或近同质化的环境中运行它们。如果你正向任何类型的PaaS平台迁移,你也是在标准化底层操作系统。随处可见,我们正在远离异构性。

在这样的环境中,半虚拟化驱动层(或者说是Hypervisor)价值很小,甚至不存在。

Hypervisor的主要争论是在于支持那些需要高级功能的工作负载,比如用于可用性的VMware DRS和HA、操作系统异构性以及通过隔离获得的“更高的安全性”。

对Hypervisor来说不幸的是,在容器里所有这些功能都以这种或那种方式实现了。异构性可能除外,但这完全不是问题。

容器与安全性

有个流行的论调,认为容器比Hypervisor“不安全”,无视一个事实:对一些人来说,容器的初衷是作为一项应用程序安全机制。它们可以将应用程序打包进一个非常低的攻击面里,在一个隔离的牢笼中以非特权用户进行运行。这远比典型的基于虚拟机的方式要好得多,在后者你面对的是整个操作系统,不得不对其定期打补丁和维护。

不过很多人会指出Hypervisor用于提供隔离性的魔法,比如扩展页表(EPT)。但是,EPT,以及Hypervisor很多功能已经不再由Hypervisor自身提供,而是由Intel-VTx指令集提供。让Linux内核调用这些指令并没什么特殊之处。实际上,斯坦福的DUNE项目(http://dune.scs.stanford.edu/)释出的代码就能为常规应用程序做到这点。将其整合到容器平台中也是小菜一碟。

可以期待的是,Intel将继续丰富Intel-VTx指令集,且Linux内核和容器将不需要Hypervisor作为中介即可利用这些功能。

在去除了Hypervisor虚拟机中强制包裹着应用程序的绝大部分操作系统,容器可能实际已经比Hypervisor模式要安全。不过,我们可以肯定地说,经过些时日,这必然成真。

容器与弹性

接着,我们必须问这个问题:“DRS和HA呢?”考虑到这些功能很大程度在于支持“宠物”型工作负载这一事实,容器并无此需求,现实的情况就是,在一个弹性的第三方平台中,DRS和HA完全是多余的。PaaS工具如Cloud Foundry、容器管理系统如Kubernetes、Rancher、Mesos,及类似的管理工具已经设计用于扩展工作负载。它们会在运行的应用程序里检测性能和失效问题,并提前应对。

这能让我们明白:Hypervisor唯一的价值在于使用PV驱动支持多种操作系统,下一代数据中心并无此需求。

变化的图景

为帮助你理解变化的可能样子,游戏的结局视图是这样的,它假定Hypervisor在第二代平台“胜出”,并作为支持传统工作负载的关键工具;而容器则在原生云应用程序的第三代平台“胜出”,并成为支持现代数据中心及其工作负载的主要工具

这个图示有些过于简单,不过我这里想展示的是:如果你无须考虑多个访问操作系统,如果你将斯坦福的DUNE库整合到容器中,如果你依赖于标准的Linux用户权限,如果你只想与物理资源直接通讯,容器是:

性能卓越

只要正确配置,可能就跟任何Hypervisor一样安全

远比Hypervisor简单,额外开销和操作系统占用更少

第三点值得多说几句。要详细说明这一点,可能需要额外一篇博客文章,不过以下是它的基本概念。以容器为中心的模式不仅如你所见极大简化了应用程序架构,消除了Hypervisor层带来的额外层及消耗,还允许进一步“扁平化”基础设施栈。这是什么意思?我是说,当我们变得以容器为中心时,我们自然变得以应用程序为中心。应用无须关心基础设施拓扑。它们有多少块磁盘,是什么类型的,是什么样的网络。全都无所谓。应用及现代原生云应用开发人员只关心基础设施约定:调用一个API,将获得基础设施资源,其性能可能能达到它的SLA也可能不能,如果它不能达到就杀掉并使用其他资源来替代,如果所请求的基础设施的资源即将耗尽,我会请求另外一个(水平扩展)。

我认为有一点是值得考虑的,Hypervisor及“宠物”型思维模式将驱使我们创造过度的、复杂的基础设施拓扑,这是现代应用程序完全不需要的。

OpenStack 容器,还是OpenStack vs 容器?对有些人来说,会有一个问题,原生云应用程序和现代数据中心中占主导地位的是OpenStack还是容器生态系统。对其他人来说,这些系统则是协同工作的。双方都有很好的论点。一方面,OpenStack看起来像是用于点燃基础设施即服务(IaaS)的复杂的、过度的尝试。另一方面,没有其他生态系统能像它这样全面,包括了DNS服务器、网络服务、存储、虚拟机、裸机、容器、数据库服务、密钥管理等等。

当你看到OpenStack之上主要的“PaaS”平台(http://www.openstack.org/assets/survey/April-2016-User-Survey-Report.pdf)都是基于容器(Kubernetes、Cloud Foundry等等)的,你也许会对此更困惑。越来越多的客户选择使用OpenStack和KVM虚拟机作为运行底层。CloudFoundry这类以容器为基础的平台为一般的企业开发人员提供了集结和隐藏OpenStack复杂度的终极工具。

看起来正在发生的一个前进方向是,Hypervisor和容器会在中短期内共存,但随着时间的推移,技术栈趋于扁平,我们将开始直接在裸机系统上运行容器,在提供更好的安全性、可用性和性能的同时,去除Hypervisor、简化技术栈。最终,我们将看到类似这样的图景。

巨轮已经出港在我看来,Hypervisor的巨轮已经出港。对于下一代原生云应用程序而言,现在是容器的时代,剩下的只是时间的问题。在此期间,在虚拟化底层之上运行容器“只是用于启动”的一种普通方法,而用于直接在裸机上运行容器的底层技术也会越来越好。现代的数据中心将相对同质化,就像为我们带来云计算的Web扩展公司一样。它将主要托管那些使用类似Cloud Foundry这类平台来管理自身弹性的原生云应用程序,同时随着容器及其生态系统的发展,它将比以往更安全、性能更佳、利用率也更高。

我乐见其成,相信你也一样。


本文作者:Docker

来源:51CTO

相关文章
|
13天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
216 15
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
316 78
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
176 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
2月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
99 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
188 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
245 11
|
2月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
94 3
实战~如何组织一个多容器项目docker-compose
|
3月前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
108 14
|
2月前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
191 3

热门文章

最新文章