首页 理论教育 私有云架构实践中的对象描述方法

私有云架构实践中的对象描述方法

时间:2023-10-28 理论教育 版权反馈
【摘要】:Libvirt用XML格式描述各种对象,包括节点、域、网络、网络过滤器、存储、存储加密方式、节点配置、域配置、加密、快照、存储等。表4-3libvirt后端URI列表续表2.XML描述Libvirt为了使用尽可能统一的方法调用各种hypervisor,它使用了XML语言对各个对象进行描述。以hypervisor中的域来说,不同hypervisor对它的描述在文件内容上绝大部分是相似的,差异仅在于对域类型和某些hypervisor独占设备。我们在此以libvirt官方文档为例,介绍常用对象的描述方法。

私有云架构实践中的对象描述方法

Libvirt用XML格式描述各种对象,包括节点、域、网络、网络过滤器、存储、存储加密方式、节点配置、域配置、加密、快照、存储等。同时,它也使用不同的URI对各种hypervisor进行区分。

1.URI格式

目前libvirt支持的各种driver URI格式及其访问路径如表4-3所示,其中用户实例和系统实例分别表示无系统特权和有系统特权的libvirt实例,用户实例也根据具体用户(比如root)和后端的实现具有系统特权。

表4-3 libvirt后端URI列表

续表

2.XML描述

