如何使用KVM libvirt命令管理虚拟机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用KVM libvirt命令管理虚拟机相关的知识,希望对你有一定的参考价值。

参考技术A 在Ubuntu系统上安装KVM组件服务
使用如下命令:
$ sudo apt-get install kvm qemu
$ sudo apt-get install virtinst python-libvirt virt-viewer virt-manager
安装桥接网卡
$ sudo apt-get install bridge-utils

使用qemu命令创建虚拟机的虚拟磁盘文件
使用如下命令创建一个10G的磁盘空间用于安装和允许虚拟机
$qemu-img create -f qcow2 lion.disk 10G

创建虚拟机Domain配置文件用于创建虚拟机实例
使用vim命令创建lionServer.xml配置文件,输入如下内容:
<domain type='kvm' id='1'>
<name>lion</name>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-xenial'>hvm</type>
<boot dev='cdrom'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/hxb/image/lion.disk'/>
<backingStore/>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<source file='/home/hxb/iso/ubuntu.iso' />
<target dev='hdb' bus='ide'/>
</disk>
<controller type='usb' index='0'>
<alias name='usb'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'>
<alias name='pci.0'/>
</controller>
<controller type='ide' index='0'>
<alias name='ide'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='network'>
<mac address='52:54:00:7d:4d:d1'/>
<source network='br1' bridge='virbr1'/>
<target dev='vnet0'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/3'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/3'>
<source path='/dev/pts/3'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<sound model='ich6'>
<alias name='sound0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='cirrus' vram='16384' heads='1'/>
<alias name='video0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</memballoon>
</devices>
<seclabel type='dynamic' model='apparmor' relabel='yes'>
<label>libvirt-d828c766-9826-99a9-f495-67a3a55a5643</label>
<imagelabel>libvirt-d828c766-9826-99a9-f495-67a3a55a5643</imagelabel>
</seclabel>
</domain>

使用virsh命令创建新的虚拟机实例
使用如下命令:
定义虚拟机domain,
$virsh define lionServer.xml
启动虚拟机lion
$virsh start lion

显示系统中的虚拟机列表
$virsh list

在创建的虚拟机实例lion上安装操作系统
打开VirtualManager工具,打开虚拟机管理工具,选择lion虚拟机进行连接。
连接虚拟机lion成功后,进行系统的安装。

完成虚拟机lion的系统安装后,需要进行虚拟机domain的配置修改,将系统引导从cdrom切换到硬盘hd,重启虚拟机后,既可以正常登陆lion虚拟机。
使用如下命令进行boot配置修改:
$ virsh edit lion
...
<os>
<type arch='x86_64' machine='pc-i440fx-xenial'>hvm</type>
<boot dev='cdrom'/>
</os>
...
将 <boot dev='cdrom'/> 修改为 <boot dev='hd'/>

如何删除创建的lion虚拟机
1)关闭lion虚拟机
$ virsh shutdown lion
2) 删除lion虚拟机
$virsh destroy lion
3) 取消lion domain的定义
$virsh undefine lion

Linux实现KVM+QEMU+libvirt的虚拟机环境 并使用virsh对虚拟机进行管理

说明:
本文使用的实验环境是运行在windows10上的Vmware workstation 12.5 pro,宿主机操作系统是Ubuntu16(机器名称为KVM_test),kvm+qemu+libvirt安装在KVM_test上。运行在KVM_test上的客户机操作系统也是Ubuntu16(机器名称为test_ubuntu)。
本实验需要的软件有Vmware workstation、vnc viewer、ubuntu16的ios镜像。Vnc viewer需要注册码,请自行百度查找。
本实验所有的操作和文件均是放置在/home/joe/的目录下。如果使用其他目录,请自行适当更改后面所出现的命令。**



实验步骤:
首先需要在Vmware中安装好宿主机KVM_test,注意要在(虚拟机设置->硬件->处理器)里打开虚拟化,如下图箭头所指。宿主机的安装不是本实验的重点,在此不做过多赘述。
设置虚拟机



安装完成宿主机之后,最好先检查一下是否能够联网,因为之后需要下载安装KVM-qemu和libvirt。
检查完成后在终端中使用命令lsmod | grep kvm,查看硬件是否支持辅助虚拟化。(如果之前没有在虚拟机设置中打开虚拟化的话这里可能看不到任何信息)。如有图中信息表示cpu支持硬件辅助虚拟化。
这里写图片描述



