4.7. 高级 OADP 特性和功能

本文档提供有关 OpenShift API for Data Protection (OADP) 的高级功能。

4.7.1. 在同一集群中使用不同的 Kubernetes API 版本

4.7.1.1. 列出集群中的 Kubernetes API 组版本

源集群可能会提供多个 API 版本,其中的一个版本是首选的 API 版本。例如,带有名为 Example 的 API 的源集群可能包括在 example.com/v1example.com/v1beta2 API 组中。

如果您使用 Velero 备份和恢复这样的源集群,Velero 仅备份了使用 Kubernetes API 首选版本的该资源的版本。

要返回上例,如果 example.com/v1 是首选的 API,则 Velero 只备份使用 example.com/v1 的资源的版本。另外,目标集群需要 example.com/v1 在它的一组可用 API 资源中注册,以便 Velero 恢复目标集群上的资源。

因此,您需要在目标集群上生成 Kubernetes API 组版本列表,以确保在一组可用的 API 资源中注册了首选的 API 版本。

流程

  • 输入以下命令:
$ oc api-resources

4.7.1.2. 关于启用 API 组版本

默认情况下,Velero 只备份使用 Kubernetes API 的首选版本的资源。但是,Velero 还包括一个启用 API 组版本功能,它解决了这个限制。当在源集群中启用时,这个功能会使 Velero 备份集群中支持的所有 Kubernetes API 组版本,而不只是首选集群。当版本存储在备份 .tar 文件中被保存后,可以在目标集群上恢复它们。

例如,带有名为 Example 的 API 的源集群可能包括在 example.com/v1example.com/v1beta2 API 组中,example.com/v1 是首选 API。

如果没有启用 Enable API Group Versions 功能,Velero 仅备份 Example 的首选 API 组版本,即 example.com/v1。启用该功能后,Velero 还会备份 example.com/v1beta2

当目标集群上启用了“启用 API 组版本”功能时,Velero 根据 API 组版本优先级顺序选择恢复的版本。

注意

启用 API 组版本仍处于测试阶段。

Velero 使用以下算法为 API 版本分配优先级,并将 1 作为最高优先级:

  1. destination 集群的首选版本
  2. source_ cluster 的首选版本
  3. 带有最高 Kubernetes 版本优先级的通用非首选支持版本

4.7.1.3. 使用启用 API 组版本

您可以使用 Velero 的启用 API 组版本功能来备份集群中支持的所有 Kubernetes API 组版本,而不只是首选版本。

注意

启用 API 组版本仍处于测试阶段。

流程

  • 配置 EnableAPIGroupVersions 功能标记:
apiVersion: oadp.openshift.io/vialpha1
kind: DataProtectionApplication
...
spec:
  configuration:
    velero:
      featureFlags:
      - EnableAPIGroupVersions

4.7.2. 从一个集群中备份数据,并将其恢复到另一个集群

4.7.2.1. 关于从一个集群中备份数据,并在另一个集群中恢复数据

{oadp-first} 旨在在同一 OpenShift Container Platform 集群中备份和恢复应用程序数据。MTC (Migration Toolkit for Containers) 旨在将容器(包括应用程序数据)从一个 OpenShift Container Platform 集群迁移到另一个集群。

您可以使用 OADP 从一个 OpenShift Container Platform 集群中备份应用程序数据,并在另一个集群中恢复它。但是,这样做比使用 MTC 或使用 OADP 在同一集群中备份和恢复更为复杂。

要成功使用 OADP 从一个集群备份数据并将其恢复到另一个集群,除了使用 OADP 备份和恢复数据需要的先决条件和步骤外,还需要考虑以下因素:

  • Operator
  • 使用 Velero
  • UID 和 GID 范围
4.7.2.1.1. Operator

您必须从应用程序的备份中排除 Operator,以便成功备份和恢复。

4.7.2.1.2. 使用 Velero

Velero (基于 OADP 构建)不支持在云供应商间原生迁移持久性卷快照。要在云平台之间迁移卷快照数据,您需要启用 Velero Restic 文件系统备份选项,该选项会在文件系统级别备份卷内容,使用 OADP Data Mover 进行 CSI 快照。

注意

在 OADP 1.1 及更早版本中,Velero Restic 文件系统备份选项被称为 restic。在 OADP 1.2 及更高版本中,Velero Restic 文件系统备份选项称为 file-system-backup

注意

Velero 的文件系统备份功能支持 Kopia 和 Restic,但目前 OADP 仅支持 Restic。

  • 您还必须使用 Velero 的 文件系统备份 在 AWS 区域或 Microsoft Azure 区域之间迁移数据。
  • Velero 不支持将数据恢复到比源集群 更早的 Kubernetes 版本的集群。
  • 在理论上,可以将工作负载迁移到比源更新的 Kubernetes 版本,但您必须考虑每个自定义资源的集群间 API 组的兼容性。如果 Kubernetes 版本升级会破坏内核或原生 API 组的兼容性,您必须首先更新受影响的自定义资源。
