在 Linux 容器中运行的应用程序在物理服务器上运行的单个操作系统副本中是隔离的。这种方法与基于 hypervisor 的虚拟化形成对比,在基于 hypervisor 的虚拟化中,每个应用程序都绑定到客户操作系统的完整副本,并通过中间 hypervisor 与硬件通信。因此,容器消耗的系统资源(如内存)非常少,并且基本上不会对应用程序造成性能开销。
使用容器的含义之一是,在给定环境中运行的操作系统副本往往是相对同质的,因为它们本质上充当所有在其上运行的应用程序的某种通用共享基底。特定的依赖项可以与应用程序一起打包(在用户空间的隔离进程中),但内核在系统上运行的容器之间共享。
因此,操作系统不像历史常态那样被配置、调整、集成并最终与单个应用程序结合,但这种改变丝毫没有降低其重要性。事实上,由于操作系统为位于其上的所有容器提供框架和支持,因此它比硬件服务器虚拟化的情况发挥着更大的作用,在硬件服务器虚拟化中,主机是 hypervisor。(当然,以 KVM 为例,hypervisor 利用操作系统来执行其需要的类似操作系统的功能,但 hypervisor 架构本身并没有要求这样做。)
所有适用于虚拟化世界的安全强化、性能调整、可靠性工程和认证仍然适用于容器化世界。事实上,与 hypervisor 处理某些任务的情况相比,操作系统在提供安全性和资源隔离方面承担着更大的责任。我们也在朝着操作系统显式处理多主机应用程序的未来迈进,充当它们的编排器和调度器。这包括跨多个主机和容器对应用程序进行建模,并提供服务和 API 以将应用程序放置到适当的资源上。换句话说,Linux 正在不断发展以支持这样一种环境,即“计算机”越来越成为由连接系统组成的复杂系统,而不是单个离散服务器。
在这样的环境中,拥有一个可移植地组合应用程序的机制也变得越来越重要。总体概念并不是什么新鲜事物。在整个 21 世纪初,作为一名行业分析师,我花了很多时间撰写关于当时可用的各种虚拟化和分区技术的研究报告。其中一组技术是“应用程序虚拟化”。作为一个类别,应用程序虚拟化仍然有些小众,但最近已被重新构想。包括 Docker 在内的技术正在利用容器模型来创建看起来非常像应用程序虚拟化旨在实现的目标:将应用程序组合为一组层,并在环境中以低开销移动它们。
是的,操作系统绝对正在不断抽象化;我们正在远离伴随每个应用程序实例的手工制作和硬编码的操作系统实例——正如我们之前远离为每台单独的服务器精心制作的操作系统实例一样。是的,依赖于这种广泛的操作系统自定义才能工作的应用程序与容器化环境不太匹配。使容器在今天如此有趣(超越小众)的原因之一是,十年前没有出现向更可移植和更少有状态的应用程序实例的全面转变。操作系统的作用仍然至关重要;只是您正在跨所有应用程序使用标准基础镜像,而不是采用该标准基础镜像并针对每个单独的应用程序进行调整。
将所有这些加在一起,应用程序变得更具适应性、更具移动性、更具分布性和更轻量级。它们的放置和配置变得更加自动化。但它们仍然需要运行在某些东西上。一些坚实的东西。一些开放的东西。一些能够为新需求和新型工作负载而发展的东西。而这“某些东西”就是一个(Linux)操作系统。
7 条评论