KVM 管理工具:libvirt


libvirt 简介

libvirt 是目前使用最为广泛的对 KVM 虚拟机进行管理的工具和应用程序接口。
 
 
 
libvirt 可以支持多种 hypervisor,包括 Xen,Hyper-V 和 qemu-kvm 等。同时,相比于使用 qemu 通过参数指定创建虚拟机的方式,使用 libvirt 创建虚机更简单,更人性化。
 
libvirt 由应用程序接口 API,守护进程 libvirtd 和 libvirt 的默认管理工具组成。其中,libvirt API 为其它虚机管理工具,如 virsh,virt-manager 等提供应用程序接口,使得这些虚机管理工具通过调用 libvirt 的 API 实现虚机的管理。libvirtd 负责执行节点上虚机(domain) 的管理工作。libvirt 的默认管理工具是 virsh,它是 libvirt 默认提供的虚机的管理工具,通过 virsh 提供的一系列接口命令可以实现对虚机的管理。

libvirt XML 配置

libvirt 有几个重要概念,分别是:
  • 节点 Node:节点是虚机(domain) 运行的物理机器,hypervisor 也运行在节点之上。
  • domain: 虚机在 libvirt 中表示为 domain(域),一个 domain 就是一个虚机。
  • hypervisor:虚拟机监控器,KVM 就是使用硬件辅助的全虚拟化方案的 hepervisor。
 
在 libvirt 中创建 domain 的流程是:通过 XML 文件定义好 domain 的配置,然后,virsh 根据定义好的 XML 文件创建指定 domain。
 
domain XML 配置
disk(磁盘)
任何磁盘设备,包括软盘(floppy)、硬盘(hard disk)、光驱(cdrom)或者半虚拟化驱动都使用 元素来定义。方式:
。其中:
type 用来指定device source 的类型:"file", "block", "dir", "network", 或者 "volume"。具体的 source 由 标签定义。
device 用来指定 device target 的类型:"floppy", "disk", "cdrom", and "lun", 默认为 "disk" 。具体的 target 由 标签定义。
(1)volume 类型的 disk
'volume' device='disk'>
'qemu' type='raw'/>
'blk-pool0' volume='blk-pool0-vol0'/>
'hdk' bus='ide'/>
(2)file 类型的 disk
'file' snapshot='external'>
"tap" type="aio" cache="default"/>
file='/var/lib/xen/images/fv0' startupPolicy='optional' />
'hda' bus='ide'/>
(3)block 类型的 disk
'block' device='cdrom'>
'qemu' type='raw'/>
'hdd' bus='ide' tray='open'/>

(4)network 类型的 disk
'network' device='cdrom'>
'qemu' type='raw'/>
"http" name="url_path">
"hostname" port="80"/>

'hde' bus='ide' tray='open'/>

Host device assignment (主机设备分配)
'subsystem' type='usb'> #USB 设备直接分配
'optional'>
id='0x1234'/>
id='0xbeef'/>

'2'/>

'subsystem' type='pci' managed='yes'> #PCI 设备直接分配

'0x0000' bus='0x06' slot='0x02' function='0x0'/> '1'/> 'on' file='/etc/fake/boot.bin'/>
Network interface (网卡)
有几种 interface 类型:
(1)type = ‘network’ 定义一个连接 Virtual network 的 interface

'network'>
'default'/> #虚拟网络的名称为 ‘default’

...
'network'>
'default' portgroup='engineering'/>
'vnet7'/>
"00:11:22:33:44:55"/>

'09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>

 

(2)type=‘birdge’ 定义一个 Bridge to LAN(桥接到物理网络)的interface:前提是主机上存在一个 bridge,该 bridge 已经连到物理 LAN
'bridge'> #连接到 br0
'br0'/>

'bridge'> #连接到br1
'br1'/>
'vnet7'/>
"00:11:22:33:44:55"/>

'bridge'> #连接到 Open vSwith bridge ovsbr
'ovsbr'/>
'openvswitch'>
'menial' interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>

(3)type=‘ethernet’定义一个使用指定脚本连接到 LAN 的 interface

'ethernet'>
'vnet7'/>

                    
                    

你可能感兴趣的:(KVM 管理工具:libvirt)