天天看点

KVM虚拟化

kvm为2型虚拟化

kvm.ko 负责cpu和内存的虚拟化支持(负责cpu、内存、中断控制台、时钟)

linux内核和qemu负责外设和io的支持(模拟网卡、显卡、存储控制台和硬盘等)

一个 KVM 虚机在宿主机中其实是一个 qemu-kvm 进程,与其他 Linux 进程一样被调度;虚机中的每一个虚拟 vCPU 则对应 qemu-kvm 进程中的一个线程;KVM 需要实现 VA(虚拟内存) -> PA(物理内存) -> MA(机器内存)之间的地址转换

虚拟化实现方式

纯软件仿真(qemu)

虚拟化翻译(hypervisor:kvm)

没有硬件辅助的全虚拟化(基于二进制翻译的全虚拟化):hypervisor运行在ring0;guest os运行在ring1;guest app运行在ring3;机制:异常、捕获、翻译(guest os执行特权指令的时候)

半虚拟化:hypervisor运行在ring0;guest os不能运行在ring0上,需要对kernel进行修改,将运行在ring0上的指令转为调用hypervisor;guest app运行在ring3上(xen,虚拟机知道自己运行在虚拟化上)

硬件辅助的全虚拟化:Intel VT和AMD-V创建了一个新的ring -1单独给hypervisor使用;hypervisor运行在ring -1;guest os运行在ring0;guest app运行在ring3(kvm)

容器技术

Storage Pool

KVM 所有可以使用的 Storage Pool 都定义在宿主机的 /etc/libvirt/storage 目录下,每个 Pool 一个 xml 文件

<code>virsh pool-list --all</code>

<code>virsh pool-define /etc/libvirt/storage/HostVG.xml</code>

<code>virsh pool-start HostVG</code>

virt-install

通过kickstart安装

<code>virt-install --name=vm --disk path=/vm/vm-disk.qcow2 --vcpus=1 --ram=1024 --network network=default --graphics vnc,listen=0.0.0.0 --os-type=linux --os-variant=rhel6 --location /iso/centos.iso --extra-args="ks=http://xxxx/mini.txt"</code>

通过pxe安装

<code>virt-install --hvm --connect qemu:///system --network=bridge:br0 --pxe --graphics spice --name=rhel6-machine --ram=1024 --vcpu=2 --disk path=/var/lib/libvirt/images/rhel6.img,size=50</code>

半虚拟化驱动virtio

使用半虚拟化驱动virtio,是为了提高内存、硬盘、网络的性能

没有virtio的io访问路径:虚拟机app -&gt; 虚拟机驱动 -&gt; KVM(捕获)-&gt; QEMU(IO控制器 &amp; 设备) -&gt; 宿主机(设备驱动) -&gt; 物理机硬件

使用virtio的io访问路径:虚拟机app -&gt; VirtIO驱动(安装到虚拟机中) -&gt; 传输Transport -&gt; QEMU(VirtIO控制器 &amp; 设备) -&gt; 宿主机(设备驱动) -&gt; 物理机硬件

安装方式

红帽RHEL 4.8之后自动安装和加载virtio驱动

Windows操作系统需要额外安装virtio的驱动,可以从社区上获取,virtio-win:http://www.linux-kvm.org/page/Downloads

Qemu guest agent

如果VM中安装了guest agent,Host就可以使用libvirt向VM发送命令,例如 冻结、释放文件系统、虚拟机CPU的热添加或移除等

RHEL/Centos中安装包:qemu-guest-agent-xxx.rpm

Windows:在virtio-win中有安装包

通过libvirt来使用Qemu guest agent(增强功能)

virsh shutdown --mode=agent // 比--mode=acpi更加安全地关闭操作系统

virsh snapshot-create -quiesce // 在创建快照之前将缓存的内容刷入到磁盘

....

KVM

继续阅读