Translated message

A translation of this page exists in English.

OpenShift API for Data Protection (OADP) 常见问题解答

已更新 -

Table of Contents

目录

免责声明:这里包含的到外部网站的链接仅供方便之用。红帽没有审查链接,也不对内容或其可用性负责。包含到外部网站的任何链接并不意味着红帽对网站或其实体、产品或服务的认可。您同意红帽不承担由于您使用(或依赖)外部网站或内容而导致的任何损失或费用的责任。

对于任何用于托管业务和用户工作负载的平台,数据保护都是一个重要的部分。数据保护操作可能包括按需备份、调度的备份和恢复。这些操作允许将集群内的对象备份到本地或公有云上的存储提供商,并在发生故障或计划维护时从备份中恢复集群。

为了实现这个目的,红帽创建了 OpenShift API for Data Protection(OADP)OADP 为 Red Hat Container Platform 提供了一个 API,供红帽合作伙伴用来创建灾难恢复和数据保护解决方案。

常见问题解答

什么是 OADP?

OADP (OpenShift API for Data Protection) 是红帽创建的用于在 OpenShift 集群中创建备份和恢复 API 的 operator。
您可以在以下链接中了解更多有关 OADP 的信息:
OADP 文档
OADP 客户门户网站:验证的解决方案、文章以及与支持团队的讨论
OADP 和 OpenShift Virtualization 入门
OADP 博客文章
红帽专家(也称为 MOB)的 OADP 博客
OADP 故障排除指南
使用带有 Multicloud Object Gateway 的 OpenShift API for Data Protection 备份 OpenShift 应用程序
Red Hat OADP 培训
Velero 文档 - 最新
Velero Code Wiki

目前支持的 OADP 版本

OADP 的未来版本

客户和合作伙伴应参考我们的合作伙伴页,以更好地了解支持的 OADP 的未来版本。

AWS S3 兼容备份存储供应商

  • 支持的 S3 对象存储

  • 由于 S3 供应商与 AWS SDKV1 和 SDKV2 的差异,一些客户可能会遇到问题。 最新的 OADP-1.4 版本提供了 aws 和现在的 legacy-aws 插件选项。详情请参阅文档

  • OADP 不支持用于备份数据不可变性的 S3 配置,详情请参阅我们的文档

    • S3 对象锁定
    • 对象保留
    • 存储桶版本控制
    • Write Once Read Many (WORM) 存储桶
  • S3 供应商已知的问题

如何升级 OADP

有关 OADP 升级的信息,请参阅官方文档。

调试 OADP, oadp-must-gather

OADP-1.5: oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.5 -- /usr/bin/gather --skip-tls
OADP-1.4: oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.4 -- /usr/bin/gather --skip-tls
OADP-1.3: oc adm must-gather --image=registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.3 -- /usr/bin/gather --skip-tls

如何检查每个容器 OADP 部署的详情

您可以在红帽容器目录中查找红帽为 OpenShift 提供的所有容器的详细信息

以上链接会过滤出 OADP。 请注意,OADP 1.3.0 或更高的版本是基于 rhel9 UBI 容器镜像构建,如 'oadp/oadp-velero-plugin-for-csi-rhel9'
您可以在此处找到:
- 安全信息
- Git 和源代码相关的信息
- RPM 软件包

是否需要使用 OADP 的 UI?

请查看我们与 CloudCasa 的合作伙伴关系与协作! CloudCasa 可以提供与 OADP 集成的托管的或内部的 Web 用户界面。 有关详细信息,请参阅我们的合作伙伴页

operator 提供了哪些 API?

OADP 提供了以下 API:

  • Backup(备份)
  • Restore(恢复)
  • Schedule(调度)
  • BackupStorageLocation
  • VolumeSnapshotLocation

红帽没有添加、删除或修改任何 Velero 上游项目中所述的 API 。Velero 网站详细介绍了 Velero API 类型

OADP 会备份整个集群吗?

不会。OADP 旨在备份 OpenShift Platform 上的客户应用程序。 OADP 无法成功备份和恢复 operator 或 etcd。 您可以通过命名空间或标签,使用多种方式自定义备份,以避免备份不当资源。

OADP 是否有相应的上游项目?

有。OADP Operator 在 oadp-operator 上游项目中开发。

OADP operator 的支持状态是什么?

请参阅 OADP 支持政策

OADP 是一个完整的端到端数据保护解决方案吗?

OpenShift API for Data Protection (OADP) 提供了备份和恢复应用程序的选项。您可以在我们的文档中找到关于 OADP 功能的更多详情

OADP 保护哪些数据?

OADP 提供的 API 可以备份和恢复 OpenShift 集群资源 (yaml 文件)、内部镜像和持久性卷数据。

OADP operator 会安装什么?

OADP operator 将安装 Velero 和 OpenShift 插件以供 Velero 使用,用于备份和恢复操作。

我是否可以在同一集群中安装 OADP 的多个版本?

不可以,每个 OADP 版本都可能有不同的 CustomResourceDefinitions。如果在同一集群中安装了多个 OADP 版本,只有一个 OADP 版本可以正常工作。
建议您在集群中仅安装一个 OADP (和 Velero)版本。请参阅 OADP 和 Velero 版本关系

云供应商和超大规模云服务商的已知问题

  • IBMCloud:
    • IBMCloud 的 k8s hostpath 被默认设置为 /var/data/kublet/pods,请参阅以下问题
    • 此问题将导致 OADP 的节点代理崩溃。
    • OADP 将自动检测在 IBMCloud 上运行的 OpenShift 集群,并进行调整。(请参阅以下详情)[https://issues.redhat.com/browse/OADP-4623]
    • 要覆盖 hostpath 设置,请查看和更新 OADP csv 设置。
oc get csv oadp-operator.v1.4.1 -o yaml
oc get nodes
oc debug node/$node
  • 验证 $path/kublet/pods 和 $path/kublet/plugins 的路径
  • 根据需要调整 CSV 中的设置。
containers:
- args:
  - --leader-elect
  command:
  - /manager
  env:
  - name: WATCH_NAMESPACE
    valueFrom:
      fieldRef:
        fieldPath: metadata.annotations['olm.targetNamespaces']
  - name: RESTIC_PV_HOSTPATH
  - name: FS_PV_HOSTPATH
    value: /var/lib/kubelet/pods
  - name: PLUGINS_HOSTPATH
    value: /var/lib/kubelet/plugins
  • Huawei:
    • Huawei 有与 IBMCloud 的 hostpath 设置类似的问题。 节点代理需要相同的自定义类型才能正常工作。

我是否可以和 MTC 一起安装 OADP?

只要您安装的 OADP 版本与 MTC 的版本匹配就可以,因为 OADP 版本依赖于 MTC。
例如,您不能与 OADP 1.1 一起安装 MTC 1.7,因为它需要 OADP 1.0。在这种情况下,您只能安装 OADP 1.0。

OADP 支持 CSI 快照吗?

支持,请参阅文档

虚拟机备份在 virt-freeze 上失败

通常在 Windows 虚拟机上,virt-freeze 命令可能会间歇性失败的问题。 目前已知的唯一解决方法是重试。
请参阅相关问题:
* CNV-75370
* CNV-79727
* CNV-56743

fsfreeze 失败,权限被拒绝:
* jira issue
* bugzilla

删除 Kubevirt Freeze Hook:
* KCS:OpenShift Virtualization:OADP 或 Cohesity 备份在备份过程中冻结了虚拟机

VSS 备份处理概述
* 非官方和不被支持的临时解决方案:此处
* 非官方和不被支持的 ACM 策略:此处

对于与 windows vss 中 vss 轮询超时相关的冻结问题
请联系红帽支持以获取使用以下 OADP 覆盖 (overrides) 的支持例外。 官方修复将会很快发布。

oadp-1.5 - 未发布的修复: OADP-7883
当前临时解决方案:

unsupportedOverrides:
   veleroImageFqin: quay.io/sseago/velero:csi-quick-poll

OADP-1.4 - 未发布的修复:OADP-7884
当前临时解决方案:

unsupportedOverrides:
  veleroImageFqin: quay.io/spampatt/velero:csi-polling

Velero 的上游修复
* Velero 1.18 的修复:这个修复将向后移植到 OADP-1.4 和 OADP-1.5
* 未来版本的修复

是否有计划在 OADP 中包括数据移动器(data mover)?

在 OADP 1.3.0 及更高版本中将完全支持数据移动器(data mover)

用户能否创建自己的备份?换句话说,非集群管理员用户可以创建备份和恢复吗?

可以,因为 OADP-1.5.0 OADP 支持为客户提供自助服务支持。自助服务文档

Velero backup [logs,describe] 命令出错,带有错误信息 "tls: failed to verify certificate: x509"

当从一个客户端机器执行时,DPA 证书设置不会更改 velero cli 的行为。 可以使用 velero backup logs 命令中的 --help 来获得帮助信息。

Usage:
  velero backup logs BACKUP [flags]

Flags:
      --cacert string              Path to a certificate bundle to use when verifying TLS connections.
  -h, --help                       help for logs
      --insecure-skip-tls-verify   If true, the object store's TLS certificate will not be checked for validity. This is insecure and susceptible to man-in-the-middle attacks. Not recommended for production.

The --cacert and --insecure-skip-tls-verify flags should ONLY be used with the following velero commands.
* velero backup describe
* velero backup download
* velero backup logs
* velero restore describe
* velero restore logs

如果要在此命令中使用 cacert,可以按如下方式将证书添加到 velero 部署中。

$ oc get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}' | base64 -d | oc exec -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt"

如何确定安装了 Velero OADP 的什么版本?

在安装了 OADP 后,velero 部署会包含镜像的标签(tag)。如果您使用默认配置安装 OADP,则将使用带有部署中调用版本的上游标记镜像。您还可以查看版本列表

在哪里可以找到使用 OADP API 进行备份/恢复的示例?

上游 oadp-operator 项目中的 OADP operator 页包括了一些使用示例。 另外,我们还维护一些示例应用程序

使用没有关联区域的 S3 兼容存储

有些 S3 兼容存储实现不需要设置区域。 在这种情况下,只需在 DPA yaml 配置中替换一个有效的 aws 区域,如 "us-east-1"。 例如,使用 MCG 的 OADP 文档。 参考 velero 问题

  • 用户应提供:
    • s3Url: https://foo/storage
    • region: us-east-1
 backupLocations:
    - velero:
        config:
          profile: "default"
          region: us-east-1
          s3Url:  https://foo/storage <s3 endpoint>
          insecureSkipTLSVerify: "true"
          s3ForcePathStyle: "true"
        provider: aws
        default: true
        credential:
          key: cloud
          name: cloud-credentials 
        objectStorage:
          bucket: <bucket_name> 
          prefix: <prefix> 

使用 Kopia 软件仓库

  • 用户可以使用 kopia 客户端连接到 s3 中的备份仓库。
export S3_BUCKET=<your bucket name>
export S3_REPOSITORY_PATH=<path without S3_BUCKET>
export S3_ACCESS_KEY=<s3 access key>
export S3_SECRET_ACCESS_KEY=<s3 secret access key>

"static-passw0rd" is the default password

kopia repository connect s3 \
    --bucket="$S3_BUCKET" \
    --prefix="$S3_REPOSITORY_PATH" \
    --access-key="$S3_ACCESS_KEY" \
    --secret-access-key="$S3_SECRET_ACCESS_KEY" \
    --password=static-passw0rd

kopia 客户端:https://kopia.io/docs/reference/command-line/
kopia 通用命令:https://kopia.io/docs/reference/command-line/common/
kopia 高级命令:https://kopia.io/docs/reference/command-line/advanced/

增量备份

目前,使用 OADP 增量备份的节省效果并不明显。相关改进正在进行中。
您可以通过以下链接找到如何确定每次增量备份确切细节的示例:
* kopia 故障排除

注意:以下输出中的 new-data 和 new-files 键。

2025-09-26 15:35:53 UTC kc492e2ac155921724d6c61c8f4be240b 108.3 MB dgrwxrwxr-x files:101 dirs:6 new-data:15.9 MB new-files:83 new-dirs:6 compression:0.0% (latest-2) pins:velero-pin
2025-09-26 15:38:04 UTC k8d3195f8fb0c0ee9ccc45f4a2be4f34e 108.3 MB dgrwxrwxr-x files:104 dirs:6 new-data:68 B new-files:1 new-dirs:1 compression:0% latest-1,hourly-1,daily-1,weekly-1,monthly-1,annual-1) pins:velero-pin

OADP 能否从恢复集群中恢复带有基础域的路由?

当要恢复的路由是生成的路由时,OADP 将从恢复集群中恢复基域的路由

生成的路由是一个在创建时没有指定 route.spec.host 的路由,并由 OpenShift 为路由生成主机名。生成的路由将带有有注解 "openshift.io/host.generated: 'true'"。如果您手动将此注解添加到路由中,则在恢复过程中可能会发生意外行为。如果用户修改了生成的值中的 host(主机)值,则主机值可能会在恢复时丢失。

目前,在 OADP 中没有机制来根据一个非生成的路由的集群基本域名动态设置路由主机值。

同样,对于一个生成的路由,主机值将被 oadp-operator 剥离,以便在恢复集群中重新生成。对生成路由中的 .spec.host 的任何修改都会在恢复时丢失。

我是否可以关闭内部镜像仓库(registry)镜像备份?

如果您在备份或恢复期间遇到与内部镜像仓库镜像 (ImageStreams) 备份相关的错误,可以在 DataProtectionApplication 规范中关闭镜像备份功能:

spec:
  backupImages: false // set this to disable image backup/restore

将备份设置为过期

创建备份时,您可以通过添加标志 --ttl 来指定 TTL(生存时间)。如果 Velero 发现现有备份资源已过期,它会删除:

  • 备份资源
  • 云对象存储中的备份文件
  • 所有 PersistentVolume 快照
  • 所有关联的恢复

上游文档及详情

恢复 OADP 备份的问题:应用程序无法访问数据

在 OpenShift 中创建命名空间时,会为其分配一个唯一的用户 Id (UID) 范围、一个 Supplemental Group (GID) 范围和唯一的 SELinux MCS 标签。此信息存储在 Namespace 的 metadata.annotations 字段中。每次创建新命名空间时,OpenShift 会为它分配一个来自可用 UID 池的新范围,并更新 metadata.annotations 字段以反映分配的值。我们将这些注解称为为 SCC (SecurityContextConstaints) 注解。

但是,如果 Namespace 资源已经设置了这些注解,OpenShift 不会为 Namespace 重新分配新值。相反,它会假定现有值有效并继续。

以下是 OpenShift 命名空间中的 SCC 注解
* openshift.io/sa.scc.mcs
* openshift.io/sa.scc.supplemental-groups
* openshift.io/sa.scc.uid-range

如果出现以下情况,工作负载在恢复后可能无法访问数据
* 存在一个与备份时 SCC 注解不同的预置命名空间(例如在不同的集群上),OADP 将重新使用该预置命名空间。
* 备份使用了一个标签选择器,但运行工作负载的命名空间没有该标签。OADP 不会备份该命名空间,但在恢复期间会创建一个没有之前命名空间注解的新命名空间,并为命名空间分配一个新的 UID 范围。

这可能会对客户的工作负载造成问题,因为 OpenShift 会根据命名空间注解分配一个 pod securityContext UID,而它在持久性卷数据被备份后发生了变化。
* 容器 UID 不再与文件所有者的 UID 匹配
* 应用程序可能会报错,提示它无法对不同 UID 拥有的数据进行读/写

简单的缓解方案包括
* 使用标签选择器过滤备份对象时,将标签选择器添加到包含工作负载的命名空间中。
* 在恢复前删除预先存在的命名空间

高级缓解方案
* 按照迁移后修改 UID 范围的步骤 2-4 在恢复的集群中更新文件所有者

在一个新的集群中,从一个其中包括了可能与其它命名空间相冲突的 UID 范围的备份中恢复命名空间可能会存在一些风险。要降低这些风险,客户可参照迁移后修改 UID 范围中的步骤 1-4

如需有关 OpenShift 的 UID/GID 范围的更多信息,请参阅 OpenShift 和 UID 指南