Libvirt为了使用尽可能统一的方法调用各种hypervisor,它使用了XML语言对各个对象进行描述。以hypervisor中的域来说,不同hypervisor对它的描述在文件内容上绝大部分是相似的,差异仅在于对域类型和某些hypervisor独占设备。我们在此以libvirt官方文档(https://libvirt.org/format.html)为例,介绍常用对象的描述方法。

□域

Libvirt对于域的描述很大程度上扩展了QEMU的能力,比如我们可以在XML文件中定义更深层次的CPU微调选项,也可以在域启动时让libvirt自动在节点上配置好TAP/TUN设备。XML的描述规则遵循/usr/share/shema中的相关定义,我们可以使用virt-xmlvalidate命令验证文件是否符合规则。

一个典型的域描述文件如下所示。

对于手动编写的XML文件我们可以忽略设备的总线位置,交由QEMU自动选择,前提是机器模型支持。接下来将其转化为命令行

可以看出,转化成QEMU的命令行并没有完全体现出其XML描述,比如<on_poweroff>、<on_reboot>、<on_crash>等字段,这些字段的功能一般需要配合libvirt的相关设置才能实现。另外,合理地使用<qemu:commandline>字段也会有助于我们的调试。

虚拟机启动后,我们再次查看其XML描述,会发现多出SELinux的运行时配置。

在现有的私有云平台实现中,域一般是临时性的(可在云平台的计算节点中使用“virsh list--all”查看)。平台在创建虚拟机时根据数据库中的设备字段临时定义一个域,某些平台可能会将域描述XML其固定保存到文件中,但对文件的直接修改并不能保存。使用临时域的好处是减少域定义来源,也可减弱域与节点的绑定关系(临时域关闭后即删除,与之对应的永久域则继续作为文件存在于节点中)。

□虚拟网络

Libvirt可提供的网络类型极为丰富,此处将介绍虚拟网络描述的字段意义,常用网络类型的实现细节我们将在第6章进行详细说明。定义后的XML描述文件存在于计算节点或者网络节点的/etc/libvirt/qemu/networks/目录中,以下为使用OpenvSwtich网络的libvirt虚拟网络XML描述示例。

□元数据

包括网络名(name)、UUID(uuid)、IPv6(ipv6)、信任来宾过滤(trustGuestRxFilters)。其中,name用于域定义的连接网络区分,uuid可在定义后自动生成,ipv6即是开启此虚拟网络的IPv6支持,trustGuestRxFilters用于虚拟机内部修改MAC地址时节点是否继续允许其访问网络,此项由于安全原因默认关闭。

□网络连接

此端描述即是虚拟网络的后端实现,包括桥接(bridge)、DNS域(domain)、转发(forward)。其中forward即是表明此网络可与物理局域网连接,它有多种转发模式(nat、route、bridge、private、vepa、passthrough、hostdev),未定义forward则表示此网络属于隔离网络(isolated)。

□地址定义

地址定义仅仅适用于隔离网络(即未定义forward),它可以定义包含DHCP、TFTP、DNS等多个网络特征。它的实现依靠功能非常丰富的轻量级DHCP服务dnsmasq,我们可以在很多云平台中发现它的身影。

□网络过滤器

由于很多情况下管理员不能从虚拟机内部定义网络过滤规则(防火墙规则),那么在节点层面进行虚拟网络的限制就很有必要了。Libvirt的网络过滤器可适用于大部分虚拟网络,它主要由具有优先级的过滤规则链组成。规则链包括stp、mac、vlan(802.1q)、ipv4、ipv6、arp、rarp,它们全部连接到root链上,并且之间可以互相链接(比如ipv4规则链可以插入在mac规则链中),同一层级的规则链默认优先级stp最高,rarp最低。

Libvirt默认的规则链可在/etc/libvirt/nw filter/目录中找到,以allow-arp规则示例。(www.xing528.com)

此条规则可允许(action=accept)所有arp协议流量(chain=arp)流入和流出(rule direction=inout)虚拟机。

□存储

Libvirt中的存储定义包括存储池(storage pool)、存储卷(storage volume)和存储加密(storage encryption),存储卷位于存储池中,我们可以将两者关系可以类比为目录与文件,或者逻辑卷组(VG)与逻辑卷(LV)。

尽管libvirt提供了详细且标准的存储定义,但由缺乏容错机制而很少在开源云平台中直接被用作顶层存储,往往仅被用于存储后端,比如OpenStack使用Glance、Cinder分别实现镜像存储和块存储,oVirt仅仅使用了libvirt的dir类型存储来定义其本地存储域。存储池的后端类型有dir、fs、nfs、disk、iscsi、logical、scsi、mpath、rbd、sheepdog、gluster、zfs等,XML描述内容包括元数据、存储来源、映射目标等。

□元数据

包括名称(name)、UUID(uuid)、存储容量(capacity)、已用空间(allocation)、剩余空间(available),其中后三个关于空间用度的字段交由系统计算,我们不能预定义(填0即可)。

□存储来源

存储来源部分包含的字段较多,且需要根据存储池类型来使用,其XML元素包括设备(device,适用类型为fs、logical、disk、iscsi、zfs)、目录(dir,适用类型为dir、nfs、gluster)、SCSI适配器(adapter,适用类型为scsi)、主机(host,适用类型为nfs、iscsi、rbd、sheepdog、gluster)、认证(auth,适用类型为iscsi、rbd)、来源格式(format,用于区分存储基本类型,适用类型为fs、nfs、disk、logical)、外部存储名(name、vendor、product,引入外部存储池作为后端时需要定义此字段,适用于logical、rbd、sheepdog、gluster)。

□映射目标

映射目标的字段包括路径(path)、权限(permissions)、时间戳(timestamps)、加密(encryption)。不同的存储来源映射到节点的路径有所不同,比如disk类型的到本地的映射路径需要是/dev/中的块设备,nfs类型的则是一个普通目录。加密即是当在映射目标中创建存储卷时,libvirt根据加密类型(default、qcow)对存储卷进行加密。

如下是以dir类型存储为来源的存储池描述,由于dir类型存储属于本地文件系统,而非共享文件系统,所以只需要在映射目标路径中填写本地路径即可。

存储卷的描述包括元数据、卷目标和基底存储(backing store)[1],它的描述内容为虚拟机硬盘

□元数据

包括名称(name)、标识(key)、已分配空间(allocation)、卷容量(capacity)、来源存储池(source)、存储路径(target)。

□卷目标

卷目标即是可访问的虚拟机硬盘(文件、快存储),其字段有路径(path)、格式(format)、权限(permissions)、兼容性(compat)、禁用写时复制(nocow)、特性(features)。其中,路径可以是一个虚拟硬盘文件(raw、qcow2等)或者一个映射到本地的块设备(/dev/mapper/XXX_1、/dev/disk/by-path/XXX等);禁用写时复制仅仅适用存放于btffs文件系统中的qcow2格式镜像,可改善新建的虚拟硬盘性能,需要QEMU 2.1版本及以上;feature字段中目前只有懒惰引用数计量(lazy_refcount)可选,功能即是延迟更新qcow2格式镜像中簇的引用计数等信息(元数据),以释放部分I/O占用提高新镜像的性能。

□基底存储

基础存储磁盘的信息,包括路径(path)、格式(format)、权限(permissions)。目前只有qcow2格式的硬盘支持不同格式的虚拟硬盘文件作为基底存储,其他比如raw、vmdk都需要相同格式。

一个典型的虚拟机磁盘文件XML描述如下。

□节点设备

节点设备的XML描述主要用于可热插拔的模拟设备与透传设备的添加,包括PCI(PCI-E)、USB、SCSI、存储设备等。对于透传设备,可使用virsh命令快速查看具体设备的XML描述,如下所示。

□快照

QEMU中的快照有三种类型,分别是硬盘快照(disk snapshot)、内存快照(memory state)以及将前两者结合一起的系统存档点(system checkpoint)。其中,硬盘快照一般在域的关机状态下进行拍摄,否则会造成系统不一致(开机状态下拍摄硬盘快照相当于异常断电,已经打开的虚拟机系统文件处于未释放状态,从它启动的域需要进行文件系统检查修复操作);内存快照同样如此,假如内存快照的拍摄至恢复期间,硬盘内容并没有被外部修改,则系统可以恢复正常运行,否则就会产生数据丢失。目前在私有云平台中,统一的备份策略往往针对硬盘快照和系统存档点,极少对内存快照进行备份。

Libvirt的快照XML描述字段有快照名称(name)、快照描述(description)、内存快照(memory)、硬盘快照(disks)、创建时间(creationTime)、父快照(parent)、域(domain)。其中的内存快照字段的参数有三种,分别是no(仅拍摄硬盘快照)、internal(内存快照保存至虚拟硬盘)和external(内存快照保存至file指定的文件);硬盘快照字段可以添加多个硬盘的快照详细信息,以disk字段进行区分。

如下是一个系统存档点的XML描述。

我们可以通过qemu-img命令查看其快照信息,如下所示。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