目录
Libvirt
Libvirt 是目前使用最为广泛的异构虚拟化管理工具,由 libvirt API 函数库、libvirtd Daemon 这 2 个关键部分组成,还具有一个默认命令行管理工具 virsh。
- https://libvirt.org/
libvirt API 函数库
Libvirt 采用了面向驱动的架构设计,北向提供了统一的虚拟化资源管理 API,南向通过不同的驱动程序来对接异构的底层虚拟化技术。同时,libvirt API 为多种高级编程语言都提供了编程接口,包括 C、Python、Java、Perl、Ruby 等,具有非常强的可扩展性。
除了官方提供的多种管理工具之外(包括:virsh CLI、virt-manager、virt-viewer、vist-install ),OpenStack 也通过 libvirt API 提供的跨虚拟化平台能力,可以同时支持 QEMU-KVM、VMware、Xen 等多种虚拟化实现。
libvirtd Daemon
libvirtd Daemon 是一个 Multi-Drivers 软件架构,围绕虚拟机这一核心对象提供了计算、存储、网络、安全、监控等虚拟化资源的管理功能。
- 虚拟机管理:用于创建、删除、修改、暂停、恢复、迁移和监视 VM。
- 虚拟网络管理:用于创建、删除和修改虚拟网络,包括 Bridge/OvS、NAT、VLAN 网络。
- 存储管理:用于管理 VM 的 QCOW2 镜像和虚拟磁盘,包括创建、删除、修改和查看存储卷。
- 集群管理:用于管理多台运行了 libvirtd Daemon 的 Host Cluster 上的 VM,可以通过远程连接的方式进行管理。
- 安全策略:用于控制对 Host 和 VM 的访问权限,防止未经授权的访问。
- 监控和统计:用于获取 Host 和 VM 的状态信息和统计数据,包括 CPU 使用率、内存使用率、网络流量、磁盘 I/O 等。
软件架构
libvirtd 的软件架构包括了以下核心组件:
- 监听器(Listener):监听客户端连接请求。默认情况下,libvirtd 使用 TCP/IP 协议,并在本地主机上监听 16509 端口。
- 驱动程序(Driver):libvirtd 使用驱动程序来与不同的虚拟化技术交互。
- 数据库(DB):存储虚拟机相关的信息。默认情况下,libvirtd 使用 SQLite,也支持其他数据库,如:MySQL、PostgreSQL。
权限模式
为了保障 HostOS 的安全性,libvirtd 可以在 2 种权限模式下运行:
- 系统模式:libvirtd 以 Root 权限运行,可以使用 libvirtd 的完整功能,虚拟出物理主机的各种设备。
- 会话模式:libvirtd 以 Non-root 权限运行,以普通系统用户的身份运行。
运行模式
为了支持集群管理和虚拟机迁移功能,libvirtd 具有 2 种运行模式:
- 本地控制管理:Application 和 libvirtd 在同一个 Host 上。
- 远程控制管理:Application 和 libvirtd 不再同一个 Host 上。Local libvirtd 和 Remote libvirtd 之间可以使用 TCP over SSH 协议进行安全通信。
virsh CLI
yum install -y virt-install
virsh list # 查看在运行的虚拟机。
virsh list --all # 查看所有虚拟机。
virsh console centos72 # 连接虚拟机的 Console。
virsh start centos72 # 启动虚拟机。
virsh reboot centos72 # 重新启动虚拟机。
virsh shutdown centos72 # 优雅关闭虚拟机。
virsh destroy centos72 # 强制关闭虚拟机。
virsh suspend centos72 # 暂停(挂起)虚拟机。
virsh resume centos72 # 恢复被挂起的虚拟机。
virsh undefine centos72 # 删除虚拟机的 XML 配置文件,但不删除虚拟机的磁盘文件。
virsh autostart centos72 # 设置虚拟机随物理机一同启动。
virsh autostart --disable centos72 # 取消虚拟机的开机自启动。
virsh dumpxml centos72 # 查看虚拟机的配置文件。
virsh edit centos72 # 编辑虚拟机的配置文件。
virsh setvcpus # 动态配置虚拟机的 CPU。
virsh setmaxmem # 动态配置虚拟机的 Memory。
Domain XML
- https://libvirt.org/format.html
libvirtd 使用 XML 格式来保存一个 VM 所有的配置信息,下面是一个简单的示例:
<domain type='kvm'>
<name>myvm</name>
<memory unit='KiB'>1048576</memory>
<vcpu placement='static'>2</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type>
<boot dev='hd'/>
</os>
<devices>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/myvm.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='network'>
<mac address='52:54:00:9b:08:fa'/>
<source network='default'/>
<model type='virtio'/>
</interface>
</devices>
</domain>
- domain 根元素:其中,type=‘kvm’ 表示使用 KVM Hypervisor。
- name 元素:指定 VM 的名称。
- memory 元素:指定 VM 的 vMemory 大小,单位为 KiB。
- vcpu 元素:指定 VM 的 vCPU 个数,其中,placement=‘static’ 表示静态分配方式。
- os 元素:指定 VM 的操作系统类型和 boot 引导顺序。
-
devices 元素:指定 VM 的设备信息。
- disk 元素:指定 VM 的 vDisk 信息,包括:类型、文件路径、磁盘编号、驱动程序等信息。
- interface 元素:指定 VM 的 vNIC 信息,包括:虚拟网络、MAC 地址、驱动程序等信息。
disk 标签
虚拟机的磁盘有多种类型,包括:软盘(Floppy)、硬盘(Hard Disk)、光驱(cdrom)等。
标签格式:
<disk type='XXX' device='XXX'>
- type:指定 Device source 标签的类型,包括:file、block、dir、network、volume。
- device:指定 Device target 标签的类型,包括:floppy、disk、cdrom、lun,默认为 disk。
示例:
- volume disk
<disk type='volume' device='disk'>
<driver name='qemu' type='raw'/>
<source pool='blk-pool0' volume='blk-pool0-vol0'/>
<target dev='hdk' bus='ide'/>
</disk>
- file disk
<disk type='file' device='disk' snapshot='external'>
<driver name="tap" type="aio" cache="default"/>
<source file='/var/lib/xen/images/fv0' startupPolicy='optional' />
<target dev='hda' bus='ide'/>
</disk>
- block cdrom
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdd' bus='ide' tray='open'/>
<readonly/>
</disk>
- network cdrom
<disk type='network' device='cdrom'>
<driver name='qemu' type='raw'/>
<source protocol="http" name="url_path">
<host name="hostname" port="80"/>
</source>
<target dev='hde' bus='ide' tray='open'/>
<readonly/>
</disk>
network 元素
可以给 Libvirt 创建多种不同的 Networks,包括:Bridge、NAT、Route、Passthrough、hostdev 等等。
- Bridge 模式:支持 Linux Bridge、OvS Bridge、MACVTAP Bridge 等 Bridge 技术。
<network>
<name>host-bridge</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network>
- NAT 模式:将虚拟机 IP 转换为 Host IP。
<network>
<name>default</name>
<bridge name="virbr0" />
<forward mode="nat"/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254" />
</dhcp>
</ip>
<ip family="ipv6" address="2001:db8:ca2:2::1" prefix="64" />
</network>
- Route 模式:使用 Host Routing Table。
<network>
<name>local</name>
<bridge name="virbr1" />
<forward mode="route" dev="eth1"/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254" />
</dhcp>
</ip>
<ip family="ipv6" address="2001:db8:ca2:2::1" prefix="64" />
</network>
- Passthrough 模式:直通 Host 设备到虚拟机。
<forward mode='passthrough'>
<interface dev='eth10'/>
<interface dev='eth11'/>
<interface dev='eth12'/>
<interface dev='eth13'/>
<interface dev='eth14'/>
</forward>
- hostdev 模式:直接使用 Host 的设备。
<forward mode='hostdev' managed='yes'>
<driver name='vfio'/>
<address type='pci' domain='0' bus='4' slot='0' function='1'/>
<address type='pci' domain='0' bus='4' slot='0' function='2'/>
<address type='pci' domain='0' bus='4' slot='0' function='3'/>
</forward>
interface 元素
支持多种不同类型的虚拟机网卡接口,包括:Network、Bridge、Direct、hostdev 等等。
- Network Interface:定义一个连接到 Network 中的接口。
<devices>
<interface type='network'>
<source network='default'/>
</interface>
...
<interface type='network'>
<source network='default' portgroup='engineering'/>
<target dev='vnet7'/>
<mac address="00:11:22:33:44:55"/>
<virtualport>
<parameters instanceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
</virtualport>
</interface>
</devices>
- Bridge Interface:定义一个连接到 Bridge 中的接口。
<interface type='bridge'>
<source bridge='br0'/>
</interface>
<interface type='bridge'>
<source bridge='br1'/>
<target dev='vnet7'/>
<mac address="00:11:22:33:44:55"/>
</interface>
<interface type='bridge'>
<source bridge='ovsbr'/>
<virtualport type='openvswitch'>
<parameters profileid='menial' interfaceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
</virtualport>
</interface>
- Direct Interface :定义一个直接连到物理网卡的接口。
<interface type='direct' trustGuestRxFilters='no'>
<source dev='eth0' mode='vepa'/>
</interface>
- hostdev Interface:定义一个直接连到 PCI 物理网卡的接口。
<devices>
<interface type='hostdev' managed='yes'>
<driver name='vfio'/>
<source>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</source>
<mac address='52:54:00:6d:90:02'/>
<virtualport type='802.1Qbh'>
<parameters profileid='finance'/>
</virtualport>
</interface>
</devices>
Host device assignment 元素
针对不同的 hostdev 可以定义对应的主机设备分配方式。
# USB 设备直接分配
<hostdev mode='subsystem' type='usb'>
<source startupPolicy='optional'>
<vendor id='0x1234'/>
<product id='0xbeef'/>
</source>
<boot order='2'/>
</hostdev>
# PCI 设备直接分配
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x06' slot='0x02' function='0x0'/>
</source>
<boot order='1'/>
<rom bar='on' file='/etc/fake/boot.bin'/>
</hostdev>
Libvirt Public API
Management API
Connect
增:
- virConnectOpen
- virConnectOpenAuth
- virConnectOpenReadOnly
查:
- virConnectGetCPUModelNames
- virConnectGetCapabilities
- virConnectGetHostname
- virConnectGetLibVersion
- virConnectGetMaxVcpus
- virConnectGetSysinfo
- virConnectGetType
- virConnectGetURI
- virConnectGetVersion
- virConnectIsAlive
- virConnectIsEncrypted
- virConnectIsSecure
改:
- virConnectSetKeepAlive
- virConnectBaselineCPU
- virConnectCompareCPU
删:
- virConnectClose
Host
查:
- virNodeGetCPUMap
- virNodeGetCPUStats
- virNodeGetCellsFreeMemory
- virNodeGetFreeMemory
- virNodeGetInfo
- virNodeGetMemoryParameters
- virNodeGetMemoryStats
- virNodeGetSecurityModel
改:
- virInitialize
- virNodeSetMemoryParameters
- virNodeSuspendForDuration
Domain API
Domain
增:
- virDomainCreate
- virDomainCreateLinux
- virDomainCreateWithFiles
- virDomainCreateWithFlags
- virDomainCreateXML
- virDomainCreateXMLWithFiles
- virDomainDefineXML
- virDomainDefineXMLFlags
查:
- virConnectGetAllDomainStats
- virConnectGetDomainCapabilities
- virConnectListAllDomains
- virConnectListDefinedDomains
- virConnectListDomains
- virConnectNumOfDefinedDomains
- virConnectNumOfDomains
- virDomainBlockStat
- virDomainBlockStatsFlags
- virDomainGetAutostar
- virDomainGetBlkioParameters
- virDomainGetBlockInfo
- virDomainGetBlockIoTune
- virDomainGetBlockJobInfo
- virDomainGetCPUStats
- virDomainGetConnect
- virDomainGetControlInfo
- virDomainGetDiskErrors
- virDomainGetEmulatorPinInfo
- virDomainGetFSInfo
- virDomainGetHostname
- virDomainGetID
- virDomainGetIOThreadInfo
- virDomainGetInfo
- virDomainGetInterfaceParameters
- virDomainGetJobInfo
- virDomainGetJobStats
- virDomainGetMaxMemory
- virDomainGetMaxVcpus
- virDomainGetMemoryParameters
- virDomainGetMetadata
- virDomainGetName
- virDomainGetNumaParameters
- virDomainGetOSType
- virDomainGetSchedulerParameters
- virDomainGetSchedulerParametersFlags
- virDomainGetSchedulerType
- virDomainGetSecurityLabel
- virDomainGetSecurityLabelList
- virDomainGetState
- virDomainGetTime
- virDomainGetUUID
- virDomainGetUUIDString
- virDomainGetVcpuPinInfo
- virDomainGetVcpus
- virDomainGetVcpusFlags
- virDomainGetXMLDesc
- virDomainHasManagedSaveImage
- virDomainIOThreadInfoFree
- virDomainInterfaceAddresses
- virDomainInterfaceStats
- virDomainIsActive
- virDomainIsPersistent
- virDomainIsUpdated
- virDomainListGetStats
- virDomainLookupByID
- virDomainLookupByName
- virDomainLookupByUUID
- virDomainLookupByUUIDString
- virDomainMemoryPeek
- virDomainMemoryStats
- virDomainMigrateGetCompressionCache
- virDomainMigrateGetMaxSpeed
- virDomainPinEmulator
- virDomainPinIOThread
- virDomainPinVcpu
- virDomainPinVcpuFlags
- virDomainSaveImageGetXMLDesc
- virDomainStatsRecordListFree
改:
- virDomainAbortJob
- virDomainAddIOThread
- virDomainDelIOThread
- virDomainAttachDevice
- virDomainAttachDeviceFlags
- virDomainDetachDevice
- virDomainDetachDeviceFlags
- virDomainBlockCommit
- virDomainBlockCopy
- virDomainBlockJobAbort
- virDomainBlockJobSetSpeed
- virDomainBlockPeek
- virDomainBlockPull
- virDomainBlockRebase
- virDomainBlockResize
- virDomainCoreDump
- virDomainCoreDumpWithFormat
- virDomainFSFreeze
- virDomainFSInfoFree
- virDomainFSThaw
- virDomainFSTrim
- virDomainInjectNMI
- virDomainInterfaceFree
- virDomainManagedSave
- virDomainManagedSaveRemove
- virDomainMigrate
- virDomainMigrate2
- virDomainMigrate3
- virDomainMigrateSetCompressionCache
- virDomainMigrateSetMaxDowntime
- virDomainMigrateSetMaxSpeed
- virDomainMigrateToURI
- virDomainMigrateToURI2
- virDomainMigrateToURI3
- virDomainOpenChannel
- virDomainOpenConsole
- virDomainOpenGraphics
- virDomainOpenGraphicsFD
- virDomainPMSuspendForDuration
- virDomainPMWakeup
- virDomainReboot
- virDomainReset
- virDomainRestore
- virDomainRestoreFlags
- virDomainResume
- virDomainSave
- virDomainSaveFlags
- virDomainSaveImageDefineXML
- virDomainScreenshot
- virDomainSendKey
- virDomainSendProcessSignal
- virDomainShutdown
- virDomainShutdownFlags
- virDomainSuspend
- virDomainSetAutostart
- virDomainSetBlkioParameters
- virDomainSetBlockIoTune
- virDomainSetInterfaceParameters
- virDomainSetMaxMemory
- virDomainSetMemory
- virDomainSetMemoryFlags
- virDomainSetMemoryParameters
- virDomainSetMemoryStatsPeriod
- virDomainSetMetadata
- virDomainSetNumaParameters
- virDomainSetSchedulerParameters
- virDomainSetSchedulerParametersFlags
- virDomainSetTime
- virDomainSetUserPassword
- virDomainSetVcpus
- virDomainSetVcpusFlags
删:
- virDomainDestroy
- virDomainDestroyFlags
- virDomainFree
- virDomainUndefine
- virDomainUndefineFlags
- virDomainUpdateDeviceFlags
其他:
- virConnectDomainXMLFromNative
- virConnectDomainXMLToNative
Domain Snapshot
增:
- virDomainSnapshotCreateXML
查:
- virDomainHasCurrentSnapshot
- virDomainListAllSnapshots
- virDomainSnapshotCurrent
- virDomainSnapshotGetConnect
- virDomainSnapshotGetDomain
- virDomainSnapshotGetName
- virDomainSnapshotGetParent
- virDomainSnapshotGetXMLDesc
- virDomainSnapshotHasMetadata
- virDomainSnapshotIsCurrent
- virDomainSnapshotListAllChildren
- virDomainSnapshotListChildrenNames
- virDomainSnapshotListNames
- virDomainSnapshotLookupByName
- virDomainSnapshotNum
- virDomainSnapshotNumChildren
- virDomainSnapshotRef
改:
- virDomainRevertToSnapshot
删:
- virDomainSnapshotDelete
- virDomainSnapshotFree
Domain Event
- virConnectDomainEventDeregister
- virConnectDomainEventDeregisterAny
- virConnectDomainEventDeviceAddedCallback
- virConnectDomainEventDeviceRemovedCallback
- virConnectDomainEventAgentLifecycleCallback
- virConnectDomainEventBalloonChangeCallback
- virConnectDomainEventBlockJobCallback
- virConnectDomainEventCallback
- virConnectDomainEventDiskChangeCallback
- virConnectDomainEventGenericCallback
- virConnectDomainEventGraphicsCallback
- virConnectDomainEventIOErrorCallback
- virConnectDomainEventIOErrorReasonCallback
- virConnectDomainEventPMSuspendCallback
- virConnectDomainEventPMSuspendDiskCallback
Storage API
Strorage Pool
增:
- virStoragePoolBuild
- virStoragePoolCreate
- virStoragePoolCreateXML
- virStoragePoolDefineXML
查:
- virConnectFindStoragePoolSources
- virConnectListAllStoragePools
- virConnectListDefinedStoragePools
- virConnectListStoragePools
- virConnectNumOfDefinedStoragePools
- virConnectNumOfStoragePools
- virStoragePoolGetInfo
- virStoragePoolGetName
- virStoragePoolGetUUID
- virStoragePoolGetUUIDString
- virStoragePoolGetXMLDesc
- virStoragePoolIsActive
- virStoragePoolIsPersistent
- virStoragePoolLookupByName
- virStoragePoolLookupByUUID
- virStoragePoolLookupByUUIDString
- virStoragePoolLookupByVolume
- virStoragePoolRef
改:
- virStoragePoolRefresh
- virStoragePoolSetAutostart
删:
- virStoragePoolDelete
- virStoragePoolDestroy
- virStoragePoolFree
- virStoragePoolUndefine
其他:
- virStoragePoolGetAutostart
- virStoragePoolGetConnect
- virStoragePoolNumOfVolumes
- virStoragePoolListAllVolumes
- virStoragePoolListVolumes
Storage Volume
增:
- virStorageVolCreateXML
- virStorageVolCreateXMLFrom
查:
- virStorageVolGetConnect
- virStorageVolGetInfo
- virStorageVolGetKey
- virStorageVolGetName
- virStorageVolGetPath
- virStorageVolGetXMLDesc
- virStorageVolLookupByKey
- virStorageVolLookupByName
- virStorageVolLookupByPath
- virStorageVolRef
改:
- virStorageVolResize
- virStorageVolUpload
- virStorageVolWipe
- virStorageVolWipePattern
删:
- virStorageVolDelete
- virStorageVolFree
其他:
- virStorageVolDownload
Network API
Network
增:
- virNetworkCreate
- virNetworkCreateXML
- virNetworkDefineXML
查:
- virConnectListAllNetworks
- virConnectListDefinedNetworks
- virConnectListNetworks
- virConnectNumOfDefinedNetworks
- virConnectNumOfNetworks
- virNetworkGetName
- virNetworkGetUUID
- virNetworkGetUUIDString
- virNetworkGetXMLDesc
- virNetworkGetBridgeName
- virNetworkGetDHCPLeases
- virNetworkIsActive
- virNetworkIsPersistent
- virNetworkLookupByName
- virNetworkLookupByUUID
- virNetworkLookupByUUIDString
- virNetworkGetAutostart
- virNetworkGetConnect
改:
- virNetworkSetAutostart
- virNetworkUpdate
删:
- virNetworkDestroy
- virNetworkFree
- virNetworkUndefine
其他:
- virConnectNetworkEventDeregisterAny
- virConnectNetworkEventGenericCallback
- virNetworkDHCPLeaseFree
Interface
增:
- virInterfaceCreate
- virInterfaceDefineXML
查:
- virConnectListAllInterfaces
- virConnectListDefinedInterfaces
- virConnectListInterfaces
- virConnectNumOfDefinedInterfaces
- virConnectNumOfInterfaces
- virInterfaceGetConnect
- virInterfaceGetMACString
- virInterfaceGetName
- virInterfaceGetXMLDesc
- virInterfaceIsActive
- virInterfaceLookupByMACString
- virInterfaceLookupByName
- virInterfaceRef
改:
- virInterfaceChangeBegin
- virInterfaceChangeCommit
- virInterfaceChangeRollback
删:
- virInterfaceDestroy
- virInterfaceFree
- virInterfaceUndefine
Libvirt + QEMU-KVM 环境部署
HostOS 配置优化
- 使用国内 yum 和 epel 镜像源加速。
$ yum -y install wget
$ mkdir /etc/yum.repos.d/repo.bk
$ mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo.bk
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
$ yum clean all
$ yum makecache
$ yum install -y epel-release
- 升级 HostOS。
$ yum update -y && yum upgrade -y
开启 KVM Nested 嵌套虚拟化(可选的)
如果 HostOS 本身就是一个 VM,那么就需要开启 KVM Nested 嵌套虚拟化,使得 HostOS 能够具有与 Host 相同的 CPU 硬件辅助虚拟化特性,才能够在 VM 里面嵌套运行 KVM 虚拟机。
KVM Nested 是一个可通过修改内核参数来启用的功能,它能够使一台 VM 与 Host 可以具相同的 CPU 特性,支持 vmx|svm(AMD) 硬件虚拟化,该特性需要 Linux 内核版本大于 Linux 3.x。
查看是否启动了 Nested:
$ cat /sys/module/kvm_intel/parameters/nested
Y
启用 Nested:
$ echo 'options kvm_intel nested=1' >/etc/modprobe.d/kvm-nested.conf
# 卸载内核模块
$ modprobe -r kvm_intel
# 重新加载内核模块
$ modprobe kvm_intel
NOTE:如果无法重载内核模块,可以考虑直接重启。
如果希望已经存在的 KVM 虚拟机支持嵌套虚拟化,则需要重新编辑虚拟机的 XML 文件,修改其 CPU mode。
# 关机
$ virsh shutdown domain-xxx
# 编辑
$ virsh edit domain-xxx
<cpu mode='host-passthrough'>
# 开机
$ virsh start domain-xxx
登录入虚拟机检查是否有 CPU 穿透:文章来源:https://www.toymoban.com/news/detail-438355.html
$ egrep '(vmx|svm)' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust smep erms xsaveopt
安装 CentOS GNOME 图形界面
$ yum groupinstall -y "X Window System"
$ yum groupinstall -y "GNOME Desktop" "Graphical Administration Tools"
$ init 5
安装 Libvirt + QEMU-KVM
$ cat /proc/cpuinfo | egrep 'vmx|svm'
$ setenforce 0
$ sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
$ systemctl disable firewalld.service && systemctl stop firewalld.service && systemctl status firewalld.service
$ yum install -y qemu-kvm libvirt virt-manager virt-install bridge-utils
$ lsmod | grep kvm
# 修改 QEMU 配置,使 Root 用户有文件访问权限
$ vi /etc/libvirt/qemu.conf
...
user = "root"
group = "root"
$ systemctl start libvirtd && systemctl enable libvirtd && systemctl status libvirtd
相关安装包及其作用:文章来源地址https://www.toymoban.com/news/detail-438355.html
- qemu-kvm:QEMU 的 KVM 分支发行版软件程序,包含了 KVM Kernel Module 和基于 KVM 重构后的 QEMU 模拟器。
- qemu-img:QCOW2 镜像文件命令行工具。
- libvirt:Libvirt 软件程序,提供了一套虚拟化管理工具及 API。
- libvirt-client:Libvirt 的客户端软件程序,最重要的功能之一就是在宿主机关机时可以通知虚拟机也进行关机。
- virt-manager:基于 Libvirt 的 GUI 虚拟机管理软件程序。
- virt-install:基于 Libvirt 的用于创建虚拟机的命令行工具。
- libvirt-python:Libvirt 的 Pyhton API。
- python-virtinst:一套 Python 实现的用于创建虚拟机的命令行工具和程序库。
- virt-viewer:连接虚拟机 Console 的命令行工具。
- virt-top:虚拟机资源使用情况查看命令行工具。
- virt-clone:虚拟机克隆命令行工具。
- libguestfs-tools:GuestOS File System 命令行工具。
- bridge-utils:Linux Bridge 命令行工具。
编译安装指定版本
- 下载指定的版本。
$ wget https://download.qemu.org/qemu-2.11.0.tar.xz
- 安装编译依赖。
$ yum -y install gcc gcc-c++ automake libtool zlib-devel glib2-devel bzip2-devel libuuid-devel spice-protocol spice-server-devel usbredir-devel libaio-devel
- 开始编译安装 QEMU-KVM。
$ tar xvJf qemu-2.11.0.tar.xz
$ cd qemu-2.11.0
$ yum install -y libseccomp libseccomp-devel
$ yum install -y numactl numactl-devel
$ ./configure --enable-seccomp --enable-numa --prefix=/usr/local/qemu.2.11 && make && make install
- 替换 bin 文件。
$ ln -s /usr/local/qemu.2.11/bin/qemu-system-x86_64 /usr/bin/qemu-kvm
$ ln -s /usr/local/qemu.2.11/bin/qemu-system-x86_64 /usr/libexec/qemu-kvm
$ ln -s /usr/local/qemu.2.11/bin/qemu-img /usr/bin/qemu-img
- 检查。
$ qemu-img --version
$ qemu-kvm -version
到了这里,关于虚拟化技术 — Libvirt 异构虚拟化管理组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!