从一个集群备份数据并恢复到另一个集群

  • 要成功地在两个不同集群之间备份和恢复数据,请确保在两个集群中的 DPA 配置中:
    • OpenShift 文档
    • 备份存储位置 (BSL) 和卷快照位置具有相同的名称和路径,用于将资源恢复到另一个集群。
    • 必须在集群间共享相同的对象存储位置凭证
    • 上游 Velero 文档在某些情况下很有用。
    • 有关卷备份和恢复,请参阅最新的 OADP 文档和 datamover 部分。
    • 允许 OADP 在目标集群上创建命名空间,以获得最佳结果。
    • 当将 PVC 恢复到一个已存在卷的命名空间中时,在进行恢复前,您应首先删除任何需要更新的 PVC。对于 Restic 用例,还必须删除挂载 pod 的 Deployment (或 DC 等),假设 Deployment 也处于被恢复的备份中。

灾难恢复 - 使用调度 (Schedules) 和只读备份存储位置

在灾难恢复过程中,建议您将备份位置 accessMode 设置为 ReadOnly,以防止在恢复过程中向备份存储位置添加/删除内容。

您可以将 accessMode 设置为 readOnly,如在 DataProtectionApplication spec 中

...
spec:
  backupLocations:
    - velero:
        accessMode: ReadOnly
...

继续从备份中恢复。

在使用 ArgoCD 时 OADP 恢复失败

如果在恢复过程中使用了 ArgoCD,则可以出现恢复失败的情况。这可能是由 ArgoCD app.kubernetes.io/instance 使用的标签造成的。该标签用于识别 ArgoCD 需要管理哪些资源,它们可能在恢复时与 OADP 管理资源冲突。

要解决这个问题,您可以将 ArgoCD yaml 中的 .spec.resourceTrackingMethod 设置为 annotation+labelannotation。 如果问题仍然存在,在恢复前禁用 ArgoCD,然后在恢复完成后再次启用。

相关参考:
- 为包含由 ArgoCD 管理的 NS 添加备份警告
- VolumeSnapshot 在备份过程中被删除(argocd)
- OADP + OpenShift GitOps - 实施应用程序灾难恢复的方法

请在发生错误时告知我们,以便我们解决问题。

我可以将 OADP 安装到多个 OpenShift 项目中来启用项目所有者吗?

我们将很快将提供与该用例相关的额外文档。我们正在 github.com/migtools/oadp-non-admin 中主动处理这个用例(在 OADP-3931 中跟踪)。但在这里,我们强调一下。 可以将 OADP 安装到多个命名空间中,以使多个集群管理员能够管理自己的 OADP 实例。 OADP 的部署必须使用相同的版本,在同一集群中安装不同的 OADP 版本不被支持。

  • 需要每个 OADP 部署都有一组唯一的凭证和 BackupStorageLocation 配置。 工作流已经过 Restic 和 CSI 验证。
  • 值得注意的是,默认情况下,每个 OADP 部署在命名空间间都有集群级别的访问权限。

我试图将 OADP 与 ROSA 集群搭配使用,并需要帮助

我们最近更新了有关使用 ROSA 集群安装和配置 OADP 的文档。 详情请参阅此文档

我为备份设置了一个非常短的 TTL,但 TTL 过期后数据仍然存在

过期的影响并不会立即生效,它们会在 gc-controller 每小时运行其协调循环时被应用。

OADP-1.2.x Datamover 启用的备份/恢复一直处于 WaitingForPluginOperations

  • 备份一直处于等待状态的一个潜在原因是 restic 锁定。 要确定根本原因是否是 restic 锁定,请使用以下命令检查 vsb。
 oc get vsb -n <protected-ns> -o yaml | grep resticrepository
  • 查找与 restic 锁定相关的错误, Fatal: unable to create lock in backend: repository is already locked
  • 必须删除锁定才能使备份/恢复成功。
  • 请参考:
    • https://restic.readthedocs.io/en/stable/100_references.html?highlight=lock#locks
    • https://forum.restic.net/t/detecting-stale-locks/1889/15
    • https://github.com/restic/restic/issues/1450

备注:当通过调度或重复运行方式执行 OADP 1.1 中的 Datamover 备份时,需要进行 vsb 清理

