×

OpenShift API for Data Protection (OADP) 功能提供备份和恢复应用程序的选项。

默认插件使 Velero 能够与某些云提供商集成,并能够备份和恢复 AWS 上的 Red Hat OpenShift Service 资源。

OADP 功能

OpenShift API for Data Protection (OADP) 支持以下功能

备份

您可以使用 OADP 备份 OpenShift 平台上的所有应用程序,也可以按类型、命名空间或标签过滤资源。

OADP 通过将 Kubernetes 对象和内部镜像保存为对象存储上的归档文件来备份它们。OADP 通过使用原生云快照 API 或容器存储接口 (CSI) 创建快照来备份持久卷 (PV)。对于不支持快照的云提供商,OADP 使用 Restic 备份资源和 PV 数据。

为了备份和恢复成功,您必须从应用程序备份中排除 Operators。

恢复

您可以从备份中恢复资源和 PV。您可以恢复备份中的所有对象,也可以按命名空间、PV 或标签过滤对象。

为了备份和恢复成功,您必须从应用程序备份中排除 Operators。

调度

您可以按指定的时间间隔安排备份。

钩子

您可以使用钩子在 Pod 中的容器中运行命令,例如fsfreeze 来冻结文件系统。您可以配置钩子在备份或恢复之前或之后运行。恢复钩子可以在 init 容器或应用程序容器中运行。

OADP 插件

OpenShift API for Data Protection (OADP) 提供与存储提供商集成的默认 Velero 插件,以支持备份和快照操作。您可以根据 Velero 插件创建自定义插件

OADP 还提供用于 AWS 资源备份的 Red Hat OpenShift Service 插件、OpenShift Virtualization 资源备份插件和容器存储接口 (CSI) 快照插件。

表 1. OADP 插件
OADP 插件 功能 存储位置

aws

备份和恢复 Kubernetes 对象。

AWS S3

使用快照备份和恢复卷。

AWS EBS

openshift

备份和恢复 AWS 上的 Red Hat OpenShift Service 资源。[1]

对象存储

kubevirt

备份和恢复 OpenShift Virtualization 资源。[2]

对象存储

csi

使用 CSI 快照备份和恢复卷。[3]

支持 CSI 快照的云存储

vsm

VolumeSnapshotMover 将快照从集群重新定位到对象存储中,以便在恢复过程中用于恢复有状态应用程序,例如在集群删除的情况下。[4]

对象存储

  1. 必需的。

  2. 虚拟机磁盘使用 CSI 快照或 Restic 进行备份。

  3. csi 插件使用 Kubernetes CSI 快照 API。

    • OADP 1.1 或更高版本使用snapshot.storage.k8s.io/v1

    • OADP 1.0 使用snapshot.storage.k8s.io/v1beta1

  4. 仅限 OADP 1.2。

关于 OADP Velero 插件

安装 Velero 时,您可以配置两种类型的插件

  • 默认云提供商插件

  • 自定义插件

两种类型的插件都是可选的,但大多数用户至少配置一个云提供商插件。

默认 Velero 云提供商插件

在部署期间配置oadp_v1alpha1_dpa.yaml文件时,您可以安装以下任何默认 Velero 云提供商插件

  • aws(Amazon Web Services)

  • openshift(OpenShift Velero 插件)

  • csi(容器存储接口)

  • kubevirt(KubeVirt)

您在部署期间在oadp_v1alpha1_dpa.yaml文件中指定所需的默认插件。

示例文件

以下.yaml文件安装openshiftawsazuregcp插件

 apiVersion: oadp.openshift.io/v1alpha1
 kind: DataProtectionApplication
 metadata:
   name: dpa-sample
 spec:
   configuration:
     velero:
       defaultPlugins:
       - openshift
       - aws
       - azure
       - gcp

自定义 Velero 插件

在部署期间配置oadp_v1alpha1_dpa.yaml文件时,您可以通过指定插件imagename来安装自定义 Velero 插件。

您在部署期间通过 `oadp_v1alpha1_dpa.yaml` 文件指定所需的自定义插件。

示例文件

以下 `.yaml` 文件安装默认的 `openshift`、`azure` 和 `gcp` 插件,以及一个名为 `custom-plugin-example`、镜像为 `quay.io/example-repo/custom-velero-plugin` 的自定义插件。

apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
 name: dpa-sample
spec:
 configuration:
   velero:
     defaultPlugins:
     - openshift
     - azure
     - gcp
     customPlugins:
     - name: custom-plugin-example
       image: quay.io/example-repo/custom-velero-plugin

Velero 插件返回“received EOF, stopping recv loop”消息

Velero 插件作为单独的进程启动。Velero 操作完成后(无论成功与否),它们都会退出。在调试日志中收到 `received EOF, stopping recv loop` 消息表示插件操作已完成。这并不意味着发生了错误。

OADP 插件已知问题

本节描述了 OpenShift 数据保护 API (OADP) 插件中的已知问题。

由于缺少密钥,Velero 插件在镜像流备份期间发生 panic

当备份和备份存储位置 (BSL) 在数据保护应用程序 (DPA) 的范围之外进行管理时,OADP 控制器(即 DPA 调和)不会创建相关的 `oadp---registry-secret`。

运行备份时,OpenShift Velero 插件在镜像流备份上发生 panic,并显示以下 panic 错误。

024-02-27T10:46:50.028951744Z time="2024-02-27T10:46:50Z" level=error msg="Error backing up item"
backup=openshift-adp/<backup name> error="error executing custom action (groupResource=imagestreams.image.openshift.io,
namespace=<BSL Name>, name=postgres): rpc error: code = Aborted desc = plugin panicked:
runtime error: index out of range with length 1, stack trace: goroutine 94…

避免 panic 错误的解决方法

要避免 Velero 插件 panic 错误,请执行以下步骤:

  1. 使用相关标签标记自定义 BSL。

    $ oc label backupstoragelocations.velero.io <bsl_name> app.kubernetes.io/component=bsl
  2. 标记 BSL 后,等待 DPA 调和。

    您可以通过对 DPA 本身进行任何小的更改来强制调和。

  3. DPA 调和后,确认已创建相关的 `oadp---registry-secret`,并且正确的注册表数据已填充到其中。

    $ oc -n openshift-adp get secret/oadp-<bsl_name>-<bsl_provider>-registry-secret -o json | jq -r '.data'

OpenShift ADP 控制器段错误

如果您配置启用了 `cloudstorage` 和 `restic` 的 DPA,则 `openshift-adp-controller-manager` pod 会无限期地崩溃和重启,直到 pod 因段错误循环崩溃而失败。

您只能定义 `velero` 或 `cloudstorage` 之一,因为它们是互斥字段。

  • 如果您同时定义了 `velero` 和 `cloudstorage`,则 `openshift-adp-controller-manager` 会失败。

  • 如果您既没有定义 `velero` 也没有定义 `cloudstorage`,则 `openshift-adp-controller-manager` 会失败。

有关此问题的更多信息,请参见 OADP-1054

OpenShift ADP 控制器段错误解决方法

配置 DPA 时,必须定义 `velero` 或 `cloudstorage` 之一。如果您在 DPA 中同时定义这两个 API,则 `openshift-adp-controller-manager` pod 会因段错误循环崩溃而失败。