1. libvirt
libvirt是一套用c语言写的API,旨在为各种虚拟机提供一套通用的编程接口,而且支持与java,python等语言的绑定。基于libvirt的虚拟机管理工具也有很多:virt-manager(GUI工具),virsh(命令行工具)。其架构示意图如下:
(左图是没有使用libvirt的情况)
这里涉及到几个概念:
(1)Domain:虚拟机的一个运行实例,简单的理解,就是一个虚拟机虚拟出来的操作系统。它的叫法可是多种多样:instance,guest
OS,virsual machine,其实都指的同一个概念。
(2)Hypervisor:指的就是虚拟机本身,比如qemu, kvm, xen...
libvirt 由几个不同的部分组成,其中包括应用程序编程接口 (API) 库、一个守护进程
(libvirtd),以及一个默认命令行实用工具
(virsh),libvirtd守护进程负责对虚拟机的管理工作,在用各种工具对虚拟机进行管理的时候,这个守护进程一定要跑起来,而且这个进程可以分为两种,一种是root权限的libvirtd,一种是普通用户权限的libvirtd,前者权限大,可以虚拟计算机的各种设备。
开启root权限的libvirtd守护进程要以root身份去运行:sudo libvirtd --daemon
2. qemu
qemu是一个仿真器,即可用于来宾操作系统的虚拟化,也可以作为完整的机器仿真器使用,运行使用主机 CPU 或其他 CPU
架构的操作系统。
qemu 支持两种操作模式:用户模式仿真和系统模式仿真。用户模式仿真 允许一个 CPU 构建的进程在另一个
CPU 上执行(执行主机 CPU 指令的动态翻译并相应地转换 Linux 系统调用)。系统模式仿真
允许对整个系统进行仿真,包括处理器和配套的外围设备,这时就应该使用root权限的libvirtd。
qemu相关的命令:
$ qemu-img create -f qcow disk.img128M
创建一个名为disk.img的128M大小的qcow格式的磁盘映像文件,这个文件充当来宾操作系统的硬盘。
$ qemu -hda disk.img -cdrom /root/cflinux-1.0.iso -boot d
-hda指定磁盘映像文件,-cdrom指定光盘镜像文件,-boot指定从哪里引导系统,d是从CD-ROM引导,c表示从硬盘引导
$ qemu -hda disk.img
开始启动来宾操作系统
接下来,使用visual
manager工具来模仿一下openstack中Flat模式的网络,因为我在安装openstack的时候,最后一步总是无法ping或ssh上实例,所以这里通过对实例的直接操作来进行演示,其网络拓扑图如下: