4.12. 高级 OADP 特性和功能


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

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

4.12.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.12.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.12.1.3. 使用启用 API 组版本

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

注意

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

流程

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

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

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

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

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

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

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

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

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

4.12.2.2. 关于确定要备份的 pod 卷

在使用文件系统备份(FSB)启动备份操作前,您必须指定包含要备份的卷的 pod。Velero 将此过程称为"发现"适当的 pod 卷。

Velero 支持两种方法确定 pod 卷:

  • opt-in 方法 : opt-in 方法要求您主动表示您要包含 - opt-in - 一个卷在备份中。您可以通过标记包含要备份的卷的每个 pod 来达到此目的。当 Velero 找到持久性卷 (PV) 时,它会检查挂载卷的 pod。如果 pod 使用卷名称标记,Velero 会备份 pod。
  • opt-out 方法 :使用 opt-out 方法,您必须主动指定您要从备份中排除卷。为此,您可以标记包含您不想备份的卷的每个 pod。当 Velero 找到 PV 时,它会检查挂载卷的 pod。如果 pod 使用卷的名称标记,Velero 不会备份 pod。
4.12.2.2.1. 限制
  • FSB 不支持备份和恢复 hostpath 卷。但是 FSB 支持备份和恢复本地卷。
  • Velero 对它创建的所有备份存储库使用静态通用加密密钥。这个静态密钥意味着可以访问备份存储的任何人也可以解密您的备份数据。务必要限制对备份存储的访问。
  • 对于 PVC,每个增量备份链都会在 pod 重新调度之间维护。

    对于不是 PVC 的 pod 卷,如 emptyDir 卷,如果一个 pod 被删除或重新创建(例如,通过 ReplicaSet 或一个部署),则这些卷的下一次备份将是完整备份,而不是增量备份。假设 pod 卷的生命周期由其 pod 定义。

  • 虽然备份数据可能会以递增方式保存,备份大型文件(如数据库)可能需要很长时间。这是因为 FSB 使用 deduplication 来查找需要备份的区别。
  • FSB 通过访问运行该 pod 的节点的文件系统来读取和写入卷中的数据。因此,FSB 只能备份从 pod 挂载的卷,而不直接从 PVC 进行挂载。有些 Velero 用户通过运行一个 staging pod (如 BusyBox 或 Alpine 容器)来解决这个限制,以便在执行 Velero 备份前挂载这些 PVC 和 PV 对。
  • FSB 要求将卷挂载到 <hostPath>/<pod UID> 下,<hostPath> 可以被配置。有些 Kubernetes 系统(如 vCluster)不会在 <pod UID> 子目录下挂载卷,VFB 无法按预期工作。
4.12.2.2.2. 使用 opt-in 方法备份 pod 卷

您可以使用 opt-in 方法来指定需要由文件系统备份(FSB)备份哪些卷。您可以使用 backup.velero.io/backup-volumes 命令进行此操作。

流程

  • 在每个包含您要备份的一个或多个卷的 pod 中,输入以下命令:

    $ oc -n <your_pod_namespace> annotate pod/<your_pod_name> \
      backup.velero.io/backup-volumes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>

    其中:

    <your_volume_name_x>
    指定 pod 规格中 xth 卷的名称。
4.12.2.2.3. 使用 opt-out 方法备份 pod 卷

使用 opt-out 方法时,所有 pod 卷都使用文件系统备份(FSB)备份,但有一些例外:

  • 挂载默认服务帐户令牌、secret 和配置映射的卷。
  • hostPath

您可以使用 opt-out 方法指定不要备份的卷。您可以使用 backup.velero.io/backup-volumes-excludes 命令进行此操作。

流程

  • 在包含您不想备份的一个或多个卷的 pod 中,运行以下命令:

    $ oc -n <your_pod_namespace> annotate pod/<your_pod_name> \
      backup.velero.io/backup-volumes-excludes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>

    其中:

    <your_volume_name_x>
    指定 pod 规格中 xth 卷的名称。
注意

您可以使用 --default-volumes-to-fs-backup 标志运行 velero install 命令,为所有 Velero 备份启用此行为。

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

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

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

通常,您可以从一个 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.12.3. 其他资源

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

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.