4.6. OADP 备份
4.6.1. 备份应用程序
您可以通过创建一个 Backup
自定义资源 (CR) 来备份应用程序。请参阅创建备份 CR。
-
Backup
CR 为 Kubernetes 资源和 S3 对象存储上的内部镜像创建备份文件。 -
如果您的云供应商有原生快照 API 或支持 CSI 快照,则
Backup
CR 通过创建快照来备份持久性卷 (PV)。有关使用 CSI 快照的更多信息,请参阅使用 CSI 快照备份持久性卷。
有关 CSI 卷快照的更多信息,请参阅 CSI 卷快照。
S3 存储的 CloudStorage
API 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
- 如果您的云供应商不支持快照,或者应用程序位于 NFS 数据卷中,您可以使用 Kopia 或 Restic 创建备份。请参阅使用文件系统备份备份应用程序:Kopia 或 Restic。
…/.snapshot: read-only file system
错误
…/.snapshot
目录是一个快照复制目录,由多个 NFS 服务器使用。该目录默认具有只读访问权限,因此 Velero 无法恢复到这个目录中。
不要向 Velero 提供对 .snapshot
目录的写入权限,并禁用客户端对这个目录的访问。
OpenShift API for Data Protection (OADP) 不支持对由其他软件创建的卷快照进行备份。
您可以创建备份 hook,以便在备份操作之前或之后运行命令。请参阅创建备份 hook。
您可以通过创建一个 Schedule
CR 而不是 Backup
CR 来调度备份。请参阅使用 Schedule CR] 调度备份。
4.6.1.1. 已知问题
OpenShift Container Platform 4.14 强制执行一个 pod 安全准入 (PSA) 策略,该策略可能会在 Restic 恢复过程中阻止 pod 的就绪度。
这个问题已在 OADP 1.1.6 和 OADP 1.2.2 版本中解决,因此建议用户升级到这些版本。
如需更多信息,请参阅因为更改 PSA 策略,在 OCP 4.14 上进行 Restic 恢复部分失败。
4.6.2. 创建备份 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 中配置了一个卷位置。
流程
输入以下命令来检索
backupStorageLocations
CR:$ oc get backupStorageLocations -n openshift-adp
输出示例
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
创建一个
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>
验证
Backup
CR 的状态是否为Completed
:$ oc get backup -n openshift-adp <backup> -o jsonpath='{.status.phase}'
4.6.3. 使用 CSI 快照备份持久性卷
在创建 Backup
CR 前,您可以编辑云存储的 VolumeSnapshotClass
自定义资源(CR) 来使用 Container Storage Interface (CSI) 快照备份持久性卷,请参阅 CSI 卷快照。
如需更多信息,请参阅创建备份 CR。
先决条件
- 云供应商必须支持 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。
4.6.4. 使用文件系统备份对应用程序进行备份:Kopia 或 Restic
您可以使用 OADP 从卷的文件系统备份和恢复附加到 pod 的 Kubernetes 卷。这个过程称为文件系统备份 (FSB) 或 Pod 卷备份 (PVB)。它通过使用来自开源备份工具 Restic 或 Kopia 的模块来完成。
如果您的云供应商不支持快照,或者应用程序位于 NFS 数据卷中,您可以使用 FSB 创建备份。
FSB 与 OADP 集成提供了一种解决方案,用于备份和恢复几乎任何类型的 Kubernetes 卷。这个集成是 OADP 的一个额外功能,不是现有功能的替代品。
您可以通过编辑 Backup
备份自定义资源 (CR) 来使用 Kopia 或 Restic 对 Kubernetes 资源、内部镜像和持久性卷备份。
您不需要在 DataProtectionApplication
CR 中指定快照位置。
在 OADP 版本 1.3 及更高版本中,您可以使用 Kopia 或 Restic 备份应用程序。
对于 Built-in DataMover,您必须使用 Kopia。
在 OADP 版本 1.2 及更早版本中,您只能使用 Restic 备份应用程序。
FSB 不支持对 hostPath
卷进行备份。如需更多信息,请参阅 FSB 限制。
…/.snapshot: read-only file system
错误
…/.snapshot
目录是一个快照复制目录,由多个 NFS 服务器使用。该目录默认具有只读访问权限,因此 Velero 无法恢复到这个目录中。
不要向 Velero 提供对 .snapshot
目录的写入权限,并禁用客户端对这个目录的访问。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
您不能通过将
DataProtectionApplication
CR 中的spec.configuration.nodeAgent.enable
tofalse
来禁用默认的nodeAgent
安装。 -
您必须在
DataProtectionApplication
CR 中将spec.configuration.nodeAgent.uploaderType
设置为kopia
或restic
来选择 Kopia 或 Restic 作为 uploader。 -
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
。
4.6.5. 创建备份 hook
在执行备份时,可以根据正在备份的 pod,指定在 pod 内要执行的一个或多个命令。
可将命令配置为在任何自定义操作处理(Pre hook)或所有自定义操作完成后执行,且由自定义操作指定的任何其他项目都已备份(Post hook)。
您可以通过编辑备份自定义资源(CR)来创建 Backup
hook 以在 pod 中运行的容器中运行命令。
流程
在
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
- 错误处理允许的值是
Fail
和Continue
。默认值为Fail
。 - 10
- 可选:等待命令运行的时间。默认值为
30s
。 - 11
- 此块定义了在备份后运行的一组 hook,其参数与 pre-backup hook 相同。
4.6.6. 使用 Schedule CR 调度备份
调度操作允许您在特定时间创建由 Cron 表达式指定的数据的备份。
您可以通过创建 Schedule
自定义资源(CR)而不是 Backup
CR 来调度备份。
在您的备份调度中留有足够的时间,以便在创建另一个备份前完成了当前的备份。
例如,如果对一个命名空间进行备份通常需要 10 分钟才能完成,则调度的备份频率不应该超过每 15 分钟一次。
先决条件
- 您必须安装用于数据保护(OADP)Operator 的 OpenShift API。
-
DataProtectionApplication
CR 必须处于Ready
状态。
流程
检索
backupStorageLocations
CR:$ oc get backupStorageLocations -n openshift-adp
输出示例
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
创建一个
Schedule
CR,如下例所示:$ cat << EOF | oc apply -f - apiVersion: velero.io/v1 kind: Schedule metadata: name: <schedule> namespace: openshift-adp spec: schedule: 0 7 * * * 1 template: hooks: {} includedNamespaces: - <namespace> 2 storageLocation: <velero-sample-1> 3 defaultVolumesToFsBackup: true 4 ttl: 720h0m0s EOF
- 1
- 调度备份的
cron
表达式,例如0 7 * * *
代表在每天 7:00 执行备份。注意要以特定间隔调度备份,以以下格式输入
<duration_in_minutes>
:schedule: "*/10 * * * *"
在引号 (
" "
) 之间输入分钟值。 - 2
- 要备份的命名空间数组。
- 3
backupStorageLocations
CR 的名称。- 4
- 可选:在 OADP 版本 1.2 及更高版本中,在使用 Restic 进行卷备份时,将
defaultVolumesToFsBackup: true
键值对添加到您的配置中。在 OADP 版本 1.1 中,在使用 Restic 备份卷时添加defaultVolumesToRestic: true
键值对。在调度的备份运行后验证
Schedule
CR 的状态是否为Completed
:$ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'
4.6.7. 删除备份
您可以通过删除 Backup
自定义资源 (CR) 来删除备份文件。
删除 Backup
CR 和关联的对象存储数据后,您无法恢复删除的数据。
先决条件
-
您创建了
Backup
CR。 -
您知道
Backup
CR 的名称以及包含它的命名空间。 - 下载 Velero CLI 工具。
- 您可以访问集群中的 Velero 二进制文件。
流程
选择以下操作之一来删除
Backup
CR:要删除
Backup
CR 并保留关联的对象存储数据,请运行以下命令:$ oc delete backup <backup_CR_name> -n <velero_namespace>
要删除
Backup
CR 并删除关联的对象存储数据,请运行以下命令:$ velero backup delete <backup_CR_name> -n <velero_namespace>
其中:
- <backup_CR_name>
-
Backup
自定义资源的名称。 - <velero_namespace>
-
包含
Backup
自定义资源的命名空间。
4.6.8. 关于 Kopia
Kopia 是一个快速安全的开源备份和恢复工具,可让您创建数据的加密快照,并将快照保存到您选择的远程或云存储中。
Kopia 支持网络和本地存储位置,以及许多云或远程存储位置,包括:
- Amazon S3 以及与 S3 兼容的任何云存储
- Azure Blob Storage
- Google Cloud Storage 平台
Kopia 对快照使用可内容访问的存储:
- 快照始终是以增量方式进行的;已包含在之前快照中的数据不会重新上传到存储库。仅当文件被修改时,文件才会再次上传到存储库。
- 存储的数据会被去除重复数据;如果存在同一文件的多个副本,则仅存储其中一个文件。
- 如果文件被移动或重命名,Kopia 可以识别它们具有相同的内容,且不会重新上传它们。
4.6.8.1. OADP 与 Kopia 集成
除了 Restic 外,OADP 1.3 还支持 Kopia 作为 pod 卷备份的备份机制。您需要在安装时通过在 DataProtectionApplication
自定义资源(CR) 中设置 uploaderType
字段来选择其中一个。可能的值为 restic
或 kopia
。如果没有指定 uploaderType
,OADP 1.3 默认为使用 Kopia 作为备份机制。数据会从一个统一的存储库中读取或写入。
以下示例显示了配置了使用 Kopia 的 DataProtectionApplication
CR:
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: dpa-sample spec: configuration: nodeAgent: enable: true uploaderType: kopia # ...