Linux入门攻坚——83、kvm虚拟化-3

📅 2026/7/24 21:20:00
Linux入门攻坚——83、kvm虚拟化-3
qemu-kvm只能在终端进行虚拟机的管理要实现远程管理虚拟机需要使用另一套工具栈libvirtlibvirt工具栈每个被管理的Host中需要启动libvirtd相当于一个agent各种管理工具远程连接到libvirtd也就是通过libvirtd来管理KVM。libvirt是一个通用的虚拟机管理工具栈支持的虚拟化技术KVM, XEN, VMWARE, QemuLXC, OpenVZ;libvirt中的术语node: 指物理节点hypervisor虚拟机监控器domain: vm instances安装yum install libvirt libvirt-client virt-install virt-managerlibvirt是一个虚拟化的共享库其他工具依赖这个库除了这几个工具还有其他工具包如virt-top、virt-v2v、virt-viewer、virt-who、 virt-what等等。看一下依赖关系libvirtd是在libvirt-daemon包中启动libvirtdsystemctl start libvirtd.servicelibvirt和libvirtd的配置文件libvirt配置文件/etc/libvirt/libvirt.conflibvirtd配置文件/etc/libvirt/libvirtd.conflibvirt是通用组件是库文件包而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。本地URLdriver[transport]:///[path][?extral-param]driver: 驱动名称例如qemu, xen, lxctransport传输方式kvm使用qemu驱动使用格式qemu:///system, 例如qemu:///system远程URLdriver[transport]://[user][host][:port]/[path][?extral-param]例如qemu://172.16.100.6/systemqemussh://root172.16.100.6/systemqemutcp://172.16.100.6/systemvirt-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, --nameNAME虚拟机名称需全局惟一● -r MEMORY, --ramMEMORY虚拟机内在大小单位为MB● --vcpusVCPUS[,maxvcpusMAX][,sockets#][,cores#][,threads#]VCPU个数及相关配置●--cpuCPUCPU模式及特性如coreduo等可以使用qemu-kvm -cpu ?来获取支持的CPU模式◇ 安装方法指定安装方法、GuestOS类型等● -c CDROM, --cdromCDROM光盘安装介质● -l LOCATION, --locationLOCATION安装源URL支持FTP、HTTP及NFS等如http://ip/cobbler/ks_mirror/CentOS-7-x86_64● --pxe基于PXE完成安装● --livecd: 把光盘当作LiveCD● --os-typeDISTRO_TYPE操作系统类型如linux、unix或windows等● --os-variantDISTRO_VARIANT某类型操作系统的变体如rhel5、fedora8等● -x EXTRA, --extra-argsEXTRA根据--location指定的方式安装GuestOS时用于传递给内核的额外选项例如指定kickstart文件的位置--extra-args kshttp://ip/class.cfg● --bootBOOTOPTS指定安装过程完成后的配置选项如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 例如--boot cdrom,hd,network指定引导次序--boot kernelKERNEL,initrdINITRD,kernel_args”console/dev/ttyS0”指定启动系统的内核及initrd文件--boot loaderbios指定虚拟机使用的bios◇ 存储配置指定存储类型、位置及属性等● --diskDISKOPTS指定存储设备及其属性格式为--disk /some/storage/path,opt1val1opt2val2等常用的选项有device设备类型如cdrom、disk或floppy等默认为diskbus磁盘总线类型其值可以为ide、scsi、usb、virtio或xenperms访问权限如rw、ro或sh共享的可读写默认为rwsize新建磁盘映像的大小单位为GBcache缓存模型其值有none、writethrouth缓存读及writeback缓存读写format磁盘映像格式如raw、qcow2、vmdk等sparse磁盘映像使用稀疏格式即不立即分配指定大小的空间● --nodisks不使用本地磁盘在LiveCD模式中常用◇ 网络配置指定网络接口的网络类型及接口属性如MAC地址、驱动模式等● -w NETWORK, --networkNETWORK,opt1val1,opt2val2将虚拟机连入宿主机的网络中其中NETWORK可以为bridgeBRIDGE连接至名为“BRIDEG”的桥设备networkNAME连接至名为“NAME”的网络其它常用的选项还有modelGuestOS中看到的网络设备型号如e1000、rtl8139或virtio等mac固定的MAC地址省略此选项时将使用随机地址但无论何种方式对于KVM来说其前三段必须为52:54:00● --nonetworks虚拟机不使用网络功能◇ 图形配置定义虚拟机显示功能相关的配置如VNC相关配置● --graphics TYPE,opt1val1,opt2val2指定图形显示相关的配置此选项不会配置任何显示硬件如显卡而是仅指定虚拟机启动后对其进行访问的接口TYPE指定显示类型可以为vnc、sdl、spice或none等默认为vncportTYPE为vnc或spice时其监听的端口listenTYPE为vnc或spice时所监听的IP地址默认为127.0.0.1可以通过修改/etc/libvirt/qemu.conf定义新的默认值passwordTYPE为vnc或spice时为远程访问监听的服务进指定认证密码● --noautoconsole禁止自动连接至虚拟机的控制台◇ 设备选项指定文本控制台、声音设备、串行接口、并行接口、显示接口等● --serialCHAROPTS附加一个串行设备至当前虚拟机根据设备类型的不同可以使用不同的选项格式为“--serial type,opt1val1,opt2val2,...”例如--serial pty创建伪终端--serial dev,pathHOSTPATH附加主机设备至此虚拟机--videoVIDEO指定显卡设备模型可用取值为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及安装过程相关的选项。此外有时还需要使用括--connectCONNCT选项来指定连接至一个非默认的hypervisor。使用示例(1) # virt-install -n centos7 -r 512 --vcpus2 -l http://ip/cobbler/ks_mirror/CentOS-7.6-x86_64/ -x kshttp://ip/centos7.x86_64.cfg --disk path/images/kvm/centos7.img,size120,sparse --force -w bridgebr100,modelvirtio(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,size8 \--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 bridgebrnet0 \--disk path/VMs/images/rhel6.img,size120,sparse \--location ftp://ip/rhel6/dvd \--extra_args “kshttp://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 listvirt-viewer idvirsh命令使用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 size2G,preallocationmetadata test.qcow2当前虚拟机中的磁盘直接附加到一个虚拟机上virsh attach-disk 14 /images/kvm/test.qcow2 vda --targetbus virtiodetach-disk 分离磁盘设备virsh detach-disk 14 vdaattch-interface 附加新网络接口virsh attach-interface 14 bridge br0detach-interface 分离网络接口virsh detach-interface 14 bridge --mac xx:xx...xxvirt-install创建虚拟机并安装OS也可创建虚拟机并导入Image文件总结virsh的几个常用命令◇ 根据xml文件创建create创建并启动define创建但不启动◇ 关闭domaindestroyshutdownreboot◇ 删除domainundefine◇ 连接至consoleconsole◇ 列出list◇ 附加或拆除diskattach-diskdetach-disk◇ 附加或拆除网卡attach-interfacedetach-interface◇ 保存状态至磁盘文件或从磁盘文件恢复saverestore◇ 暂停于内存或继续运行suspendresumevirt-managerGUI工具管理kvm虚拟机的工具https://linux-kvm.org/page/Management_ToolsCloudStackConVirtEnomalyEucalyptusForemanGanetiGKVMKaresansuikimchiKubevirtkvm-adminkvm-wrapperkvmadmkvmupdownMist.ioMorpheusnbsvmNimbula Directorop5OpenNebulaOpenNodeopenQRMoVirtPlain qemu/kvmPlatform9 Managed OpenStackProxmox VEPVMRed Hat Virtualization / RHVSolusVMStackops Openstack DistroUVMMvirshVirtualbricksVM-KingVMM / Virtual Machine ManagerVMMs supporting tools virt-install/clone/convertvmmaestroVMmanagerWebVirtMgrWitsbits