15.3. 备份虚拟机

重要

OADP for OpenShift Virtualization 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

您可以通过创建一个 Backup 自定义资源 (CR) 来备份虚拟机(VM)

Backup CR 执行以下操作:

注意

OADP 提供备份 hook,以便在备份操作前冻结虚拟机文件系统,并在备份完成后取消解冻。

kubevirt-controller 使用注解创建 virt-launcher pod,使 Velero 可以在备份操作前和之后运行 virt-freezer 二进制文件。

freezeunfreeze API 是虚拟机快照 API 的子资源。有关详细信息,请参阅关于虚拟机快照

您可以在 Backup CR 中添加 hook,以便在备份操作前或之后在特定虚拟机上运行命令。

您可以通过创建一个 Schedule CR 而不是 Backup CR 来调度备份。

15.3.1. 创建备份 CR

您可以通过创建 Backup 备份自定义资源(CR)来备份 Kubernetes 镜像、内部镜像和持久性卷(PV)。

先决条件

  • 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
  • DataProtectionApplication CR 必须处于 Ready 状态。
  • 备份位置先决条件:

    • 您必须为 Velero 配置 S3 对象存储。
    • 您必须在 DataProtectionApplication CR 中配置了一个备份位置。
  • 快照位置先决条件:

    • 您的云供应商必须具有原生快照 API 或支持 Container Storage Interface(CSI)快照。
    • 对于 CSI 快照,您必须创建一个 VolumeSnapshotClass CR 来注册 CSI 驱动程序。
    • 您必须在 DataProtectionApplication CR 中配置了一个卷位置。

流程

  1. 输入以下命令来检索 backupStorageLocations CR:

    $ oc get backupStorageLocations -n openshift-adp

    输出示例

    NAMESPACE       NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    openshift-adp   velero-sample-1   Available   11s              31m

  2. 创建一个 Backup CR,如下例所示:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      labels:
        velero.io/storage-location: default
      namespace: openshift-adp
    spec:
      hooks: {}
      includedNamespaces:
      - <namespace> 1
      includedResources: [] 2
      excludedResources: [] 3
      storageLocation: <velero-sample-1> 4
      ttl: 720h0m0s
      labelSelector: 5
        matchLabels:
          app=<label_1>
          app=<label_2>
          app=<label_3>
      orLabelSelectors: 6
      - matchLabels:
          app=<label_1>
          app=<label_2>
          app=<label_3>
    1
    指定要备份的命名空间数组。
    2
    可选:指定一个要包含在备份中的资源的数组。资源可以是缩写方式(例如,'po' 代表 'pods')或完全限定的方式。如果未指定,则会包含所有资源。
    3
    可选:指定要从备份中排除的资源数组。资源可以是缩写方式(例如,'po' 代表 'pods')或完全限定的方式。
    4
    指定 backupStorageLocations CR 的名称。
    5
    具有所有指定标签的备份资源的 {key,value} 对映射。
    6
    具有一个或多个指定标签的备份资源的 {key,value} 对映射。
  3. 验证 Backup CR 的状态是否为 Completed

    $ oc get backup -n openshift-adp <backup> -o jsonpath='{.status.phase}'

15.3.1.1. 使用 CSI 快照备份持久性卷

在创建 Backup CR 前,您可以编辑云存储的 VolumeSnapshotClass 自定义资源(CR)来备份持久性卷(CSI)快照。

先决条件

  • 云供应商必须支持 CSI 快照。
  • 您必须在 DataProtectionApplication CR 中启用 CSI。

流程

  • metadata.labels.velero.io/csi-volumesnapshot-class: "true" 键值对添加到 VolumeSnapshotClass CR:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: <volume_snapshot_class_name>
      labels:
        velero.io/csi-volumesnapshot-class: "true"
    driver: <csi_driver>
    deletionPolicy: Retain

现在,您可以创建一个 Backup CR。

15.3.1.2. 使用 Restic 备份应用程序

您可以通过编辑备份自定义资源(CR)来使用 Restic Backup 资源、内部镜像和持久性卷备份 Kubernetes 资源。

您不需要在 DataProtectionApplication CR 中指定快照位置。

重要

Restic 不支持备份 hostPath 卷。如需更多信息,请参阅额外的 Restic 限制

先决条件

  • 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
  • 您不能将 DataProtectionApplication CR 中的 spec.configuration.restic.enable 设置为 false 来禁用默认的 Restic 安装。
  • DataProtectionApplication CR 必须处于 Ready 状态。

流程

  • 编辑 Backup CR,如下例所示:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      labels:
        velero.io/storage-location: default
      namespace: openshift-adp
    spec:
      defaultVolumesToFsBackup: true 1
    ...
    1
    在 OADP 版本 1.2 及更高版本中,在 spec 块中添加 defaultVolumesToFsBackup: true 设置。在 OADP 版本 1.1 中,添加 defaultVolumesToRestic: true

15.3.1.3. 创建备份 hook

您可以通过编辑备份自定义资源(CR)来创建 Backup hook 以在 pod 中运行的容器中运行命令。

在 pod 备份前运行 Pre hook。在备份后运行 Post hook。

流程

  • Backup CR 的 spec.hooks 块中添加 hook,如下例所示:

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      namespace: openshift-adp
    spec:
      hooks:
        resources:
          - name: <hook_name>
            includedNamespaces:
            - <namespace> 1
            excludedNamespaces: 2
            - <namespace>
            includedResources: []
            - pods 3
            excludedResources: [] 4
            labelSelector: 5
              matchLabels:
                app: velero
                component: server
            pre: 6
              - exec:
                  container: <container> 7
                  command:
                  - /bin/uname 8
                  - -a
                  onError: Fail 9
                  timeout: 30s 10
            post: 11
    ...
    1
    可选:您可以指定 hook 应用的命名空间。如果没有指定这个值,则 hook 适用于所有命名空间。
    2
    可选:您可以指定 hook 不应用到的命名空间。
    3
    目前,pod 是唯一可以应用 hook 的支持的资源。
    4
    可选:您可以指定 hook 不应用到的资源。
    5
    可选:此 hook 仅适用于与标签匹配的对象。如果没有指定这个值,则 hook 适用于所有命名空间。
    6
    备份前要运行的 hook 数组。
    7
    可选:如果没有指定容器,该命令将在 pod 的第一个容器中运行。
    8
    这是正在添加的 init 容器的入口点。
    9
    错误处理允许的值是 FailContinue。默认值为 Fail
    10
    可选:等待命令运行的时间。默认值为 30s
    11
    此块定义了在备份后运行的一组 hook,其参数与 pre-backup hook 相同。

15.3.2. 其他资源