如果您通过 Velero 调度程序运行启用了 datamover 的备份,则需要移除 VSB 以避免恢复中的内容不一致。 这也适用于以手动方式或编程方式执行的重复备份。 请参阅本文档中的 vsb 清理说明。

对于 OADP 1.1.x,将不会发布这个问题的修复。 客户需要升级到 OADP 1.2.x。

为了避免 velero 调度程序出现问题,我们建议通过包含 backup 命令和 vsb 清理的 k8s cron 作业 来执行 velero 备份。

OADP 1.1 的 DataMover 备份清理

在 OADP 1.1 中,datamover 可能会保留一些资源。

删除存储桶中的快照

在 DPA .spec.backupLocation.objectStorage.bucket 中指定的存储桶中将会有快照(在 /
中)
- 删除此文件夹以删除存储桶中的所有快照

/
文件夹中,将有额外的前缀为 /-pvc 的文件夹,其中 volumeSnapshotContent 名称由每个 PVC 的 datamover 创建的 volumeSnapshotContent。
- 删除此文件夹可以删除存储桶中的一个单个快照

删除集群资源:主要场景有两种:

1.Datamover 完成:volumeSnapshotBackup/volumeSnapshotRestore CR 仍然存在于应用程序命名空间中。

DataMover 备份:
oc delete vsb -n --all

DataMover 恢复:
oc delete vsr -n --all

  • 备注:另外,如果需要,还可以删除 volumeSnapshotContents
    oc delete volumesnapshotcontent --all

2.DataMover 部分失败或完全失败:VSB/VSR CR 存在于应用程序命名空间中,以及这些控制器创建的额外资源。

DataMover 备份:

oc delete vsb -n --all

oc delete volumesnapshot -A --all

oc delete volumesnapshotcontent --all

oc delete pvc -n
--all

oc delete replicationsource -n
--all

DataMover 恢复:

oc delete vsr -n --all

oc delete volumesnapshot -A --all

oc delete volumesnapshotcontent --all

oc delete replicationdestination -n
--all

在 VolumeSnapshotContent 对象中检查和更新快照内容失败

用户可能会注意到,在备份过程中会为每个卷创建一个 VolumeSnapShotContent 对象。 用户也可能注意到,VolumeSnapShotContents 对象处于错误状态,类似如下。 这是一个已知的临时问题,应在 OpenShift 协调 VSC 后被解决。 如需了解更多详细信息,请参阅:创建卷快照时出错

      Failed to check and update snapshot content: failed to remove
      VolumeSnapshotBeingCreated annotation on the content
      snapcontent-6cd696d3-2cf4-4c4d-8d96-439dc090b10b: "snapshot controller
      failed to update snapcontent-6cd696d3-2cf4-4c4d-8d96-439dc090b10b on API
      server: Operation cannot be fulfilled on
      volumesnapshotcontents.snapshot.storage.k8s.io
      \"snapcontent-6cd696d3-2cf4-4c4d-8d96-439dc090b10b\": the object has been
      modified; please apply your changes to the latest version and try again"

OADP 用于 CSI 快照的 Data Mover 是如何工作的?

博客文章详细介绍了 OADP datamover 的工作方式。 另请参阅我们的公共文档

VolumeSnapContent 处于失败状态

您可能会发现以下错误,从而导致备份的时间比通常要长,或者最终失败:

snapshot controller failed to update or failed to remove...xxxxx
the object has been modified; please apply your changes to the latest version and try again
  • 这是一个已知问题,并有一个相关的修复。
  • 可以删除失败的卷快照内容对象,这样应会自动重新创建。 在这种情况下,请确保您的备份可以使用正确的数据成功恢复。

BuildConfig 应用程序的备份部分失败

当构建 pod 是备份的一部分时,可能会因为构建 pod 已完成导致备份部分失败。

临时解决方案是,通过在构建 pod 中添加以下注解,将卷排除在构建 pod 的备份中:backup.velero.io/backup-volumes-excludes=buildworkdir,container-storage-root,build-blob-cache

构建 pod 可以通过标签或注解 openshift.io/build.name=somebuildname 来识别

注解构建 pod 的命令

NS=<backup-includedNamespace> && oc annotate -n $NS $(oc get pods -n $NS -oname -l openshift.io/build.name=<buildName>) backup.velero.io/backup-volumes-excludes=buildworkdir,container-storage-root,container-storage-run,build-blob-cache

