Tobey's Notes

虚拟化技术和kvm实践

字数统计: 1.8k阅读时长: 8 min
2018/11/28 Share

虚拟化技术与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裸格式的性能,且具有以下优点:
    1. 更小的存储空间,即使是不支持holes的文件系统也可以(这下du -h和ls -lh看到的就一样了)
    2. Copy-on-write support, where the image only represents changes made to an underlying disk image(这个特性SUN ZFS表现的淋漓尽致)
    3. 支持多个snapshot,对历史snapshot进行管理
    4. 支持zlib的磁盘压缩
    5. 支持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
2
[root@k8s201 ~]# systemctl start libvirtd
[root@k8s201 ~]# systemctl enable 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
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
37
38
39
40
# 安装openvswitch
[root@k8s201 ~]# yum install openvswitch

#固定ip
[root@k8s201 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ovsbr0
DEVICE=ovsbr0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=192.168.100.1
NETMASK=255.255.255.0
HOTPLUG=no
ZONE=trusted

# 定义ovs网络类型,保持为ovsbr0.xml
<network>
<name>ovsbr0</name>
<forward mode='bridge'/>
<bridge name='ovsbr0'/>
<virtualport type='openvswitch'/>
</network>

#注册网络类型到kvm
[root@k8s201 ~]# virsh net-destroy default
[root@k8s201 ~]# virsh net-autostart default --disable
[root@k8s201 ~]# virsh net-define ovsbr0.xml
[root@k8s201 ~]# virsh net-start ovsbr0
[root@k8s201 ~]# virsh net-autostart ovsbr0
[root@k8s201 ~]# virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
ovsbr0 active yes yes

# 设置NAT
[root@k8s201 ~]# sysctl -w net.ipv4.ip_forward=1
[root@k8s201 ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@k8s201 ~]# firewall-cmd --zone=trusted --add-interface=ovsbr0
[root@k8s201 ~]# firewall-cmd --zone=public --add-masquerade
[root@k8s201 ~]# firewall-cmd --zone=public --add-masquerade --permanent

9. 安装Guest

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
     ########### 使用使用iso来安装 ###########     
# virt-install \
--name=centos5 \
--os-variant=RHEL5 \
--ram=512 \
--vcpus=1 \
--disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \
--accelerate \
--cdrom /data/iso/CentOS5.iso \
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--noautoconsole



######### 从http中启动,使用ks安装 #########

# virt-install \
--name=centos63-webtest \
--os-variant=RHEL6 \
--ram=4096 \
--vcpus=4 \
--virt-type kvm \
--disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \
--accelerate \
--location http://192.168.130.4/centos63 \
--extra-args "linux ip=192.168.73.22 netmask=255.255.255.224 gateway=192.168.73.1 ks=http://192.168.130.4/ks/xen63.ks"\
--vnc --vncport=5910 \
--vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--force \
--noautoconsole


########## 从http安装,使用ks, 双网卡, 启用console ########
# virt-install \
--name=centos63-webtest \
--os-variant=RHEL6 \
--ram=4096 \
--vcpus=4 \
--virt-type kvm \
--disk path=/opt/vms/centos63-webtest.img,format=qcow2,size=7,bus=virtio \
--accelerate \
--location http://111.205.130.4/centos63 \
--extra-args "linux ip=59.151.73.22 netmask=255.255.255.224 gateway=59.151.73.1 ks=http://111.205.130.4/ks/xen63.ks console=ttyS0 serial"
--vnc --vncport=5910 --vnclisten=0.0.0.0 \
--network bridge=br0,model=virtio \
--network bridge=br1,model=virtio \
--force \
--noautoconsole

--nographics --extra-args="text console=tty0 console=ttyS0,115200"

9. 虚拟机相关操作命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@k8s201 ~]# qemu-img info kvm_disk1.img #查看磁盘格式
[root@k8s201 ~]# virsh list --all #查看所有虚拟机状况
[root@k8s201 ~]# virsh start guest1 #启动名为guest1的虚拟机
[root@k8s201 ~]# virsh shutdown guest1 #关闭名为guest1的虚拟机
[root@k8s201 ~]# virsh destroy guest1 #强制关机
[root@k8s201 ~]# virsh create /etc/libvirt/qemu/wintest01.xml #通过已定义的xml文件创建虚拟机
[root@k8s201 ~]# virsh autostart guest1 #设置自动启动
[root@k8s201 ~]# virsh dumpxml wintest01 #导出虚拟机配置
[root@k8s201 ~]# virsh undefine wintest01 #删除虚拟机配置,destroy后彻底删除虚拟机
[root@k8s201 ~]# virsh define /etc/libvirt/qemu/wintest01.xml #重新定义虚拟机
[root@k8s201 ~]# virsh edit wintest01 #编辑虚拟机配置文件
[root@k8s201 ~]# virsh suspend wintest01 #挂起虚拟机
[root@k8s201 ~]# virsh resume wintest01 #恢复挂起的虚拟机
[root@k8s201 ~]# virt-clone -o centos63_webtest -n centos63_webtest2 -f /opt/vms/centos_webtest2.img #克隆虚拟机, 使用原虚拟机centos63_webtest克隆为centos63_webtest2,且磁盘位置放在/opt/vms/centos_webtest2.img
[root@k8s201 ~]# qemu-img convert -f raw -O qcow2 centos63-119.22.raw centos63-119.22.img #转换格式
[root@k8s201 ~]# virsh snapshot-create centos63-119 #为这个虚拟机创建快照
[root@k8s201 ~]# qemu-img info centos63-119 #查看虚拟机快照信息
[root@k8s201 ~]# virsh snapshot-revert centos63-119.22 1410341560 #恢复快照,需要在虚拟机关机状况下

[root@k8s201 ~]# virsh snapshot-delete centos63-119 #删除快照

10. 添加虚拟机网卡

1
2
3
[root@k8s201 ~]# virsh attach-interface centos63-119 --type bridge --source br1 --model virtio
[root@k8s201 ~]# cd /etc/libvirt/qemu
[root@k8s201 qemu]# virsh dumpxml centos63-119 > centos63-119.xml

11. 硬盘扩容

  1. 分区是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
  2. 分区不是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
CATALOG
  1. 1. 虚拟化技术与KVM
    1. 1.0.1. 1. kvm与xen的比较
    2. 1.0.2. 2.kvm支持的image格式
    3. 1.0.3. 3.虚拟机格式的兼容性
    4. 1.0.4. 4.qcow2和raw文件格式的对比
    5. 1.0.5. 5. kvm安装(基于centos7.5)
    6. 1.0.6. 6. 启动kvm
    7. 1.0.7. 7. 创建image硬盘文件
    8. 1.0.8. 8. 查看支持的os-variant
    9. 1.0.9. 9.安装并配置openvswitch
    10. 1.0.10. 9. 安装Guest
    11. 1.0.11. 9. 虚拟机相关操作命令
    12. 1.0.12. 10. 添加虚拟机网卡
    13. 1.0.13. 11. 硬盘扩容