×

您可以使用快照备份和恢复虚拟机 (VM)。以下存储提供程序支持快照

  • 任何具有支持Kubernetes Volume Snapshot API的容器存储接口 (CSI) 驱动程序的云存储提供程序

在线快照的默认时间期限为五分钟 (5m),如有需要,可以更改。

在线快照支持具有热插拔虚拟磁盘的虚拟机。但是,虚拟机规范中不包含的热插拔磁盘不包含在快照中。

要创建具有最高完整性的在线(运行状态)VM的快照,请安装QEMU访客代理(如果您的操作系统未包含)。QEMU访客代理包含在默认的Red Hat模板中。

QEMU访客代理通过尽可能地尝试使VM文件系统休眠来拍摄一致性快照,具体取决于系统工作负载。这确保在拍摄快照之前将进行中的I/O写入磁盘。如果不存在访客代理,则无法进行休眠,并且将拍摄尽力而为的快照。快照拍摄的条件将反映在Web控制台或CLI中显示的快照指示中。

关于快照

快照表示虚拟机 (VM) 在特定时间点的状态和数据。您可以使用快照将现有VM恢复到以前的状态(由快照表示),用于备份和灾难恢复,或者快速回滚到以前的开发版本。

VM快照是从已关闭电源(停止状态)或已打开电源(运行状态)的VM创建的。

拍摄正在运行的VM的快照时,控制器会检查QEMU访客代理是否已安装并正在运行。如果是,则在拍摄快照之前冻结VM文件系统,并在拍摄快照后解冻文件系统。

快照存储附加到VM的每个容器存储接口 (CSI) 卷的副本以及VM规范和元数据的副本。快照创建后无法更改。

您可以执行以下快照操作

  • 创建一个新的快照

  • 从快照创建虚拟机的副本

  • 列出附加到特定VM的所有快照

  • 从快照恢复VM

  • 删除现有的VM快照

VM快照控制器和自定义资源

VM快照功能引入了三个新的API对象,定义为自定义资源定义 (CRD),用于管理快照

  • VirtualMachineSnapshot:表示用户创建快照的请求。它包含有关VM当前状态的信息。

  • VirtualMachineSnapshotContent:表示集群上已配置的资源(快照)。它由VM快照控制器创建,并包含恢复VM所需的所有资源的引用。

  • VirtualMachineRestore:表示用户从快照恢复VM的请求。

VM快照控制器将VirtualMachineSnapshotContent对象与其为其创建的VirtualMachineSnapshot对象绑定,实现一对一映射。

关于应用程序一致性快照和备份

您可以通过冻结和解冻周期为Linux或Windows虚拟机 (VM) 配置应用程序一致性快照和备份。对于任何应用程序,您可以在Linux VM上配置脚本,或在Windows VM上注册以在快照或备份即将开始时收到通知。

在Linux VM上,冻结和解冻过程会在拍摄快照或使用Velero或其他备份供应商的插件启动备份时自动触发。冻结过程(由QEMU访客代理 (QEMU GA) 冻结钩子执行)确保在拍摄VM的快照或备份之前,所有VM的文件系统都已冻结,并且每个已正确配置的应用程序都已收到通知,告知快照或备份即将开始。此通知为每个应用程序提供了使其状态休眠的机会。根据应用程序的不同,休眠可能包括暂时拒绝新请求、完成正在进行的操作以及将数据刷新到磁盘。然后指示操作系统通过将未完成的写入刷新到磁盘并冻结新的写入活动来使文件系统休眠。所有新的连接请求都将被拒绝。当所有应用程序都变为非活动状态时,QEMU GA 将冻结文件系统,并拍摄快照或启动备份。拍摄快照或启动备份后,解冻过程将开始。文件系统写入将重新激活,并且应用程序将收到通知以恢复正常操作。

Windows VM上也提供了相同的冻结和解冻周期。应用程序向卷影复制服务 (VSS) 注册以接收通知,告知它们应刷新其数据,因为备份或快照即将到来。备份或快照完成后,应用程序的解冻将其恢复到活动状态。有关更多详细信息,请参阅有关卷影复制服务的Windows Server文档。

创建快照

您可以使用Red Hat OpenShift Service on AWS Web控制台或命令行创建虚拟机 (VM) 的快照。

使用Web控制台创建快照

您可以使用Red Hat OpenShift Service on AWS Web控制台创建虚拟机 (VM) 的快照。

VM快照包括满足以下要求的磁盘

  • 数据卷或持久卷声明

  • 属于支持容器存储接口 (CSI) 卷快照的存储类

步骤
  1. 在Web控制台中导航到**虚拟化** → **虚拟机**。

  2. 选择一个VM以打开**虚拟机详细信息**页面。

  3. 单击**快照**选项卡,然后单击**拍摄快照**。

  4. 输入快照名称。

  5. 展开**此快照中包含的磁盘**以查看要包含在快照中的存储卷。

  6. 如果您的虚拟机 (VM) 存在无法包含在快照中的磁盘,并且您希望继续操作,请选择我知道此警告并希望继续

  7. 点击保存

