云原生落地:企业级DevOps实践
上QQ阅读APP看书,第一时间看更新

1.4.1 虚拟化与容器化的区别

最早接触虚拟机是在学生时代,通过给装有Windows系统的PC装一个Ubuntu系统来体验不一样的操作系统,后来为了玩游戏,给Mac电脑安装了Windows系统的虚拟机。依稀记得那时通过VirtualBox等软件找各种操作系统镜像,笨重地拉起一个新窗口,指定一些硬盘、内存大小,里面就是一个全新的隔离世界了。那时候不理解虚拟机的原理,只记得硬盘、内存的大小是有限制的,不能设置得太大,否则主机就会变得运行缓慢。

后来才慢慢理解,虚拟机技术是通过Hypervisor层抽象底层的基础设施资源,隔离出一个个独立虚拟机空间。虚拟机与物理机的区别如图1-7所示。

在虚拟化环境下,物理服务器的CPU、内存、硬盘和网卡等硬件资源被虚拟化并接受Hypervisor[1]的调度,多个操作系统在Hypervisor的协调下可以共享这些虚拟化后的硬件资源,同时每个操作系统又可以保持彼此的独立性。根据所处的层次不同,Hypervisor又被分为Bare-metal(裸机)虚拟化方式和Host OS虚拟化方式。裸机虚拟化方式的Hypervisor不需要完整的主机操作系统,可以直接将Hypervisor部署在裸机上并将硬件资源虚拟机化,常见的这类Hypervisor有支持MacOS的HyperKit,支持Windows的Hyper-V、Xen以及KVM(Kernel-based Virtual Machine)。Host OS虚拟化方式是将Hypervisor安装在操作系统中,虚拟化软件以应用程序的形式运行在Windows或Linux操作系统中,常见的这类Hypervisor有VirtualBox和VMWare Workstation。两者的区别如图1-8所示。

图1-7 虚拟机与物理机的区别

图1-8 两种虚拟化方式对比

容器化可以像虚拟机一样虚拟化基础计算机,而无须虚拟化操作系统,如图1-9所示。容器位于物理服务器及其主机操作系统的顶部。每个容器共享主机操作系统内核,相比于虚拟机,容器非常轻量。

容器化其实有很多技术,比如LXC、BSD Jails、Solaris Zones。Docker的出现使容器更加易用,更多的技术人员把Docker作为容器化的代表。Docker的主要原理是把Linux的控制组(Control Groups,简称Cgroups)、命名空间(Namespace)、联合文件系统(Union File System,UFS)等容器底层技术进行抽象和封装,包含了镜像、容器、仓库三大组件,并为用户提供创建和管理容器的界面。Docker的主要特点是一次构建,多处运行,很好地诠释了容器化的跨平台和强一致性。我们通过表1-2来对比虚拟机与容器的差异。

图1-9 传统虚拟化对比容器虚拟化

表1-2 虚拟机与容器差异表

[1] Hypervisor又称虚拟机监视器(Virtual Machine Monitor,VMM)。