libvirt KVM硬件调整

  • CentOS 5.x 版本不支持在线调整cpu,内存等, 以下在centos6.x,7.x测试;
  • CentOS 6.x, 7.x平台下,cpu core数只能在线增加,不能在线减小;
  • 应注意你想要添加的硬件是临时生效,还是永久生效;
  • 文中使用虚拟机domain为“cos”;

Warning: 虚拟机在线调整配置并不是无限制的调整,而是有相应限制,比如对于cpu,内存这些调整,是根据此虚拟机xml文件中的配置参数有一个调整的上限,而对于添加网卡,磁盘这些的限制,则是看kvm程序最大能够模拟多少个pci设备给虚拟机。

可以使用下面的方法预分配cpu,内存的上限值,只是预分配,让虚拟机可以达到这个上限:

virsh dumpxml cos | less    
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
....
<vcpu placement='static' current='2'>8</vcpu>
  • 虚拟机预分配的内存上限值为4G,目前使用2G,因此下文内存最大可以调整到4G,否则需要关闭虚拟机,调整该最大预分配值;
  • 虚拟机预分配cpu核数上限为8,目前使用2个core,因此下文cpu在线增加最多到8个core;
  • 要使在线添加硬件重启后依然生效,需要在命令上加–config–live–persistent参数,具体使用 virsh attach-disk –help查看;

Note: 以下操作虚拟机处于运行状态!

Note: 内存在线调整的原理是利用了virtio-balloon技术,它可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。

该技术能够当宿主机内存紧张时,可以请求客户机回收利用已分配给客户机的部分内存,客户机就会释放部分空闲内存。若其内存空间不足,可能还会回收部分使用中的内存,可能会将部分内存换到交换分区中。

当客户机内存不足时,也可以让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存.

内存调整过程:

  1. KVM 发送请求给 VM 让其归还一定数量的内存给KVM;
  2. VM 的 virtio_balloon 驱动接到该请求;
  3. VM 的驱动使客户机的内存气球膨胀,气球中的内存就不能被客户机使用;
  4. VM 的操作系统归还气球中的内存给VM;
  5. KVM 可以将得到的内存分配到任何需要的地方;
  6. KM 也可以将内存返还到客户机中;

调整内存实例:

# 调整最大内存为32G
virsh setmaxmem cos 32G --config
# 内存调整为,临时调整,并未更改xml文件,虚拟机关机后就失效了
virsh setmem cos 4G
# 永久调整
virsh setmem cos 4G --config --live
# 内存永久减小为2G
#这样的操作会使虚拟机直接挂掉!(OOM),注意调整内存大小需要带单位,默认单位为'K'.
virsh setmem cos 2G --config --live
  • –config: 设置的同时更改虚拟机xml文件,这样就可以保证虚拟机重启后仍然生效;
  • –live: 在线调整;
  • 其它添加硬件的命令同样可以使用上面两个参数;

  • CPU调整只能增大,不能减小;
  • vcpu ≤ maximum vcpus;
# 设置最大vcpu为40核心
virsh setvcpus cos-tmp 40 --config --maximum
# CPU增大为 4 core
virsh setvcpus cos 4 --config --live
# 增大为8 core
virsh setvcpus cos 8 --config --live

添加硬盘:

# 创建新RAW磁盘
qemu-img create -f raw /kvm/images/guest.img 100G
# 挂载磁盘,永久生效
virsh attach-disk cos /kvm/images/guest.img vdb --persistent [--cache writeback]

在线移除硬盘:

# 列出虚拟机所有磁盘
virsh domblklist cos
# 永久移除vdb磁盘
virsh detach-disk cos vdb --persistent

Note:

  • attach-disk 支持很有限的参数,比如当新添加的磁盘是块设备,就没法设置AIO特性;
  • attach-device 才是更通用的添加硬件方法,添加硬件的同时可以配置相应参数,比如我们需要添加/kvm/images/guest.img这块新磁盘;

首先配置一份磁盘的xml文件:

<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/CentOS_kvm/centos02_lij_data1'/>
<target dev='vdb' bus='virtio'/>
</disk>

然后使用attach-device命令添加:

# --persistent保证了永久生效
virsh attach-device CentOS-7.2_6_152_lij disk.xml --persistent

添加移除网卡,使用virtio类型的网卡,网络模式为桥接:

# 添加新网卡
virsh attach-interface --domain cos --type bridge --source br1 --model virtio --persistent
# 查看网卡列表
virsh domiflist cos
# 根据mac地址移除网卡
virsh detach-interface cos bridge 52:54:00:a2:29:2a --persistent

上面使用attach-interface方式添加网卡,也可以使用virsh attach-device配合xml文件添加硬件,比如需要添加新网卡eth2:

<interface type='bridge'>
<source bridge='br1'/>
<model type='virtio'/>
</interface>

添加网卡,永久生效:

virsh attach-device cos eth2-nic.xml --persistent

# 在线添加光盘
virsh attach-disk guest /data/DVD1.iso hdb
# 更换CDROM
virsh change-media guest hda /data/win7.iso
# 弹出CDROM
virsh change-media guest hda --eject

virsh edit添加cdrom:

    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/DATA/SOFTWARES/ISO/CentOS/CentOS-7-x86_64-Minimal-1611.iso'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>

  • virtualization/kvm/libvirt_kvm硬件调整.txt
  • 最后更改: 2019/04/16 18:31
  • (外部编辑)