接下来我们需要安装qemu-kvm,使用命令

sudo apt-get install qemu-kvm

安装qemu-kvm的软件包,由于软件源的原因可能需要比较长的时间。
这里写图片描述



安装完qemu之后,我们要安装libvirt,使用命令:

sudo apt-get install libvirt-bin

libvirt,同样等待一段时间后,安装成功。
这里写图片描述



安装完libvirt之后,我们需要安装virt-install
使用命令

sudo apt-get install virtinst

安装完成后我们就完成了初期的软件环境配置。
这里写图片描述



接下来我们要给test_ubuntu划分一个磁盘空间,作为该虚拟机的硬盘。
使用命令

qemu-img create -f qcow2 test.qcow2 10G

其中10G表示磁盘空间的大小,大家可以根据需要进行调整。如果安装Ubuntu16这样的操作系统最好是有10G以上,要不然安装的时候会提示空间不足。
这里写图片描述



新建一个demo.xml文件作为虚拟机的配置文件
使用命令:

touch demo.xml

使用命令gedit demo.xml编辑该文件,其内容如下

<domain type='kvm'>
        <name>test_ubuntu</name> //虚拟机名称
        <memory>1048576</memory> //最大内存,单位k
        <currentMemory>1048576</currentMemory> //可用内存,单位k
        <vcpu>2</vcpu> //虚拟cpu个数
        <os>
          <type arch='x86_64' machine='pc'>hvm</type>
          <boot dev='cdrom'/> //光盘启动
       </os>
       <features>
         <acpi/>
         <apic/>
         <pae/>
       </features>
       <clock offset='localtime'/>
       <on_poweroff>destroy</on_poweroff>
       <on_reboot>restart</on_reboot>
       <on_crash>destroy</on_crash>
       <devices>
         <emulator>/usr/bin/kvm</emulator>
         <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
           <source file='/home/joe/test.qcow2'/> //目的镜像路径
           <target dev='hda' bus='ide'/>
         </disk>
         <disk type='file' device='cdrom'>
           <source file='/home/joe/Ubuntu16.iso'/> //光盘镜像路径
           <target dev='hdb' bus='ide'/>
         </disk>
        <interface type='bridge'> //虚拟机网络连接方式
          <source bridge='virbr0'/> //当前主机网桥的名称
          <mac address="00:16:3e:5d:aa:a8"/> //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突
        </interface>
        <input type='mouse' bus='ps2'/>
         <graphics type='vnc' port='19' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>//vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询
       </devices>
     </domain>



在编写完配置文件之后,需要将下载好的Ubuntu16 的ios镜像复制到/home/joe/目录下,如图所示。
这里写图片描述



然后执行命令

virsh define demo.xml

定义虚拟机及其配置信息。
这里写图片描述
如果这里报错说找不到什么kvm目录的话可能就是配置文件里的这一行参数有问题。

<emulator>/usr/bin/kvm</emulator>

有的系统可能目录是/usr/bin/qemu或者是/usr/libexec/qemu-kvm
可以都尝试一下。



然后执行命令,启动虚拟机

virsh start test_ubuntu

执行命令查看当前运行的虚拟机状态

virsh list

执行命令可以看到该虚拟机对应的端口号

virsh vncdisplay test_ubuntu

于是我们可以使用vnc viewer 远程连接虚拟机(test_ubuntu)
这里写图片描述


在使用vnc viewer连接虚拟机之前我们还需要知道当前的宿主机(也就是安装kvm的Ubuntu)的ip地址。所以我们使用命令 查看其网络信息如下。

ifconfig

这里写图片描述


查看到ip地址后,我们就可以使用之前下载好的vnc viewer客户端连接虚拟机(test_ubuntu)了。
这里写图片描述


由于是第一次开机,所以我们需要按照常规方法在test_ubuntu上安装Ubuntu16的操作系统。
这里写图片描述



安装的过程和在实体机上安装没有任何区别,我们选择install Ubuntu,然后最简单的方式就是一直点continue就好了,接下来就是漫长的等待了。
安装完成后需要重启,点击restart now 就能重启test_ubuntu。
这里写图片描述



重启之后,进入系统就是和宿主机一样熟悉的Ubuntu的桌面了。
这里写图片描述


