KVM之管理工具
1. 安装libvirt工具
1. 编译安装
需要在libvirt官网上下载源码
2. yum安装
yum install -y libvirt
2. libvirt和libvirtd的配置
1. libvirt的配置文件
1. /etc/libvirt/libvirt.conf 用来配置一些常用libvirt连接的别名
uri_aliases = [
"hail=qemu+ssh://root@hail.cloud.example.com/system",
"sleet=qemu+ssh://root@sleet.cloud.example.com/system",
]
service libvirtd reload 重新加载服务
virsh -c hail
在代码中调用libvirt API时也可以使用这个别名来建立连接,如python
conn = libvirt.openReadOnly('hail')
2. /etc/libvirt/libvirtd.conf libvirt守护进程的配置文件
3. /etc/libvirt/qemu.conf libvirt对QEMU的驱动的配置文件
4. /etc/libvirt/qemu 使用QEMU驱动的域的配置文件
2. libvirtd的使用
使用service或者systemctl命令管理
3. libvirt域的XML配置文件
1. 例子
<domain type='kvm'>
<name>cento7new</name>
<uuid>07540a94-4637-46ea-bf40-b409712517b2</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
</features>
<cpu mode='custom' match='exact' check='partial'>
<model fallback='allow'>core2duo</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/kvm/vfs/vm1.raw'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hda' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<interface type='network'>
<mac address='52:54:00:8e:b0:58'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<channel type='unix'>
<target type='virtio' name='org.qemu.guest_agent.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<address type='virtio-serial' controller='0' bus='0' port='2'/>
</channel>
<input type='tablet' bus='usb'>
<address type='usb' bus='0' port='1'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' autoport='yes'>
<listen type='address'/>
<image compression='off'/>
</graphics>
<sound model='ich6'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<address type='usb' bus='0' port='3'/>
</redirdev>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/urandom</backend>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</rng>
</devices>
</domain>
2. CPU的配置
<vcpu placement='static'>2</vcpu> 指定客户机vCPU的个数
3. 内存的配置
<memory unit='KiB'>1048576</memory> 最大可用内存
<currentMemory unit='KiB'>1048576</currentMemory> 表示启动时分配给客户机使用的内存
4. 客户机系统类型和启动顺序
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
<boot dev='hd'/>
</os>
5. 网络的配置
1. 桥接方式
<interface type='bridge'>
<mac address='52:54:00:8e:b0:58'/>
<source bridge='br0'/> 使用宿主机的br0网络接口来建立网桥
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
2. NAT方式
<interface type='network'>
<mac address='52:54:00:8e:b0:58'/>
<source network='default'/> 使用默认的网络配置,客户机将会分配到192.168.122.0/24网段中的一个IP地址
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
NAT方式的默认配置文件 /usr/share/libvirt/networks/default.xml
查看网桥的使用情况 brctl show
6. 存储的配置
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/kvm/vfs/vm1.raw'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
3. virsh客户端
virsh这个命令行工具使用libvirt API实现了很多命令来管理Hypervisor,节点和域
1. 域管理的命令
list 列出当前节点上所有域的列表
domstate <ID或Name或UUID> 获取一个域的运行状态
dominfo <ID> 获取一个域的基本信息
dommemstat <ID> 获取一个域的内存使用情况的统计信息
setmem <ID> 设置一个域的内存大小(不能超过最大内存)
vcpuinfo <ID> 获取一个域的vCPU的基本信息
vcpupin <ID> <vCPU> <pCPU> 将一个域的vCPU绑定到某个物理CPU上运行
setvcpus <ID> <vCPU-num> 设置一个域的vCPU的个数
vncdisplay <ID> 获取一个域的VNC连接IP地址和端口
create <dom.xml> 根据域的XML配置文件创建一个域
suspend <ID> 暂停一个域名
resume <ID> 唤醒一个域名
shutdown <ID> 让一个域执行关机操作
reboot <ID> 让一个域重启
destroy <ID> 立刻摧毁一个域
save <ID> <file.img> 保存一个运行中的域的状态到一个文件中
restore <file.img> 从一个被保存的文件中恢复一个域的运行
migrate <ID> <dest_url> 将一个域迁移到另外一个目的地址
dumpxml <ID> 以XML格式转存出一个域的信息到标准输出中
attach-device <ID> <device.xml> 向一个域添加XML文件中的设备(热插拔)
detach-device <ID> <device.xml> 将XML文件中的设备从一个域中删除
console <ID> 连接到一个域的控制台
2. 宿主机和Hypervisor的管理命令
version 显示libvirt和Hypervisor的版本信息
sysinfo 以XML格式打印宿主机系统的信息
nodeinfo 显示该节点的基本信息
uri 显示当前连接的URI
hostname 显示当前节点的主机名
capabilities 显示该节点宿主机和客户机的架构和特性
freecell 显示当前MUMA单元的可用空闲内存
nodememstats 显示该节点的某个内存单元使用情况的统计
connect <URI> 连接到URI表示的Hypervisor
nodecpustats <cpu-num> 显示该节点的某个CPU使用情况的统计
qemu-attach <pid> 根据PID添加一个QEMU进程到libvirt中
3. 网络的管理命令
iface-list 显示物理主机的网络接口列表
iface-mac <if-name> 根据网络接口名称查询其对应的MAC地址
iface-name <MAC> 根据MAC地址查询对应的网络接口名称
iface-edit <if-name or uuid> 编辑一个物理主机的网络接口XML配置文件
iface-destroy <if-name or uuid> 关闭宿主机上一个物理网络接口
net-list 列出libvirt管理的虚拟网络
net-info <net-name or uuid> 根据名称查询一个虚拟网络的基本信息
net-uuid <net-name> 根据名称查询一个虚拟网络的UUID
net-name <net-UUID> 根据UUID查询一个虚拟网络的名称
net-create <net.xml> 根据一个网络XML配置文件创建一个虚拟网络
net-edit <net-name or uuid> 编辑一个虚拟网络的XML配置文件
net-destroy <net-name or uuid> 销毁一个虚拟网络
4. 存储池和存储卷的管理命令
pool-list 显示出libvirt管理的存储池
pool-info <pool-name> 根据一个存储池名称查询其基本信息
pool-uuid <pool-name> 根据存储池名称查询其UUID
pool-create <pool.xml> 根据XML配置文件的信息创建一个存储池
pool-edit <pool-name or uuid> 编辑一个存储池的XML配置文件
pool-destroy <pool-name or uuid> 关闭一个存储池
pool-delete <pool-name or uuid> 删除一个存储池
vol-list <pool-name or uuid> 查询一个存储池中的存储卷的信息
vol-name <vol-key or path> 查询一个存储卷的名称
vol-info --pool <pool> <vol-name or key> 查询一个存储卷的信息
vol-path --pool <pool> <vol-name or key> 查询一个存储卷的路径
vol-create <vol.xml> 根据XML配置文件创建一个存储池
vol-clone <vol-name-path> <name> 克隆一个存储卷
vol-delete <vol-name or key or path> 删除一个存储卷
4. virt-manager
使用Python语言开发的,用于管理虚拟机的图形化的软件。
1. 安装virt-manager
yum install virt-manager -y
2. 其他操作看另外一篇文章
5. virt-install命令工具
1. 通用选项
-n NAME, --name=NAME 虚拟机名称
-r MEMORY, --ram=MEMORY 以MB为单位为客户端事件分配的内存
--vcpus=VCPUS 配置虚拟机的虚拟CPU(vcpu)数量,如:
--vcpus 5
--vcpus 5, maxcpus=10
--vcpus socket=2,cores=4,threads=2
--cpuset=CPUSET Set which physical CPUs domain can use.
--cpu=CPU CPU型号及功能,如:--cpu coreduo,+x2apic
--description=DESCRIPTION 在生成的XML中保存的可读VM描述。
--security=SECURITY 设定域安全驱动器配置。
--numatune=NUMATUNE 为域进程调整NUMA策略。
2. 安装方法选项
-c CDROM, --cdrom=CDROM 光驱安装介质
-l LOCATION, --location=LOCATION
安装源(例如:nfs:host:/path、http://host/path、ftp://host/path)
--pxe 使用 PXE 协议从网络引导
--import 在磁盘映像中构建客户机
--livecd 将光驱介质视为 Live CD
-x EXTRA, --extra-args=EXTRA
附加到使用--location引导的内核的参数
--os-type=DISTRO_TYPE
操作系统类型,'linux'、'unix'、'windows'
--os-variant=DISTRO_VARIANT
操作系统版本,如: 'fedora6','rhel5', 'solaris10', 'win2k'
--boot=BOOTOPTS 自选配置后安装引导顺序、菜单、永久kernel引导,等等。
3. 存储配置
--disk=DISKOPTS 用各种选项指定存储。 Ex.
--disk path=/my/existing/disk
--disk path=/my/new/disk,format=qcow2,size=5,sparse (单位GB)
--disk vol=poolname:volname,device=cdrom,bus=scsi,...
--nodisks 不要为该客户端设置任何磁盘。
--filesystem=FILESYSTEMS
将主机目录传递给虚拟机。例如:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
4. 网络配置
-w NETWORK, --network=NETWORK
配置客户网络接口。 Ex:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--nonetworks 不要为该客体创建网络接口。
5. 图形配置
--graphics=GRAPHICS
配置虚拟机显示设置。例如:
--graphics vnc
--graphics spice,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--noautoconsole 不要自动尝试连接到客户端控制台
6. 其他设备
--serial=SERIALS 配置虚拟机串口设备
--parallel=PARALLELS 配置虚拟机并口设备
--channel=CHANNELS 配置虚拟机沟通频道
--console=CONSOLES 配置虚拟机与主机之间的文本控制台连接
--host-device=HOSTDEVS 配置与客户相连的物理主机设备
--soundhw=SOUNDHW 配置客户声音设备仿真
--watchdog=WATCHDOG 配置虚拟机 watchdog 设备
--video=VIDEO 配置虚拟机视频硬件。
--smartcard=SMARTCARD 配置虚拟机智能卡设备。
例如:--smartcard mode=passthrough
--redirdev=REDIRDEV Configure a guest redirection device.
例如:--redirdev usb,type=tcp,server=192.168.1.1:4000

浙公网安备 33010602011771号