可以使用 OADP 备份 3scale API Mgmt 吗?

请参阅本文档

未找到源文件,至少有一个源文件无法被读取

  • 使用文件系统级卷备份 (FSB) 时,您会看到与备份类似的内容
    日志,如下所示
time="2023-09-06T06:04:37Z" level=error msg="Error backing up item" backup=openshift-adp/schedule-202309045804985 error="pod volume backup failed: running Restic backup, stderr={\"message_type\":\"error\",\"error\":{\"Op\":\"lstat\",\"Path\":\"application-name-77d8987g765v-76vqv_2023-08-09-22-04.log\",\"Err\":2},\"during\":\"archival\",\"item\":\"/host_pods/3dfghjkytdcvb-rfbijn-47b85-ftrv3i-34567ng4i/volumes/kubernetes.io~azure-file/pvc-45678-dfgjy6-dfjg6vft-7657fv654c/application-name-77d89cf56c-76vqv_2023-08-09-22-04.log\"}
\"error\":{\"Op\":\"lstat\",\"Path\":\"indices/IF-3KSDFGHG3-
Zy/0/index/_2x79j_1_Lucene91_1.dvm\",\"Err\":2},\"during\":\"archival\",\"item\":\"/
host_pods/41ce-a170-28casfdafdg/volumes/kubernetes.io~csi/
pvc-4a8ba939-8bd0-443b-91aa-cb0a36066586/mount/indices/IF-3K2QkQLSG3-ZyKKa1Nw/0/index/
_2x79j_1_Lucene91_1.dvm\"}\nWarning: at least one source file could not be read\n: error
running restic

如果文件系统存在频繁变动(Churn),在执行 pod 卷备份时文件不再存在时,会出现这种情况。文件可能会在 restic 初始扫描卷时存在,但在文件被实际备份到 restic 存储时已被删除。
- 考虑使用 CSI 备份
- 考虑排除卷

根据新 CRD 模式验证现有 CR 时出错 ("podvolumerestores.velero.io")

如果您在从之前的版本升级到 OADP 1.2+ 时存在一个安装计划错误,这意味着您在升级前创建了一个恢复。

在启用了 restic 时,在启用 velero 恢复过程中,会在恢复持久性卷数据时创建一个 podvolumerestore 自定义资源。

在 OADP 1.2 中,podvolumerestores 对象有一个新的必填字段,而 OADP 1.1 podvolumerestore 对象没有这个字段。只要 podvolumerestores 不是正在处理中的状态时就可以安全地删除它们,在创建另一个恢复时会重新生成一个。

删除所有 podvolumerestores 以继续升级。

通过 Velero 部署别名使用带有 cacert 的 velero 命令

有些用户可能希望使用 velero CLI,而无需在自己的系统上安装它。

您可以使用经过别名处理的 velero 命令,如

alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'

如果要在此命令中使用 cacert,可以按如下方式将证书添加到 velero 部署中。

$ oc get dataprotectionapplications.oadp.openshift.io <dpa-name> -o jsonpath='{.spec.backupLocations[0].velero.objectStorage.caCert}' | base64 -d | oc exec -i deploy/velero -c velero -- bash -c "cat > /tmp/your-cacert.txt"
velero describe backup <backup-name> --details --cacert /tmp/your-cacert.txt

在 OADP 的未来版本中,我们可以将证书挂载到 velero pod,而无需上述的额外步骤。

当 BSL 配置中未设置 checksumAlgorithm 时,使用 S3 兼容 (MCG/ODF/IBM) BackupStorageLocation(BSL) 备份失败

当执行带有 Noobaa 作为备份位置的应用程序时,如果未设置 checksumAlgorithm 配置参数,备份会失败。这个问题的一个临时解决措施是,如果您未提供这个值,会为 Backup Storage Location (BSL) 配置 添加一个空值的 checksumAlgorithm
空值只会为使用 Data Protection Application (DPA) 自定义资源 (CR) 创建的 BSL 添加,如果使用任何其他方法创建 BSL,则不会添加这个值。这适用于 OADP 1.4+。

S3 存储桶版本控制