来一张总图,左边是宿主机KVM_test,右边是客户机test_ubuntu
这里写图片描述


在能够成功访问客户机之后,我们先将客户机关闭。然后使用virsh命令对虚拟机的常见参数进行一些修改。
在宿主机中使用命令:

virsh shutdown test_ubuntu //关闭客户机

这里写图片描述


`virsh setmem test_ubuntu 940000 
//表示将test_ubuntu 的内存设置`为940000KB约为896MB

在test_ubuntu中打开system monitor查看机器资源如下。
这里写图片描述
对比之前的图,可以发现内存从992MB变成了886MB
(至于为什么设置的内存为896MB但是最后机器里只看到886MB我也不是很清楚,等以后研究清楚再更新)


我们再更改一下cpu的个数试试,使用命令:

virsh setvcpus test_ubuntu 4 //设置4个虚拟cpu

这里写图片描述



出现了错误,提示说设置的cpu数不能大于定义的时候的cpu数。不过好像要调小cpu数也是不行的,会出现以下错误。
这里写图片描述



关于要提高和减少cpu数,貌似只能够在关机情况下,修改虚拟机的配置文件来解决。
使用命令:

virsh edit test_ubuntu 

然后将vcpu属性改成4,然后使用Ctrl+x保存退出。
这里写图片描述


再次启动客户机test_ubuntu,并查看资源值

virsh start test_ubuntu

并打开system monitor 可以看到如下图所示,cpu数从之前的2个变成了4个。
这里写图片描述



Virsh除了能够进行内存和cpu的管理之外,还可以进行其他的一些管理,下面列出一些常用的命令参数。

virsh list                    #显示本地活动虚拟机
virsh list –all               #显示本地所有的虚拟机(活动的+不活动的)
virsh define ubuntu.xml       #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)
virsh start ubuntu            #启动名字为ubuntu的非活动虚拟机
virsh create ubuntu.xml       #创建虚拟机(创建后,虚拟机立即执行,成为活动主机)
virsh suspend ubuntu          #暂停虚拟机
virsh resume ubuntu           #启动暂停的虚拟机
virsh shutdown ubuntu         #正常关闭虚拟机
virsh destroy ubuntu          #强制关闭虚拟机
virsh dominfo ubuntu          #显示虚拟机的基本信息
virsh domname 2               #显示id号为2的虚拟机名
virsh domid ubuntu            #显示虚拟机id号
virsh domuuid ubuntu          #显示虚拟机的uuid
virsh domstate ubuntu         #显示虚拟机的当前状态
virsh dumpxml ubuntu          #显示虚拟机的当前配置文件(可能和定义虚拟机时的配置不同,因为当虚拟机启动时,需要给虚拟机分配id号、uuid、vnc端口号等等)
virsh setmem ubuntu 512000    #给不活动虚拟机设置内存大小
virsh setvcpus ubuntu 4       #给不活动虚拟机设置cpu个数
virsh edit ubuntu             #编辑配置文件(一般是在刚定义完虚拟机之后)

参数说明:
help 显示该命令的说明
quit 结束 virsh ,回到 Shell
connect 连接到指定的虚拟机服务器
create 启动一个新的虚拟机
destroy 删除一个虚拟机
start 开启(已定义的)非启动的虚拟机
define 从 XML 定义一个虚拟机
undefine 取消定义的虚拟机
dumpxml 转储虚拟机的设置值
list 列出虚拟机
reboot 重新启动虚拟机
save 存储虚拟机的状态
restore 回复虚拟机的状态
suspend 暂停虚拟机的执行
resume 继续执行该虚拟机
dump 将虚拟机的内核转储到指定的文件,以便进行分析与排错
shutdown 关闭虚拟机
setmem 修改内存的大小
setmaxmem 设置内存的最大值
setvcpus 修改虚拟处理器的数量

参考资料:
http://blog.csdn.net/panfengyun12345/article/details/16878873
http://blog.sina.com.cn/s/blog_999d1f4c0101f00g.html

以上是关于如何使用KVM libvirt命令管理虚拟机的主要内容,如果未能解决你的问题,请参考以下文章

使用libvirt工具栈管理kvm虚拟机

如何给运行的kvm虚拟机做快照

如何通过python创建kvm虚拟机

使用libvirt命令行管理虚拟机

KVM管理虚拟机命令

KVM的管理命令