Linux入门攻坚——83、kvm虚拟化-3
qemu-kvm只能在终端进行虚拟机的管理,要实现远程管理虚拟机,需要使用另一套工具栈:libvirt
libvirt工具栈:
每个被管理的Host中,需要启动libvirtd,相当于一个agent,各种管理工具远程连接到libvirtd,也就是通过libvirtd来管理KVM。
libvirt是一个通用的虚拟机管理工具栈,支持的虚拟化技术:KVM, XEN, VMWARE, Qemu,LXC, OpenVZ;
libvirt中的术语:
node: 指物理节点
hypervisor:虚拟机监控器
domain: vm instances
安装:yum install libvirt libvirt-client virt-install virt-manager
libvirt是一个虚拟化的共享库,其他工具依赖这个库,除了这几个工具,还有其他工具包,如
virt-top、virt-v2v、virt-viewer、virt-who、 virt-what等等。
看一下依赖关系:
libvirtd是在libvirt-daemon包中:
启动libvirtd:systemctl start libvirtd.service
libvirt和libvirtd的配置文件:
libvirt配置文件:/etc/libvirt/libvirt.conf
libvirtd配置文件:/etc/libvirt/libvirtd.conf
libvirt是通用组件,是库文件包,而libvirtd是守护进程。
virsh:一个虚拟机的命令行管理客户端,可以实现远程管理,依赖的是一个xml格式的虚拟机配置文件;
virt-install:虚拟机的安装工具,实现一个虚拟机的安装,并生成虚拟机的xml配置文件;
guestfish:对虚拟机的磁盘映像文件进行管理的工具;在libguestfs-tools包中。
在/etc/libvirt目录下有qemu子目录,是用于管理qemu虚拟机的各种虚拟化,其中network用于管理网络的虚拟化。
virsh命令初使用:virsh list,显示已有的虚拟机
virt-manager:直接打开一个图形界面来管理虚拟机
virt-manager &
其中显示的QEMU/KVM就是Hypervisor本身:
新建虚拟机
后续类似VMwareWorkstation的操作。
Hypervisor的访问路径:使用virsh命令管理虚拟机,实际是连接到Hypervisor上进行的管理,包括管理本地和远程,连接到Hypervisor需要使用URL。
本地URL:
driver[+transport]:///[path][?extral-param]
driver: 驱动名称,例如qemu, xen, lxc
transport:传输方式
kvm使用qemu驱动,使用格式qemu:///system, 例如qemu:///system
远程URL:
driver[+transport]://[user@][host][:port]/[path][?extral-param]
例如:qemu://172.16.100.6/system
qemu+ssh://root@172.16.100.6/system
qemu+tcp://172.16.100.6/system
virt-manager中添加的远程主机:
virt-install:命令行虚拟机安装管理工具,能够为KVM、Xen或其它支持libvirt API的hypervisor创建虚拟机并完成GuestOS安装;此外,它能够基于串行控制台、VNC或SDL支持文本或图形安装界面。安装过程可以使用本地的安装介质如CDROM,也可以通过网络方式如NFS、HTTP或FTP服务实现。对于通过网络安装的方式,virt-install可以自动加载必要的文件以启动安装过程而无须额外提供引导工具。当然,virt-install也支持PXE方式的安装过程,也能够直接使用现有的磁盘映像直接启动安装过程。
virt-install命令有许多选项,选项大体可分为几大类:
◇ 一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等;
● -n NAME, --name=NAME:虚拟机名称,需全局惟一;
● -r MEMORY, --ram=MEMORY:虚拟机内在大小,单位为MB;
● --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU个数及相关配置;
●--cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;
◇ 安装方法:指定安装方法、GuestOS类型等;
● -c CDROM, --cdrom=CDROM:光盘安装介质;
● -l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如http://ip/cobbler/ks_mirror/CentOS-7-x86_64;
● --pxe:基于PXE完成安装;
● --livecd: 把光盘当作LiveCD;
● --os-type=DISTRO_TYPE:操作系统类型,如linux、unix或windows等;
● --os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;
● -x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,--extra-args "ks=http://ip/class.cfg"
● --boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 ;例如:
--boot cdrom,hd,network:指定引导次序;
--boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”:指定启动系统的内核及initrd文件;
--boot loader=bios:指定虚拟机使用的bios;
◇ 存储配置:指定存储类型、位置及属性等;
● --disk=DISKOPTS:指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;常用的选项有:
device:设备类型,如cdrom、disk或floppy等,默认为disk;
bus:磁盘总线类型,其值可以为ide、scsi、usb、virtio或xen;
perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
size:新建磁盘映像的大小,单位为GB;
cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
format:磁盘映像格式,如raw、qcow2、vmdk等;
sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
● --nodisks:不使用本地磁盘,在LiveCD模式中常用;
◇ 网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;
● -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
network=NAME:连接至名为“NAME”的网络;
其它常用的选项还有:
model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;
mac:固定的MAC地址;省略此选项时将使用随机地址,但无论何种方式,对于KVM来说,其前三段必须为52:54:00;
● --nonetworks:虚拟机不使用网络功能;
◇ 图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;
● --graphics TYPE,opt1=val1,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;
TYPE:指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc;
port:TYPE为vnc或spice时其监听的端口;
listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值;
password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;
● --noautoconsole:禁止自动连接至虚拟机的控制台;
◇ 设备选项:指定文本控制台、声音设备、串行接口、并行接口、显示接口等;
● --serial=CHAROPTS:附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项,格式为“--serial type,opt1=val1,opt2=val2,...”,例如:
--serial pty:创建伪终端;
--serial dev,path=HOSTPATH:附加主机设备至此虚拟机;
--video=VIDEO:指定显卡设备模型,可用取值为cirrus、vga、qxl或vmvga;
◇ 虚拟化平台:虚拟化模型(hvm或paravirt)、模拟的CPU平台类型、模拟的主机类型、hypervisor类型(如kvm、xen或qemu等)以及当前虚拟机的UUID等;
● -v, --hvm:当物理机同时支持完全虚拟化和半虚拟化时,指定使用完全虚拟化;
● -p, --paravirt:指定使用半虚拟化;
● --virt-type:使用的hypervisor,如kvm、qemu、xen等;所有可用值可以使用’virsh capabilities’命令获取;
◇ 其它:
● --autostart:指定虚拟机是否在物理启动后自动启动;
● --print-xml:如果虚拟机不需要安装过程(--import、--boot),则显示生成的XML而不是创建此虚拟机;默认情况下,此选项仍会创建磁盘映像;
● --force:禁止命令进入交互式模式,如果有需要回答yes或no选项,则自动回答为yes;
● --dry-run:执行创建虚拟机的整个过程,但不真正创建虚拟机、改变主机上的设备配置信息及将其创建的需求通知给libvirt;
● -d, --debug:显示debug信息;
virt-install命令实际使用中,其必须提供的选项仅包括--name、--ram、--disk(也可是--nodisks)及安装过程相关的选项。此外,有时还需要使用括--connect=CONNCT选项来指定连接至一个非默认的hypervisor。
使用示例:
(1) # virt-install -n "centos7" -r 512 --vcpus=2 -l http://ip/cobbler/ks_mirror/CentOS-7.6-x86_64/ -x "ks=http://ip/centos7.x86_64.cfg" --disk path=/images/kvm/centos7.img,size=120,sparse --force -w bridge=br100,model=virtio
(2) 创建一个名为rhel的虚拟机,其hypervisor为KVM,内存大小为512MB,磁盘为8G的映像文件/var/lib/libvirt/images/rhel5.8.img,通过boot.iso光盘镜像来引导启动安装过程。
# virt-install \
--connect qemu:///system \
--virt-type kvm \
--name rhel \
--ram 512 \
--disk path=/var/lib/libvirt/images/rhel5.img,size=8 \
--graphics vnc \
--cdrom /tmp/boot.iso \
--os-variant rhel5
(3) 创建一个名为rhel6的虚拟机,其有两个虚拟CPU,安装方法为FTP,并指定了ks文件的位置,磁盘映像文件为稀疏格式,连接至物理主机上的名为brnet0的桥接网络:
# virt-install \
--connect qemu:///system \
--virt-type kvm \
--name rhel6 \
--ram 1024 \
--vcpus 2 \
--network bridge=brnet0 \
--disk path=/VMs/images/rhel6.img,size=120,sparse \
--location ftp://ip/rhel6/dvd \
--extra_args “ks=http://ip/rhel6.cfg” \
--os-variant rhel6 \
--force
(4) 利用已经存在的磁盘映像文件(已经有安装好的系统)创建一个名为rhel5.8的虚拟机: # virt-install --name rhel5.8 --ram 512 --disk /VMs/rhel5.8.img --import
注意:每个虚拟机创建后,其配置信息保存在/etc/libvirt/qemu目录中,文件名与虚拟机相同,格式为XML。
测试1:利用本地系统安装盘的ISO镜像安装虚拟机系统:
virt-install --connect qemu:///system --name centos6.10 --ram 512 --vcpus 2 --virt-type kvm --disk path=/images/kvm/centos610.qcow2 --cdrom /root/CentOS-6.10-x86_64-bin-DVD1.iso --boot loader=/usr/share/qemu-kvm/bios.bin --graphics vnc
这里有几点需要注意,一是需要安装virt-viewer包,否则无法启动监控端,二是配置--boot的loader选项,指定kvm使用的bios文件。
安装完成后,会在/etc/libvirt/qemu/下新建一个xml文件,代表已有的虚拟机。
启动虚拟机,使用virsh命令:
virsh create /etc/libvirt/qemu/centos6.10.xml#启动已有虚拟机
virsh list#查看运行中的虚拟机
virt-viewer id#链接到id号虚拟机
测试2:利用已有磁盘映像文件创建虚拟机cirros,即导入的方式
virt-install -n cirros3.6 -r 128 --os-variant linux --disk /images/kvm/cirros-0.3.6-x86_64-disk.img --boot loader=/usr/share/qemu-kvm/bios.bin --import
启动虚拟机还可以:
virsh --connect qemu:///system start cirros3.6|
virsh list
virt-viewer id
virsh命令:使用virsh --help查看virsh的帮助
分成多个模块:
Domain Management (help keyword 'domain')
Domain Monitoring (help keyword 'monitor')
Host and Hypervisor (help keyword 'host')
Interface (help keyword 'interface')
Network Filter (help keyword 'filter')
Networking (help keyword 'network')
Node Device (help keyword 'nodedev')
Secret (help keyword 'secret')
Snapshot (help keyword 'snapshot')
Storage Pool (help keyword 'pool')
Storage Volume (help keyword 'volume')
Virsh itself (help keyword 'virsh')
对域(Domain)的管理,看帮助使用:virsh help domain
有很多子命令,了解几个:
attach-disk 附加磁盘设备
创建一个磁盘映像文件:
qemu-img create -f qcow2 -o size=2G,preallocation=metadata test.qcow2
当前虚拟机中的磁盘:
直接附加到一个虚拟机上:
virsh attach-disk 14 /images/kvm/test.qcow2 vda --targetbus virtio
detach-disk 分离磁盘设备
virsh detach-disk 14 vda
attch-interface 附加新网络接口
virsh attach-interface 14 bridge br0
detach-interface 分离网络接口
virsh detach-interface 14 bridge --mac xx:xx...xx
virt-install:创建虚拟机,并安装OS;也可创建虚拟机并导入Image文件;
总结virsh的几个常用命令:
◇ 根据xml文件创建:
create:创建并启动
define:创建但不启动
◇ 关闭domain:
destroy
shutdown
reboot
◇ 删除domain:
undefine
◇ 连接至console:
console
◇ 列出:
list
◇ 附加或拆除disk:
attach-disk
detach-disk
◇ 附加或拆除网卡:
attach-interface
detach-interface
◇ 保存状态至磁盘文件或从磁盘文件恢复:
save
restore
◇ 暂停于内存或继续运行:
suspend
resume
virt-manager:GUI工具
管理kvm虚拟机的工具:https://linux-kvm.org/page/Management_Tools
CloudStack
ConVirt
Enomaly
Eucalyptus
Foreman
Ganeti
GKVM
Karesansui
kimchi
Kubevirt
kvm-admin
kvm-wrapper
kvmadm
kvmupdown
Mist.io
Morpheus
nbsvm
Nimbula Director
op5
OpenNebula
OpenNode
openQRM
oVirt
Plain qemu/kvm
Platform9 Managed OpenStack
Proxmox VE
PVM
Red Hat Virtualization / RHV
SolusVM
Stackops Openstack Distro
UVMM
virsh
Virtualbricks
VM-King
VMM / Virtual Machine Manager
VMM's supporting tools virt-install/clone/convert
vmmaestro
VMmanager
WebVirtMgr
Witsbits