[1]高相林. 容器化虚拟机热迁移技术的设计与实现[D].浙江大学,2017.


文章目录


本文基于容器化虚拟机 Hyper 设计并实现容器热迁移系统。

容器是轻量级的操作系统级虚拟化,可以使得用户在一个资源相对隔离的进程中运行应用及其依赖项。因为不再需要像传统虚拟化技术一样为每个应用提供相对独立的操作系统,从而使得容器的运行环境及其轻量化。容器镜像为一组静态的、只读的文件集合,这个文件集合本质上为容器的快照文件。

容器技术

  • 基于 Namespace 和 Cgroups 的容器传统技术,以 Docker 为代表。这种技术可以将多个进程实例隔离在不同Linux Namespace中。而从用户的角度来看,这些实例则好像运行在独立的服务器上一样。
  • 另一类是基于 Hypervisor 的新兴容器技术(容器化虚拟机),以 Hyper 为代表。这类容器将容器运行在一个 Hypervisor 之上,不安装完整操作系统,可以直接使用容器镜像启动容器;

Docker 容器技术

Docker 容器技术是一种在单一宿主机上运行多个资源相互隔离的进程或者进程组的操作系统级虚拟化技术。这些相互隔离的进程或者进程组就是一个个容器,他们和宿主机共享同一个操作系统内核。

Docker通过使用Namespace技术将一个容器放置于一个独立的Namespace之下,使同一容器内的资源相互可见,而容器外的资源不可见。

通过使用Cgroups子系统,Docker容器可以将单个操作系统管理的资源划分到每个容器上进行管理,这样就可以对不同容器间的资源使用率就行平衡,Docker容器也可以绑定到特定的CPU或者内存节点上,可以限制容器所使用的内存大小,也可以为其分配特定的CPU时间和IO时间,还可以控制容器所能访问的设备。

容器镜像是一个容器的只读模板,其中包含了容器运行所包含的全部文件,可以说容器就是容器的静态视角,而容器就是容器镜像的动态表现。

Hyper 容器技术

容器化虚拟机Hyper是一个结合传统Hypervisor虚拟化技术和容器技术的虚拟化新思路,采用完全类Docker的交互方式。Hyper 是一个 Hypervisor 透明的容器系统,它能让用户在任何 Hypervisor (KVM, Xen,Virtualbox)上面运行容器镜像。

传统容器的迁移

传统容器使用 CRIU (Checkpoint Restore in Userspace)技术进行容器的迁移,它是一个 Linux 软件工具,使用此工具,可以冻结正在运行的应用程序,并将其导出为磁盘上的文件集合。然后,可以使用这些文件来恢复应用程序,恢复之后程序和被冻结的时候状态一致。使用 ​​Checkpoint​​​ 和 ​​Restore​​ 功能,将进程组(传统容器从本质上来讲就是系统中的一个或者一组进程)冻结与恢复。

传统容器在以下情况中不能进行迁移:

  1. 容器进程中有 socket 连接;
  2. 容器进程中有 tty、group 和 session;
  3. 容器进程中有 TCP 连接;
  4. 容器进程中有外部挂载;
  5. 容器进程中挂载了设备;
  6. 容器进程中附有调试器的任务;
  7. 容器进程是不同用户的任务;
  8. 容器进程中有使用相对路径建立的 UNIX sockets 连接;
  9. 容器进程中 有IPC内存附加的任务;

容器化虚拟机的迁移

容器化虚拟机的热迁移是基于传统虚拟机的热迁移技术进行设计与实现的。 传统的虚拟机迁移分为静态迁移和热迁移。

虚拟机的静态迁移技术

停机期间拷贝虚拟机的磁盘文件和虚拟机的配置文件。

虚拟机的热迁移技术

为了克服静态迁移技术的宕机时间长、无法持续提供服务的问题 —— 热迁移技术。整个过程对于用户是透明和无感的,因为虚拟机中断服务的时间很短。

主要包括 CPU 状态、内存状态和 IO 设备的热迁移。其中内存状态的热迁移因为内存的数据量打和脏页不断产生等问题,成为虚拟机热迁移中最难解决的问题。

热迁移算法

  1. 预拷贝
    该算法的核心思想是首先通过多次迭代拷贝将源虚拟机的内存拷贝到目标主机,而当剩余内存中的脏页比率低于某个阈值的时候,则将源虚拟机进行挂起操作,然后将剩余的内存、CPU状态和IO设备状态都一并进行迀移。
    《容器化虚拟机热迁移技术的设计与实现》_虚拟化技术
    《容器化虚拟机热迁移技术的设计与实现》_虚拟化技术_02
  2. 后拷贝
    算法首先会将源虚拟机的
    CPU状态和IO设备状态进行热迁移,然后再目的宿主机上对从源宿主机迁移过来的设备进行恢复。在完成设备恢复之后,目的虚拟机会开始对位提供服务。之后再将源虚拟机中的内存逐步拷贝到目标宿主机上,直到所有源虚拟机的内存拷贝完成。

《容器化虚拟机热迁移技术的设计与实现》_虚拟化技术_03

在QEMU中,与热迁移相关的指令主要有migrate和listen。当我们需要将源宿主机上的虚拟机热迁移到目的宿主上时,需要在目的宿主机上使用listen指令,以incoming模式启动一个设备状态与源虚拟机相同的虚拟机作为本次迁移的目的虚拟机。

在传统容器领域(即基于Namespace与Cgroups的容器)中,其热迁移所依赖的技术是CRIU技术,但是现在工业界并无基于此技术的软件推出。而容器化虚拟机的热迁移技术虽然业界也无具体软件推出,但是其本身是依托较为成熟的传统虚拟机热迁移技术实现的,故其在兼容性和实用性等方面都具有一定的优势。

《容器化虚拟机热迁移技术的设计与实现》_虚拟化技术_04