第 16 章 备份和恢复
16.1. 使用虚拟机快照备份和恢复 复制链接链接已复制到粘贴板!
您可以使用快照备份和恢复虚拟机(VM)。以下存储供应商支持快照:
- Red Hat OpenShift Data Foundation
- 使用支持 Kubernetes 卷快照 API 的 Container Storage Interface(CSI)驱动程序的任何其他云存储供应商
要创建处于 Running 状态的虚拟机的快照,如果操作系统中没有包含在您的操作系统中,请安装 QEMU 客户机代理。QEMU 客户机代理包含在默认红帽模板中。
具有热插虚拟磁盘的虚拟机支持在线快照。但是,没有在虚拟机规格中的热插磁盘不会包含在快照中。
QEMU 客户机代理通过尝试静止虚拟机文件系统来获得一个具有一致性的快照。这样可确保在进行快照前将 in-flight I/O 写入磁盘。如果没有客户机代理,则无法静止并生成最佳快照。
执行快照的条件反映在 web 控制台或 CLI 中显示的快照声明中。如果这些条件没有满足您的要求,请尝试再次创建快照,或使用一个离线快照
16.1.1. 关于快照 复制链接链接已复制到粘贴板!
快照 代表虚拟机(VM)在特定时间点的状态和数据。您可以使用快照将现有虚拟机恢复到以前的状态(由快照代表)进行备份和恢复,或者快速回滚到以前的开发版本。
虚拟机快照从关机(停止状态)或 powred on(Running 状态)上的虚拟机创建。
在为正在运行的虚拟机执行快照时,控制器将检查 QEMU 客户机代理是否已安装并在运行。如果是这样,它会在拍摄快照前冻结虚拟机文件系统,并在拍摄快照后修改文件系统。
快照存储附加到虚拟机的每个 Container Storage Interface(CSI)卷的副本以及虚拟机规格和元数据的副本。创建后无法更改快照。
您可以执行以下快照操作:
- 创建新快照
从快照创建虚拟机克隆
重要不支持克隆附加了 vTPM 设备的虚拟机,也不支持使用其快照创建一个新的虚拟机。
- 列出附加到特定虚拟机的所有快照
- 从快照恢复虚拟机
- 删除现有虚拟机快照
16.1.1.1. VM 快照控制器和自定义资源 复制链接链接已复制到粘贴板!
VM 快照功能引入了三个新的 API 对象,定义为自定义资源定义(CRD)来管理快照:
-
VirtualMachineSnapshot:代表创建快照的用户请求。它包含有关虚拟机当前状态的信息。 -
VirtualMachineSnapshotContent:代表集群中置备的资源(快照)。它由虚拟机快照控制器创建,其中包含恢复虚拟机所需的所有资源的引用。 -
VirtualMachineRestore:代表从快照中恢复虚拟机的用户请求。
VM 快照控制器会把一个 VirtualMachineSnapshotContent 对象与创建它的 VirtualMachineSnapshotContent 对象绑定,并具有一对一的映射。
16.1.2. 关于应用程序一致性快照和备份 复制链接链接已复制到粘贴板!
您可以通过冻结和解译周期,为 Linux 或 Windows 虚拟机(VM)配置应用程序一致性快照和备份。对于任何应用程序,您可以在 Linux 虚拟机上配置脚本,或者在 Windows 虚拟机上注册,以便在快照或备份即将开始时获得通知。
在 Linux 虚拟机上,当生成快照或使用备份时自动触发 GFS 和 thaw 进程,例如,来自 Velero 或其他备份供应商的插件。QEMU 客户机代理(QEMU GA)执行的冻结过程会冻结 hook,确保在虚拟机的快照或备份发生前,所有虚拟机的文件系统都会冻结,每个配置的应用程序都会显示快照或备份要启动。此通知可负担每个应用程序获得其状态的机会。根据应用程序,静默可能涉及临时拒绝新请求、完成进行中的操作,以及将数据刷新到磁盘。然后,操作系统会被定向到静止文件系统,方法是清除未完成的写入磁盘并释放新的写入活动。所有新的连接请求都会被拒绝。当所有应用程序都不活跃时,QEMU GA 会冻结文件系统,并生成一个快照或启动备份。在执行快照或开始备份后,解动过程开始。文件系统写入会被重新激活,应用程序会收到通知以恢复正常操作。
Windows 虚拟机上提供了相同的冻结和波动周期。使用卷 Shadow Copy Service (VSS) 注册应用程序,以接收通知,因为备份或快照不会清除其数据。在备份或快照完成后,对应用程序进行修复会将它们返回到 active 状态。如需了解更多详细信息,请参阅有关卷 Shadow 复制服务的 Windows 服务器文档。
16.1.3. 创建快照 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台或命令行创建虚拟机(VM)的快照。
16.1.3.1. 使用 Web 控制台创建快照 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台为虚拟机(VM)创建快照。
先决条件
-
快照功能门在kubevirtCR 的 YAML 配置中启用。 VM 快照包括以下要求的磁盘:
- 磁盘是数据卷或持久性卷声明。
- 磁盘属于支持容器存储接口(CSI)卷快照的存储类。
- 磁盘 绑定到 持久性卷(PV),并使用数据源填充。
流程
-
在 web 控制台中进入到 Virtualization
VirtualMachines。 - 选择一个虚拟机以打开 VirtualMachine 详情页。
点 Snapshots 标签页,然后点 Take Snapshot。
或者,在虚拟机上点鼠标右键,然后从弹出菜单中选择 Create snapshot。
- 输入快照名称。
- 扩展 Disks included in this Snapshot 以查看快照中包含的存储卷。
- 如果您的虚拟机有无法包含在快照中的磁盘,并且您希望继续,请选择 I am aware of this warning and wish to proceed。
- 点击 Save。
16.1.3.2. 使用 CLI 创建快照 复制链接链接已复制到粘贴板!
您可以通过创建一个 VirtualMachineSnapshot 对象来为离线或在线虚拟机创建虚拟机快照。
先决条件
使用以下命令,确保
kubevirtCR 启用了Snapshot功能门:oc get kubevirt kubevirt-hyperconverged -n openshift-cnv -o yaml
$ oc get kubevirt kubevirt-hyperconverged -n openshift-cnv -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 已截断的输出:
spec: developerConfiguration: featureGates: - Snapshotspec: developerConfiguration: featureGates: - SnapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保虚拟机快照包含满足以下要求的磁盘:
- 磁盘是数据卷或持久性卷声明。
- 磁盘属于支持容器存储接口(CSI)卷快照的存储类。
- 磁盘 绑定到 持久性卷(PV),并使用数据源填充。
-
安装 OpenShift CLI (
oc) 。 - 可选:关闭您要为其创建快照的虚拟机。
流程
创建一个 YAML 文件来定义
VirtualMachineSnapshot对象,用于指定新VirtualMachineSnapshot的名称和源虚拟机的名称,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
VirtualMachineSnapshot对象:oc create -f <snapshot_name>.yaml
$ oc create -f <snapshot_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 快照控制器会创建一个
VirtualMachineSnapshotContent对象,将其绑定到VirtualMachineSnapshot,并更新VirtualMachineSnapshot对象的status和readyToUse字段。
验证
可选:在快照创建过程中,您可以使用
wait命令监控快照的状态并等待其就绪可用:输入以下命令:
oc wait <vm_name> <snapshot_name> --for condition=Ready
$ oc wait <vm_name> <snapshot_name> --for condition=ReadyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证快照的状态:
-
InProgress- 快照操作仍在进行中。 -
Succeeded- 快照操作成功完成。 Failed- 快照操作失败。注意在线快照的默认时间期限为五分钟(
5m)。如果快照在五分钟内没有成功完成,其状态将设为failed。之后,文件系统将被”解冻”,虚拟机将取消冻结,但状态会一直failed,直到您删除失败的快照镜像。要更改默认时间期限,在 VM 快照 spec 中添加
FailureDeadline属性,指定在快照超时前的时间,以分钟(m)或秒(s)为单位。要设置截止时间,您可以指定
0,但通常不建议这样做,因为它可能会导致虚拟机没有响应。如果您没有指定时间单位,如
m或s,则默认为 秒(s)。
-
验证
VirtualMachineSnapshot对象是否已创建并绑定到VirtualMachineSnapshotContent,并且readyToUse标志设为true:oc describe vmsnapshot <snapshot_name>
$ oc describe vmsnapshot <snapshot_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查快照描述中的
includedVolumes部分,以验证快照中包含了预期的 PVC。
16.1.4. 使用快照指示验证在线快照 复制链接链接已复制到粘贴板!
快照表示是有关在线虚拟机 (VM) 快照操作的上下文信息。对于离线虚拟机 (VM) 快照操作,提示不可用。暗示有助于描述在线快照创建的详细信息。
先决条件
- 您必须已尝试创建在线虚拟机快照。
流程
通过执行以下操作之一来显示快照的输出:
-
使用命令行查看
VirtualMachineSnapshot对象 YAML 的status小节中的指示符输出。 -
在 web 控制台中,在 Snapshot details 屏幕中点 VirtualMachineSnapshot
Status。
-
使用命令行查看
通过查看
status.indications参数的值来验证在线虚拟机快照的状态:-
Online代表虚拟机在在线快照创建期间运行。 -
GuestAgent表示 QEMU 客户机代理处于活动状态,并成功查询在线快照的客户机文件系统。这会导致应用程序一致性快照,保留数据完整性,就像应用程序被安全关闭一样。 -
NoGuestAgent表示 QEMU 客户机代理尚未安装,或者还没有在在线快照过程中静止文件系统。这会导致崩溃一致性快照,它捕获虚拟机的状态,如突然停电。因此,应用程序一致性无法保证,这会导致关键应用程序的数据问题面临风险。为提高可靠性,请安装并运行客户机代理,或重试快照。 -
QuiesceFailed表示在在线快照过程中尝试静止文件系统失败。这意味着创建快照,但它不一定是应用程序一致性。要实现正确的一致性,请重试快照。
-
16.1.5. 从快照中恢复虚拟机 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台或命令行从快照中恢复虚拟机(VM)。
16.1.5.1. 使用 Web 控制台从快照中恢复虚拟机 复制链接链接已复制到粘贴板!
您可以将虚拟机(VM)恢复到 OpenShift Container Platform web 控制台中的快照代表的以前的配置。
流程
-
在 web 控制台中进入到 Virtualization
VirtualMachines。 - 选择一个虚拟机以打开 VirtualMachine 详情页。
-
如果虚拟机正在运行,点选项菜单
并选择 Stop 关闭它。
- 点 Snapshots 选项卡查看与虚拟机关联的快照列表。
- 选择快照以打开 Snapshot Details 屏幕。
-
点选项菜单
并选择 Restore VirtualMachine from snapshot。
- 单击 Restore。
可选: 您还可以根据快照创建一个新虚拟机。要做到这一点:
-
在快照的 Options 菜单
中,选择 Create VirtualMachine from Snapshot。
- 为新虚拟机提供名称。
- 点 Create
-
在快照的 Options 菜单
16.1.5.2. 使用 CLI 从快照中恢复虚拟机 复制链接链接已复制到粘贴板!
您可以使用命令行将现有虚拟机(VM)恢复到以前的配置。您只能从离线虚拟机快照中恢复。
先决条件
-
安装 OpenShift CLI (
oc) 。 - 关闭您要恢复的虚拟机。
可选:调整如果目标虚拟机没有完全停止(ready)时发生什么。要做到这一点,将
vmrestoreYAML 配置中的targetReadinessPolicy参数设置为以下值之一:-
FailImmediate- 如果虚拟机未就绪,恢复过程会立即失败。 -
StopTarget- 如果虚拟机未就绪,它会被停止,恢复过程会启动。 -
WaitGracePeriod 5- 恢复过程会在分钟内等待一定的时间,以便虚拟机就绪。这是默认设置,默认值为 5 分钟。 -
WaitEventually- 恢复过程会无限期等待虚拟机就绪。
-
流程
创建一个 YAML 文件来定义
VirtualMachineRestore对象,用于指定您要恢复的虚拟机的名称以及要用作源的快照名称,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
VirtualMachineRestore对象:oc create -f <vm_restore>.yaml
$ oc create -f <vm_restore>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 快照控制器更新了
VirtualMachineRestore对象的 status 字段,并将现有虚拟机配置替换为快照内容。
验证
验证虚拟机是否已恢复到快照代表的以前的状态,并将
complete标志设置为true:oc get vmrestore <vm_restore>
$ oc get vmrestore <vm_restore>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.1.6. 删除快照 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台或命令行删除虚拟机快照。
16.1.6.1. 使用 Web 控制台删除快照 复制链接链接已复制到粘贴板!
您可以使用 web 控制台删除现有虚拟机(VM)快照。
流程
-
在 web 控制台中进入到 Virtualization
VirtualMachines。 - 选择一个虚拟机以打开 VirtualMachine 详情页。
- 点 Snapshots 选项卡查看与虚拟机关联的快照列表。
-
点快照旁的选项菜单
并选择 Delete snapshot。
- 点击 Delete。
16.1.6.2. 通过 CLI 删除虚拟机快照 复制链接链接已复制到粘贴板!
您可以通过删除正确的 VirtualMachineSnapshot 对象来删除现有虚拟机(VM)快照。
先决条件
-
安装 OpenShift CLI (
oc) 。
流程
删除
VirtualMachineSnapshot对象:oc delete vmsnapshot <snapshot_name>
$ oc delete vmsnapshot <snapshot_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 快照控制器会删除
VirtualMachineSnapshot和关联的VirtualMachineSnapshotContent对象。
验证
验证快照是否已删除,且不再附加到此虚拟机:
oc get vmsnapshot
$ oc get vmsnapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow