虚拟化技术与KVM
1. kvm与xen的比较
对比项 | XEN | KVM |
---|---|---|
问世时间 | 2003 | 2007 |
操作系统支持 | UNIX、Linux和Microsoft Windows | UNIX、Linux和Microsoft Windows |
支持的虚拟化技术 | 全虚拟化、半虚拟化 | 全虚拟化 |
动态迁移 | 支持 | 支持(基于共享存储) |
内核要求 | 需要对内核打补丁 | 内置在内核中 |
新版升级方式 | 需要编译内核 | 无需编译内核,仅需要加载最新的ko模块 |
性能 | 接近宿主机 | 稍弱一点 |
管理工具对比 | QEMU-XEN、xm、virsh | QEMU-KVM、Libvirt、virsh、virt-manager |
2.kvm支持的image格式
- vmdk(vmware)
- vhdx(Hyper-V)
- vdi(VirtualBox)
- rbd(ceph)
- raw
- qcow2
3.虚拟机格式的兼容性
虚拟机 | raw | qcow2 | vmdk | vdi | vhd |
---|---|---|---|---|---|
XEN | √ | √ | √ | √ | |
KVM | √ | √ | √ | √ | |
VMware | √ |
4.qcow2和raw文件格式的对比
- raw格式由于裸的彻底,性能上来说的话还是不错的。目前来看,KVM和XEN默认的格式好像还是这个格式。因为其原始,有很多原生的特性,例如直接挂载也是一件简单的事情。 裸的好处还有就是简单,支持转换成其它格式的虚拟机镜像对裸露的它来说还是很简单的(如果其它格式需要转换,有时候还是需要它做为中间格式),空间使用来看,这个很像磁盘,使用多少就是多少(du -h看到的大小就是使用大小),但如果你要把整块磁盘都拿走的话得全盘拿了(copy镜像的时候),会比较消耗网络带宽和I/O
- qcow2现在比较主流的一种虚拟化镜像格式,经过一代的优化,目前qcow2的性能上接近raw裸格式的性能,且具有以下优点:
- 更小的存储空间,即使是不支持holes的文件系统也可以(这下du -h和ls -lh看到的就一样了)
- Copy-on-write support, where the image only represents changes made to an underlying disk image(这个特性SUN ZFS表现的淋漓尽致)
- 支持多个snapshot,对历史snapshot进行管理
- 支持zlib的磁盘压缩
- 支持AES的加密
Notes: 建议使用qcow2格式
5. kvm安装(基于centos7.5)
1 | [root@k8s201 ~]# yum -y install qemu-kvm-tools qemu-kvm.x86_64 libvirt-daemon-kvm.x86_64 virt-install |
6. 启动kvm
1 | [root@k8s201 ~]# systemctl start libvirtd |
7. 创建image硬盘文件
1 | [root@k8s201 ~]# qemu-img create -f qcow2 -o size=20Gb kvm_disk1.img |
8. 查看支持的os-variant
1 | [root@k8s201 ~]# osinfo-query os |
9.安装并配置openvswitch
1 | # 安装openvswitch |
9. 安装Guest
1 | ########### 使用使用iso来安装 ########### |
9. 虚拟机相关操作命令
1 | [root@k8s201 ~]# qemu-img info kvm_disk1.img #查看磁盘格式 |
10. 添加虚拟机网卡
1 | [root@k8s201 ~]# virsh attach-interface centos63-119 --type bridge --source br1 --model virtio |
11. 硬盘扩容
分区是lvm格式 这种很简单,添加一块磁盘,lvm扩容
1
2
3
4
5
6
7[root@k8s201 ~]# virt-img create -f qcow2 10G.img 10G
[root@k8s201 ~]# virsh attach-disk centos63-119 10G.img vdb
[root@k8s201 ~]# cd /etc/libvirt/qemu
[root@k8s201 qemu]# virsh dumpxml centos63-119 > centos63-119.xml
# 接下来就是走LVM扩容的流程了
# 参考 http://www.cnblogs.com/cmsd/p/3964118.html分区不是lvm格式,该分区不是扩展分区, 需要关机离线扩展
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36# 新建一个磁盘,大于原来的容量,比如原来是40G,你想对某个分区扩容20G那么
[root@k8s201 ~]# qemu-img create -f qcow2 60G.img 60G
# 备份原来的磁盘,以防三长两短
[root@k8s201 ~]# cp centos63-119.img centos63-119.img.bak
# 查看原来的磁盘决定扩容哪一个分区
[root@k8s201 ~]# yum -y install libguestfs-tools
[root@k8s201 ~]# virt-filesystems --partitions --long -a centos63-119.img
[root@k8s201 ~]# virt-df centos63-119.img
# 扩容GuestOS的sda2
[root@k8s201 ~]# virt-resize --expand /dev/sda2 centos63-119.27.img 60G.img
# 使用新磁盘启动
[root@k8s201 ~]# mv 60G.img centos63-119.img
[root@k8s201 ~]# virsh start centos63-119
# 在线迁移(需要使用共享存储)
[root@k8s201 ~]# virsh migrate centos63-119.27 --live qemu+ssh://192.168.119.11:9741/system –unsafe
# 删除虚拟机
[root@k8s201 ~]# virsh destroy clone1
[root@k8s201 ~]# virsh undefine clone1
[root@k8s201 ~]# rm -f /data/clone1.img
# 虚拟机停机迁移
[root@k8s202 ~]# virsh shutdown test02
[root@k8s202 ~]# virsh dumpxml test02 > test02.xml
[root@k8s202 ~]# virsh domblklist test02 #查看磁盘位置
[root@k8s202 ~]# rsync -av /data/test02.qcow2 server02:/data/test02.qcow2
[root@k8s202 ~]# rsync -av test02.xml server02:test02.xml
[root@k8s202 ~]# #在server02上操作
[root@k8s202 ~]# virsh define test02.xml
[root@k8s202 ~]# virsh start test02