使用命令行创建快照

您可以通过创建VirtualMachineSnapshot 对象来为离线或在线虚拟机 (VM) 创建快照。

先决条件
  • 确保持久卷声明 (PVC) 位于支持容器存储接口 (CSI) 卷快照的存储类中。

  • 安装 OpenShift CLI (oc)。

  • 可选:关闭您想要创建快照的虚拟机的电源。

步骤
  1. 创建一个 YAML 文件来定义VirtualMachineSnapshot 对象,该对象指定新VirtualMachineSnapshot 的名称和源 VM 的名称,如下例所示

    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineSnapshot
    metadata:
      name: <snapshot_name>
    spec:
      source:
        apiGroup: kubevirt.io
        kind: VirtualMachine
        name: <vm_name>
  2. 创建VirtualMachineSnapshot 对象

    $ oc create -f <snapshot_name>.yaml

    快照控制器创建一个VirtualMachineSnapshotContent 对象,将其绑定到VirtualMachineSnapshot,并更新VirtualMachineSnapshot 对象的statusreadyToUse 字段。

  3. 可选:如果您正在拍摄在线快照,您可以使用wait 命令并监视快照的状态

    1. 输入以下命令

      $ oc wait <vm_name> <snapshot_name> --for condition=Ready
    2. 验证快照的状态

      • InProgress - 在线快照操作仍在进行中。

      • Succeeded - 在线快照操作已成功完成。

      • Failed - 在线快照操作失败。

        在线快照的默认截止时间为五分钟 (5m)。如果快照在五分钟内未成功完成,则状态将设置为failed。之后,文件系统将被解冻,虚拟机将被解冻,但状态将保持为failed,直到您删除失败的快照镜像。

        要更改默认截止时间,请将FailureDeadline 属性添加到 VM 快照规范中,并指定您希望快照操作超时前的时间(以分钟 (m) 或秒 (s) 为单位)。

        要设置无截止时间,您可以指定0,但这通常不建议,因为它可能导致虚拟机无响应。

        如果您没有指定时间单位,例如ms,则默认为秒 (s)。

验证
  1. 验证VirtualMachineSnapshot 对象是否已创建并与VirtualMachineSnapshotContent 绑定,以及readyToUse 标志是否设置为true

    $ oc describe vmsnapshot <snapshot_name>
    示例输出
    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineSnapshot
    metadata:
      creationTimestamp: "2020-09-30T14:41:51Z"
      finalizers:
      - snapshot.kubevirt.io/vmsnapshot-protection
      generation: 5
      name: mysnap
      namespace: default
      resourceVersion: "3897"
      selfLink: /apis/snapshot.kubevirt.io/v1beta1/namespaces/default/virtualmachinesnapshots/my-vmsnapshot
      uid: 28eedf08-5d6a-42c1-969c-2eda58e2a78d
    spec:
      source:
        apiGroup: kubevirt.io
        kind: VirtualMachine
        name: my-vm
    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: "2020-09-30T14:42:03Z"
        reason: Operation complete
        status: "False" (1)
        type: Progressing
      - lastProbeTime: null
        lastTransitionTime: "2020-09-30T14:42:03Z"
        reason: Operation complete
        status: "True" (2)
        type: Ready
      creationTime: "2020-09-30T14:42:03Z"
      readyToUse: true (3)
      sourceUID: 355897f3-73a0-4ec4-83d3-3c2df9486f4f
      virtualMachineSnapshotContentName: vmsnapshot-content-28eedf08-5d6a-42c1-969c-2eda58e2a78d (4)
    1 Progressing 条件的status 字段指定快照是否仍在创建中。
    2 Ready 条件的status 字段指定快照创建过程是否已完成。
    3 指定快照是否已准备好使用。
    4 指定快照已绑定到快照控制器创建的VirtualMachineSnapshotContent 对象。
  2. 检查VirtualMachineSnapshotContent 资源的spec:volumeBackups 属性,以验证预期的 PVC 是否包含在快照中。

使用快照指示信息验证在线快照

快照指示信息是关于在线虚拟机 (VM) 快照操作的上下文信息。离线虚拟机 (VM) 快照操作不提供指示信息。指示信息有助于描述在线快照创建的详细信息。

先决条件
  • 您必须尝试创建在线 VM 快照。

步骤
  1. 通过执行以下操作之一来显示快照指示信息的输出

    • 使用命令行在VirtualMachineSnapshot 对象 YAML 的status 部分查看指示器输出。

    • 在 Web 控制台中,点击VirtualMachineSnapshot状态(在快照详情屏幕中)。

  2. 通过查看status.indications 参数的值来验证在线 VM 快照的状态

    • Online 表示在创建在线快照期间 VM 正在运行。

    • GuestAgent 表示在创建在线快照期间 QEMU 访客代理正在运行。

    • NoGuestAgent 表示在创建在线快照期间 QEMU 访客代理未运行。QEMU 访客代理无法用于冻结和解冻文件系统,原因可能是 QEMU 访客代理未安装或正在运行,或者由于其他错误。