使用 S3 存储桶版本控制(S3 bucket versioning)会导致 OADP 备份失败是一个已知的问题。 OADP 团队不推荐使用 S3 存储桶版本控制功能。
参考资料:
- AWS Bucket Versioning
- Minio Bucket Versioning
- GCP Bucket Versioning

错误可能包括:
- "unable to write blobcfg blob:PutBlob() failed for "kopia.blobcfg": unable to complete PutBlob"

恢复后,带有 NFS 卷的 pod 未就绪,等待名为 restore-wait 的容器

PodVolumeRestore 具有 Failed 状态,错误为 ".../.snapshot: read-only file system"

"../.snapshot" 目录是一个被多个 NFS 服务器使用的快照副本目录。它们是只读的,velero 无法将数据恢复到此路径。另外,也应该为 velero 提供此目录的写权限。

您应该禁用客户端对此快照复制目录的访问权限。

NetApp ontap: 取消选择 Show the Snapshot copies directory to clientsAllow clients to access Snapshot copies directory. https://docs.netapp.com/us-en/ontap/enable-snapshot-dir-access-task.html
Portworx Flashblade: 取消选择 Snapshot 选项 https://docs.portworx.com/portworx-backup-on-prem/reference/restore-with-fb

Azure File CSI 驱动和恢复

AzureFile CSI 驱动只支持执行快照,但支持恢复。 要临时解决这个问题,OADP 建议查看:
- CloudCasa CloudCasa integrates with OADP or stock Velero.
- 红帽知识库文章

配置 NodeAgent 和节点标识

OADP 的 DPA 使用 k8s nodeSelector 来选择哪些节点可以运行 nodeAgent。 指定的任何标签都必须与 EACH 节点上的标签匹配。
- 以下是一个错发示例,它无法正常工作,除非两个标签都位于该节点上。

 28   configuration:
 29     nodeAgent:
 30       enable: true
 31       podConfig:
 32         nodeSelector:
 33           'node-role.kubernetes.io/infra: ""'
 34           'node-role.kubernetes.io/worker: ""'
  • 正确的做法是,使用一个自定义标签标记您选择运行 nodeAgent 的节点
    • 'node-role.kubernetes.io/nodeAgent: ""
 28   configuration:
 29     nodeAgent:
 30       enable: true
 31       podConfig:
 32         nodeSelector:
 33           'node-role.kubernetes.io/nodeAgent: ""'

备份和恢复 Windows 虚拟机

已知问题:
- 因为 guest-agent,Windows 虚拟机的 OADP 备份出现 PartiallyFailed 状态

虚拟托管风格的存储桶无法用于文件系统备份

已知问题:https://github.com/vmware-tanzu/velero/issues/8739
影响 Tencent Cloud Object Storage (Tencent COS)

  • 以下是通过 CSI 快照仅备份 pv/pvc 数据的示例
apiVersion: velero.io/v1
kind: Backup
metadata:
  

\# A name for your backup name: my-pvc-only-backup

\# The namespace where OADP/Velero is installed namespace: openshift-adp spec:

\# A list of namespaces to include in the backup. includedNamespaces: - ecm-adt02

\# A list of resource types to include in the backup.

\# Only these resources will be backed up from the included namespaces. includedResources: - persistentvolumeclaims

\# The name of the backup storage location where this backup should be stored. storageLocation: ecm

\# The amount of time before this backup is considered expired and eligible

\# for garbage collection. ttl: 720h0m0s

备注:
- 您需要安装带有 csi 插件的 Velero:https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/backup_and_restore/oadp-application-backup-and-restore#oadp-enabling-csi-dpa_installing-oadp-aws
- 您需要满足 csi 快照备份的所有先决条件: https://docs.redhat.com/en/documentation/openshift_container_platform/4.18/html/backup_and_restore/oadp-application-backup-and-restore#oadp-backing-up-pvs-csi-doc

Openshift Data Foundation / Openshift Container Storage 中的 SELinux 重新标记

恢复虚拟机后,Ceph 容量高于预期

为 Data Mover 配置 CephFS PVC

OpenShift API for Data Protection (OADP)操作器版本高于支持的 OpenShift 集群版本

Comments