互联网技术 / 互联网资讯 · 2024年3月10日

云基础软件:虚拟化与容器的对比

在传统的IT架构中,操作系统承担着管理计算机硬件与软件资源的重要职责;进入云计算时代后,云基础软件成为实现云端资源调度与管理的核心工具,围绕数据中心的存算资源进行高效编排与分配,推动“软件定义数据中心”的落地。

云基础软件:虚拟化与容器“谁主沉浮”?

在全球云基础软件的发展历程中,诞生了VMware、RedHat等行业巨头,也孕育出OpenStack、Kubernetes等标准级开源项目。随着中国政企上云步伐加速,云端国产化将迎来新的机遇,云基础软件在国内市场的空间进一步扩大。

从服务器虚拟化到容器虚拟化,云基础软件持续演进。虚拟化与容器是两类典型的云基础软件:虚拟化面向资源层,重在重新定义并整合底层硬件资源的利用;容器则在操作系统层级实现应用及进程的虚拟化,推动应用架构的变革。当前的发展趋势是两者的协同演进。OpenStack与 VMware 是服务器虚拟化时代的代表性“云操作系统”,而 Kubernetes 伴随容器应用的兴起逐渐成为云原生时代的重要“操作系统”级别竞争者。

软件信息技术国产化正在加速进入云时代。随着软件上云成为广泛趋势,政企机关、金融机构及各行业企业提出“云端国产化”的诉求,期望以国产化搭配云化的方式推进数字化升级。在云端国产化的推动下,国内云基础软件厂商的机会从互联网扩展到政府、金融等传统领域。结合落地案例,我们总结出在“单机国产化”的基础上,云端国产化新增的五大方向:私有/混合云、虚拟化软件、容器管理软件、桌面云、云管平台。

云基础软件——软件定义数据中心

软件定义数据中心强调在底层硬件之上再构建一层虚拟基础设施,将数据中心的物理资源实现全面虚拟化与软件化,解耦底层硬件与上层服务,解决资源性能弹性与架构可扩展性的问题。其核心包含软件定义计算、软件定义存储、软件定义网络三大层级。

云基础软件被视为云时代的“操作系统”,通过对计算、存储、网络的虚拟化,将数据中心的存算资源高效调度并分配给上层应用,以提升资源利用率。为实现软件定义数据中心,虚拟化与容器技术的结合成为主流路径,成为云计算时代的重要基础设施。

虚拟化:面向底层基础设施,实现计算资源的弹性分配

虚拟化通过软件重新定义和划分底层硬件资源,主要应用在服务器层。由于x86服务器设计的局限性,单机通常只能运行一个操作系统和应用,导致资源利用率不高。虚拟化把物理服务器的CPU、内存、网卡等资源“池化”,并分配给多台虚拟机(VM),实现同一物理设备上运行多个操作系统与应用。

虚拟化是云计算的基础。通常所说的“云化”,就是将硬件资源虚拟化并集中成中央资源池,随后在中央资源池之上增加管理软件,以实现资源的调度与共享。虚拟化在其中的作用是将硬件资源“池化”,以便按需灵活调用计算资源。

典型的虚拟化底层技术——KVM-QEMU

KVM-QEMU 是典型的虚拟化底层技术组合。KVM 是 Linux 内核中的一个模块,将 Linux 内核转变为可实现虚拟化的 Hypervisor;QEMU 是一套开源的处理器模拟器,能够独立模拟 CPU、I/O 设备等整台计算机。由于 KVM 位于内核空间,直接控制内核并不现实,因此通常搭配 QEMU 的用户态管理工具来完成交互。

KVM 与 QEMU 相辅相成:QEMU 单独使用时虚拟化效率较低,需借助 KVM 提供硬件虚拟化能力来提升性能;KVM 又通过 QEMU 来模拟设备,从而实现完整的服务器虚拟化。在一个完整的 Hypervisor 中,KVM 提供对 CPU、内存等的虚拟化支持,QEMU 提供对 I/O 设备的虚拟化与设备管理。

虚拟化的多种技术路径

全虚拟化与半虚拟化是两种常见的技术路线。核心区别在于 Guest OS 内核是否需要修改。全虚拟化不需要对 Guest OS 内核进行修改,部署灵活且兼容性良好,但在性能方面往往略逊于半虚拟化。半虚拟化要求对 Guest OS 内核进行修改,以直接共享宿主机硬件,性能更高但灵活性与兼容性可能有所损失。

硬件辅助虚拟化:通过硬件技术提升性能。CPU 本身提供的虚拟化支持(如 Intel VT-x、AMD-V)提升了虚拟化效率。现今主流的全虚拟化和半虚拟化产品,如 KVM、VMware vSphere、Xen、Oracle VirtualBox 等,通常都支持硬件辅助虚拟化。

容器:面向应用与进程,操作系统层级的虚拟化

容器是操作系统级虚拟化的实现途径,为应用程序运行提供独立环境。容器打包应用及其依赖,允许不同容器共享宿主机资源与操作系统,方便开发者将代码、配置和依赖快速、一致地部署。

容器本质上是在进程级实现隔离、资源受限的运行环境。与虚拟机不同,容器在资源开销、启动速度等方面更具轻量性,适合快速扩展的云原生架构。

容器的底层技术:容器运行时、镜像、引擎

容器由资源控制(cgroups)、访问隔离(namespaces)、根文件系统隔离(Rootfs)以及容器引擎共同支撑。cgroups 与 namespaces 是 Linux 内核的核心特性,前者限制资源分配,后者实现进程隔离。Rootfs 提供容器的文件系统环境,形成所谓的“容器镜像”。容器引擎负责准备运行容器所需资源、管理容器生命周期,以及镜像、网络等组件的协作;而上层的容器编排系统(如 Kubernetes,常简称为 k8s)通过接口调用容器引擎,完成大规模容器集群的部署与管理。目前主流的容器引擎包括 Docker、containerd、CRI-O、Rkt 等。

容器的上层架构:容器编排管理系统

容器编排是把容器应用从单一容器扩展到容器云集群的关键过程。通过编排系统对容器集群进行统一的部署、调度、服务发现和动态伸缩,可以高效管理大规模容器应用。以 Kubernetes 为代表的编排系统在容器引擎基础之上提供完整的运行与调度能力,使开发者从单一镜像到成千上万的容器集群的管理成为现实。

Kubernetes(K8s)已成为容器编排领域的事实标准,获得全球公有云厂商的普遍支持,并在政府、企业等场景中广泛应用。随着生态的完善,K8s 及其相关产品正推动容器技术在更多行业的落地与推广。