从快照还原虚拟机

您可以使用 Red Hat OpenShift Service on AWS Web 控制台或命令行从快照还原虚拟机 (VM)。

使用 Web 控制台从快照还原 VM

您可以使用 Red Hat OpenShift Service on AWS Web 控制台将虚拟机 (VM) 还原到快照表示的先前配置。

步骤
  1. 在Web控制台中导航到**虚拟化** → **虚拟机**。

  2. 选择一个VM以打开**虚拟机详细信息**页面。

  3. 如果 VM 正在运行,请单击选项菜单kebab并选择停止以关闭其电源。

  4. 单击快照选项卡以查看与 VM 关联的快照列表。

  5. 选择一个快照以打开快照详情屏幕。

  6. 单击选项菜单kebab并选择从快照还原虚拟机

  7. 点击还原

使用命令行从快照还原 VM

您可以使用命令行将现有虚拟机 (VM) 还原到以前的配置。您只能从离线 VM 快照还原。

先决条件
  • 关闭要还原的 VM 的电源。

步骤
  1. 创建一个 YAML 文件来定义VirtualMachineRestore 对象,该对象指定要还原的 VM 的名称和用作源的快照的名称,如下例所示

    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineRestore
    metadata:
      name: <vm_restore>
    spec:
      target:
        apiGroup: kubevirt.io
        kind: VirtualMachine
        name: <vm_name>
      virtualMachineSnapshotName: <snapshot_name>
  2. 创建VirtualMachineRestore 对象

    $ oc create -f <vm_restore>.yaml

    快照控制器更新VirtualMachineRestore 对象的状态字段,并用快照内容替换现有的 VM 配置。

验证
  • 验证 VM 是否已还原到快照表示的先前状态,以及complete 标志是否设置为true

    $ oc get vmrestore <vm_restore>
    示例输出
    apiVersion: snapshot.kubevirt.io/v1beta1
    kind: VirtualMachineRestore
    metadata:
    creationTimestamp: "2020-09-30T14:46:27Z"
    generation: 5
    name: my-vmrestore
    namespace: default
    ownerReferences:
    - apiVersion: kubevirt.io/v1
      blockOwnerDeletion: true
      controller: true
      kind: VirtualMachine
      name: my-vm
      uid: 355897f3-73a0-4ec4-83d3-3c2df9486f4f
      resourceVersion: "5512"
      selfLink: /apis/snapshot.kubevirt.io/v1beta1/namespaces/default/virtualmachinerestores/my-vmrestore
      uid: 71c679a8-136e-46b0-b9b5-f57175a6a041
      spec:
        target:
          apiGroup: kubevirt.io
          kind: VirtualMachine
          name: my-vm
      virtualMachineSnapshotName: my-vmsnapshot
      status:
      complete: true (1)
      conditions:
      - lastProbeTime: null
      lastTransitionTime: "2020-09-30T14:46:28Z"
      reason: Operation complete
      status: "False" (2)
      type: Progressing
      - lastProbeTime: null
      lastTransitionTime: "2020-09-30T14:46:28Z"
      reason: Operation complete
      status: "True" (3)
      type: Ready
      deletedDataVolumes:
      - test-dv1
      restoreTime: "2020-09-30T14:46:28Z"
      restores:
      - dataVolumeName: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1
      persistentVolumeClaim: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1
      volumeName: datavolumedisk1
      volumeSnapshotName: vmsnapshot-28eedf08-5d6a-42c1-969c-2eda58e2a78d-volume-datavolumedisk1
    1 指定将 VM 还原到快照表示的状态的过程是否已完成。
    2 Progressing 条件的status 字段指定 VM 是否仍在还原中。
    3 Ready 条件的status 字段指定 VM 还原过程是否已完成。

删除快照

您可以使用 AWS 上的 Red Hat OpenShift 服务 Web 控制台或命令行删除虚拟机 (VM) 的快照。

使用 Web 控制台删除快照

您可以使用 Web 控制台删除现有的虚拟机 (VM) 快照。

步骤
  1. 在Web控制台中导航到**虚拟化** → **虚拟机**。

  2. 选择一个VM以打开**虚拟机详细信息**页面。

  3. 单击快照选项卡以查看与 VM 关联的快照列表。

  4. 单击快照旁边的“选项”菜单 kebab 并选择“**删除快照**”。

  5. 单击“**删除**”。

在 CLI 中删除虚拟机快照

您可以通过删除相应的 VirtualMachineSnapshot 对象来删除现有的虚拟机 (VM) 快照。

先决条件
  • 安装 OpenShift CLI (oc)。

步骤
  • 删除 VirtualMachineSnapshot 对象

    $ oc delete vmsnapshot <snapshot_name>

    快照控制器将删除 VirtualMachineSnapshot 及其关联的 VirtualMachineSnapshotContent 对象。

验证
  • 验证快照是否已删除,并且不再附加到此 VM。

    $ oc get vmsnapshot