4.7.2.1.3. UID 和 GID 范围

当您从一个集群备份数据并将其恢复到另一个集群时,UID (用户 ID)和 GID (组 ID)范围可能会出现潜在的问题。下面的部分解释了这些潜在问题和缓解措施:

问题概述
在目标集群中,命名空间的 UID 和 GID 范围可能会改变。OADP 不会备份和恢复 OpenShift UID 范围元数据。如果支持的应用程序需要特定的 UID,请确保恢复时范围可用。如需有关 OpenShift 的 UID 和 GID 范围的更多信息,请参阅 OpenShift 和 UID 的指南
问题详细描述

当您使用 oc create namespace 在 OpenShift Container Platform 中创建命名空间时,OpenShift Container Platform 会为命名空间分配一个唯一用户 ID (UID) 范围,即 Supplemental Group (GID)范围和唯一的 SELinux MCS 标签。此信息存储在集群的 metadata.annotations 字段中。此信息是安全性上下文约束 (SCC) 注解的一部分,它由以下组件组成:

  • openshift.io/sa.scc.mcs
  • openshift.io/sa.scc.supplemental-groups
  • openshift.io/sa.scc.uid-range

当使用 OADP 恢复命名空间时,它会自动使用 metadata.annotations 中的信息,而无需为目标集群重置它。因此,如果出现以下条件之一,工作负载可能无法访问备份的数据:

  • 存在一个具有不同 SCC 注解的预先存在的命名空间,例如在不同集群中。在这种情况下,在备份时,OADP 会重复使用预先存在的命名空间,而不是您要恢复的命名空间。
  • 备份使用标签选择器,但其上运行的工作负载的命名空间没有标签。在这种情况下,OADP 不会备份命名空间,而是在恢复过程中创建一个新的命名空间,该命名空间不包括您备份的命名空间的注解。这会导致将新的 UID 范围分配给命名空间。

    如果 OpenShift Container Platform 根据从持久性卷数据备份时更改的命名空间注解为 pod 为 securityContext UID,则可能会出现问题。

  • 容器 UID 不再与文件所有者的 UID 匹配。
  • 发生错误,因为 OpenShift Container Platform 没有修改目标集群的 UID 范围,以匹配备份集群的数据。因此,备份集群与目标集群的 UID 不同,这意味着应用程序无法向目标集群读取或写入数据。
缓解方案

您可以使用以下一个或多个缓解方案来解决 UID 和 GID 范围问题:

  • 简单的缓解方案:

    • 如果您在 Backup CR 中使用标签选择器过滤要包含在备份中的对象,请确保将此标签选择器添加到包含工作区的命名空间中。
    • 在尝试恢复具有相同名称的命名空间前,请删除目标集群上任何已存在的命名空间版本。
  • 高级缓解方案:

    • 通过在迁移后执行修复 UID 范围的第 1-4 步来修复 UID 范围。第 1 步是可选的。

有关 OpenShift Container Platform 中 UID 和 GID 范围的详细讨论,重点放在一个集群中备份数据并在另一个集群中恢复数据时出现问题,请参阅 OpenShift 和 UID 的指南

4.7.2.2. 从一个集群中备份数据,并将其恢复到另一个集群

通常,您可以从一个 OpenShift Container Platform 集群备份数据,并以与将数据备份并恢复到同一集群的方式在另一个 OpenShift Container Platform 集群上恢复数据。但是,从一个 OpenShift Container Platform 集群备份数据时,会有一些额外的前提条件和不同之处,并在另一个集群中恢复它。

先决条件

  • 所有在平台上备份和恢复的相关先决条件(如 AWS、Microsoft Azure、GCP 等),特别是数据保护应用程序(DPA) 的先决条件。

流程

  • 在为您的平台提供的流程中添加以下内容:

    • 确保备份存储位置 (BSL) 和卷快照位置具有相同的名称和路径,以将资源恢复到另一个集群。
    • 在集群间共享相同的对象存储位置凭证。
    • 为获得最佳结果,请使用 OADP 在目标集群中创建命名空间。
    • 如果您使用 Velero file-system-backup 选项,请运行以下命令启用 --default-volumes-to-fs-backup 标志以便在备份过程中使用:

      $ velero backup create <backup_name> --default-volumes-to-fs-backup <any_other_options>
注意

在 OADP 1.2 及更高版本中,Velero Restic 选项名为 file-system-backup

4.7.3. 其他资源

有关 API 组版本的更多信息,请参阅在同一集群中使用不同的 Kubernetes API 版本

有关 OADP Data Mover 的更多信息,请参阅为 CSI 快照使用数据 Mover

有关在 OADP 中使用 Restic 的更多信息,请参阅使用 Restic 备份应用程序