4.5. OADP 用例
以下是使用 OADP 和 ODF 备份应用程序的用例。
4.5.1.1. 使用 OADP 和 ODF 备份应用程序 复制链接链接已复制到粘贴板!
在这种情况下,您可以使用 OADP 备份应用程序,并将备份存储在 Red Hat OpenShift Data Foundation (ODF) 提供的对象存储中。
- 您可以创建一个对象存储桶声明(OBC)来配置备份存储位置。您可以使用 ODF 配置 Amazon S3 兼容对象存储桶。ODF 提供 MultiCloud Object Gateway (NooBaa MCG) 和 Ceph 对象网关,也称为 RADOS 网关(RGW)、对象存储服务。在这种情况下,您可以使用 NooBaa MCG 作为备份存储位置。
-
您可以使用
aws供应商插件在 OADP 中使用 NooBaa MCG 服务。 - 您可以使用备份存储位置(BSL)配置数据保护应用程序(DPA)。
- 您可以创建备份自定义资源(CR)并指定要备份的应用程序命名空间。
- 您可以创建并验证备份。
先决条件
- 已安装 OADP Operator。
- 已安装 ODF Operator。
- 您有一个应用程序,其数据库在单独的命名空间中运行。
流程
创建一个 OBC 清单文件来请求 NooBaa MCG 存储桶,如下例所示:
apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: test-obc namespace: openshift-adp spec: storageClassName: openshift-storage.noobaa.io generateBucketName: test-backup-bucket其中:
test-obc- 指定对象存储桶声明的名称。
test-backup-bucket- 指定存储桶的名称。
运行以下命令来创建 OBC:
$ oc create -f <obc_file_name>其中:
<obc_file_name>- 指定对象存储桶声明清单的文件名。
当您创建 OBC 时,ODF 会创建一个
secret和一个配置映射,其名称与对象存储桶声明相同。secret具有存储桶凭证,配置映射有访问存储桶的信息。要从生成的配置映射中获取存储桶名称和存储桶主机,请运行以下命令:$ oc extract --to=- cm/test-obctest-obc是 OBC 的名称。输出示例
# BUCKET_NAME backup-c20...41fd # BUCKET_PORT 443 # BUCKET_REGION # BUCKET_SUBREGION # BUCKET_HOST s3.openshift-storage.svc要从生成的
secret获取存储桶凭证,请运行以下命令:$ oc extract --to=- secret/test-obc输出示例
# AWS_ACCESS_KEY_ID ebYR....xLNMc # AWS_SECRET_ACCESS_KEY YXf...+NaCkdyC3QPym运行以下命令,从
openshift-storage命名空间中的 s3 路由获取 S3 端点的公共 URL:$ oc get route s3 -n openshift-storage使用对象存储桶凭证创建一个
cloud-credentials文件,如下所示:[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>使用
cloud-credentials文件内容创建cloud-credentialssecret,如下所示:$ oc create secret generic \ cloud-credentials \ -n openshift-adp \ --from-file cloud=cloud-credentials配置 Data Protection Application (DPA),如下例所示:
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: oadp-backup namespace: openshift-adp spec: configuration: nodeAgent: enable: true uploaderType: kopia velero: defaultPlugins: - aws - openshift - csi defaultSnapshotMoveData: true backupLocations: - velero: config: profile: "default" region: noobaa s3Url: https://s3.openshift-storage.svc s3ForcePathStyle: "true" insecureSkipTLSVerify: "true" provider: aws default: true credential: key: cloud name: cloud-credentials objectStorage: bucket: <bucket_name> prefix: oadp其中:
defaultSnapshotMoveData-
设置为
true来使用 OADP Data Mover 将 Container Storage Interface (CSI)快照移动到远程对象存储。 s3Url- 指定 ODF 存储的 S3 URL。
<bucket_name>- 指定存储桶名称。
运行以下命令来创建 DPA:
$ oc apply -f <dpa_filename>运行以下命令,验证 DPA 是否已成功创建。在示例输出中,您可以看到
status对象将type字段设置为Reconciled。这意味着 DPA 已被成功创建。$ oc get dpa -o yaml输出示例
apiVersion: v1 items: - apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: namespace: openshift-adp #...# spec: backupLocations: - velero: config: #...# status: conditions: - lastTransitionTime: "20....9:54:02Z" message: Reconcile complete reason: Complete status: "True" type: Reconciled kind: List metadata: resourceVersion: ""运行以下命令,验证备份存储位置(BSL)是否可用:
$ oc get backupstoragelocations.velero.io -n openshift-adp输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s true配置备份 CR,如下例所示:
apiVersion: velero.io/v1 kind: Backup metadata: name: test-backup namespace: openshift-adp spec: includedNamespaces: - <application_namespace>其中:
<application_namespace>- 指定要备份的应用程序的命名空间。
运行以下命令来创建备份 CR:
$ oc apply -f <backup_cr_filename>
验证
运行以下命令,验证备份对象是否处于
Completed阶段。如需了解更多详细信息,请参阅示例输出。$ oc describe backup test-backup -n openshift-adp输出示例
Name: test-backup Namespace: openshift-adp # ....# Status: Backup Item Operations Attempted: 1 Backup Item Operations Completed: 1 Completion Timestamp: 2024-09-25T10:17:01Z Expiration: 2024-10-25T10:16:31Z Format Version: 1.1.0 Hook Status: Phase: Completed Progress: Items Backed Up: 34 Total Items: 34 Start Timestamp: 2024-09-25T10:16:31Z Version: 1 Events: <none>
4.5.2. OpenShift API for Data Protection (OADP) 恢复用例 复制链接链接已复制到粘贴板!
以下是使用 OADP 的用例将备份恢复到不同的命名空间。
4.5.2.1. 使用 OADP 将应用程序恢复到不同的命名空间 复制链接链接已复制到粘贴板!
使用 OADP 将应用程序的备份恢复到新目标命名空间 test-restore-application。要恢复备份,请创建一个恢复自定义资源 (CR),如下例所示。在恢复 CR 中,源命名空间指的是您在备份中包含的应用程序命名空间。然后,您可以通过将项目更改为新的恢复的命名空间并验证资源来验证恢复。
先决条件
- 已安装 OADP Operator。
- 您已备份要恢复的应用程序。
流程
创建一个恢复 CR,如下例所示:
apiVersion: velero.io/v1 kind: Restore metadata: name: test-restore namespace: openshift-adp spec: backupName: <backup_name> restorePVs: true namespaceMapping: <application_namespace>: test-restore-application其中:
test-restore- 指定恢复 CR 的名称。
<backup_name>- 指定备份的名称。
<application_namespace>-
指定要恢复到的目标命名空间。
namespaceMapping将源应用程序命名空间映射到目标应用程序命名空间。test-restore-application是您要恢复备份的目标命名空间的名称。
运行以下命令来应用恢复 CR:
$ oc apply -f <restore_cr_filename>
验证
运行以下命令验证恢复是否处于
Completed阶段:$ oc describe restores.velero.io <restore_name> -n openshift-adp运行以下命令,进入恢复的命名空间
test-restore-application:$ oc project test-restore-application运行以下命令,验证恢复的资源,如持久性卷声明(pvc)、服务(svc)、部署、secret 和配置映射:
$ oc get pvc,svc,deployment,secret,configmap输出示例
NAME STATUS VOLUME persistentvolumeclaim/mysql Bound pvc-9b3583db-...-14b86 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/mysql ClusterIP 172....157 <none> 3306/TCP 2m56s service/todolist ClusterIP 172.....15 <none> 8000/TCP 2m56s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/mysql 0/1 1 0 2m55s NAME TYPE DATA AGE secret/builder-dockercfg-6bfmd kubernetes.io/dockercfg 1 2m57s secret/default-dockercfg-hz9kz kubernetes.io/dockercfg 1 2m57s secret/deployer-dockercfg-86cvd kubernetes.io/dockercfg 1 2m57s secret/mysql-persistent-sa-dockercfg-rgp9b kubernetes.io/dockercfg 1 2m57s NAME DATA AGE configmap/kube-root-ca.crt 1 2m57s configmap/openshift-service-ca.crt 1 2m57s
4.5.3. 在备份过程中包括自签名 CA 证书 复制链接链接已复制到粘贴板!
您可以在数据保护应用程序(DPA)中包括自签名证书颁发机构(CA)证书,然后备份应用程序。您可以将备份存储在 Red Hat OpenShift Data Foundation (ODF) 提供的 NooBaa 存储桶中。
4.5.3.1. 备份应用程序及其自签名 CA 证书 复制链接链接已复制到粘贴板!
ODF 提供的 s3.openshift-storage.svc 服务使用使用自签名服务 CA 签名的传输层安全协议 (TLS) 证书。
要防止 由未知颁发机构签名的证书,您必须在 DataProtectionApplication 自定义资源(CR)的备份存储位置(BSL)部分包含自签名 CA 证书。在这种情况下,您必须完成以下任务:
- 通过创建对象存储桶声明(OBC)来请求 NooBaa 存储桶。
- 提取存储桶详情。
-
在
DataProtectionApplicationCR 中包含自签名 CA 证书。 - 备份应用程序。
先决条件
- 已安装 OADP Operator。
- 已安装 ODF Operator。
- 您有一个应用程序,其数据库在单独的命名空间中运行。
流程
创建 OBC 清单以请求 NooBaa 存储桶,如下例所示:
apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: test-obc namespace: openshift-adp spec: storageClassName: openshift-storage.noobaa.io generateBucketName: test-backup-bucket其中:
test-obc- 指定对象存储桶声明的名称。
test-backup-bucket- 指定存储桶的名称。
运行以下命令来创建 OBC:
$ oc create -f <obc_file_name>当您创建 OBC 时,ODF 会创建一个
secret和一个配置映射,其名称与对象存储桶声明相同。secret对象包含存储桶凭证,ConfigMap对象包含用于访问存储桶的信息。要从生成的配置映射中获取存储桶名称和存储桶主机,请运行以下命令:$ oc extract --to=- cm/test-obctest-obc是 OBC 的名称。输出示例
# BUCKET_NAME backup-c20...41fd # BUCKET_PORT 443 # BUCKET_REGION # BUCKET_SUBREGION # BUCKET_HOST s3.openshift-storage.svc要从
secret对象获取存储桶凭证,请运行以下命令:$ oc extract --to=- secret/test-obc输出示例
# AWS_ACCESS_KEY_ID ebYR....xLNMc # AWS_SECRET_ACCESS_KEY YXf...+NaCkdyC3QPym使用以下示例配置创建带有对象存储桶凭证的
cloud-credentials文件:[default] aws_access_key_id=<AWS_ACCESS_KEY_ID> aws_secret_access_key=<AWS_SECRET_ACCESS_KEY>运行以下命令,创建带有
cloud-credentials文件内容的cloud-credentialssecret:$ oc create secret generic \ cloud-credentials \ -n openshift-adp \ --from-file cloud=cloud-credentials运行以下命令,从
openshift-service-ca.crt配置映射中提取服务 CA 证书。确保您以Base64格式编码证书,并记录下一步中使用的值。$ oc get cm/openshift-service-ca.crt \ -o jsonpath='{.data.service-ca\.crt}' | base64 -w0; echo输出示例
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0... ....gpwOHMwaG9CRmk5a3....FLS0tLS0K使用存储桶名称和 CA 证书配置
DataProtectionApplicationCR 清单文件,如下例所示:apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: oadp-backup namespace: openshift-adp spec: configuration: nodeAgent: enable: true uploaderType: kopia velero: defaultPlugins: - aws - openshift - csi defaultSnapshotMoveData: true backupLocations: - velero: config: profile: "default" region: noobaa s3Url: https://s3.openshift-storage.svc s3ForcePathStyle: "true" insecureSkipTLSVerify: "false" provider: aws default: true credential: key: cloud name: cloud-credentials objectStorage: bucket: <bucket_name> prefix: oadp caCert: <ca_cert>其中:
insecureSkipTLSVerify-
指定是否启用了 SSL/TLS 安全性。如果设置为
true,则禁用 SSL/TLS 安全性。如果设置为false,则启用 SSL/TLS 安全。 <bucket_name>- 指定上一步中提取的存储桶的名称。
<ca_cert>-
指定上一步中的
Base64编码证书。
运行以下命令来创建
DataProtectionApplicationCR:$ oc apply -f <dpa_filename>运行以下命令验证
DataProtectionApplicationCR 是否已成功创建:$ oc get dpa -o yaml输出示例
apiVersion: v1 items: - apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: namespace: openshift-adp #...# spec: backupLocations: - velero: config: #...# status: conditions: - lastTransitionTime: "20....9:54:02Z" message: Reconcile complete reason: Complete status: "True" type: Reconciled kind: List metadata: resourceVersion: ""运行以下命令,验证备份存储位置(BSL)是否可用:
$ oc get backupstoragelocations.velero.io -n openshift-adp输出示例
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s true使用以下示例配置
BackupCR:apiVersion: velero.io/v1 kind: Backup metadata: name: test-backup namespace: openshift-adp spec: includedNamespaces: - <application_namespace>其中:
<application_namespace>- 指定要备份的应用程序的命名空间。
运行以下命令来创建
BackupCR:$ oc apply -f <backup_cr_filename>
验证
运行以下命令,验证
Backup对象是否处于Completed阶段:$ oc describe backup test-backup -n openshift-adp输出示例
Name: test-backup Namespace: openshift-adp # ....# Status: Backup Item Operations Attempted: 1 Backup Item Operations Completed: 1 Completion Timestamp: 2024-09-25T10:17:01Z Expiration: 2024-10-25T10:16:31Z Format Version: 1.1.0 Hook Status: Phase: Completed Progress: Items Backed Up: 34 Total Items: 34 Start Timestamp: 2024-09-25T10:16:31Z Version: 1 Events: <none>
4.5.4. 使用 legacy-aws Velero 插件 复制链接链接已复制到粘贴板!
如果您使用一个 AWS S3 兼容备份存储位置,在备份应用程序时可能会出现 SignatureDoesNotMatch 错误。发生此错误的原因是,一些备份存储位置仍然使用旧版本的 S3 API,这与 Go V2 的较新的 AWS SDK 不兼容。要解决这个问题,您可以在 DataProtectionApplication 自定义资源(CR)中使用 legacy-aws Velero 插件。legacy-aws Velero 插件使用旧的 AWS SDK 用于 Go V1,它与旧的 S3 API 兼容,确保备份成功。
在以下用例中,您可以使用 legacy-aws Velero 插件配置 DataProtectionApplication CR,然后备份应用程序。
根据您选择的备份存储位置,您可以在 DataProtectionApplication CR 中使用 legacy-aws 或 aws 插件。如果您在 DataProtectionApplication CR 中同时使用了这两个插件,则会出现以下错误:aws and legacy-aws can not be both specified in DPA spec.configuration.velero.defaultPlugins。
先决条件
- 已安装 OADP Operator。
- 您已将一个 AWS S3 兼容对象存储配置为备份位置。
- 您有一个应用程序,其数据库在单独的命名空间中运行。
流程
将
DataProtectionApplicationCR 配置为使用legacy-awsVelero 插件,如下例所示:apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: oadp-backup namespace: openshift-adp spec: configuration: nodeAgent: enable: true uploaderType: kopia velero: defaultPlugins: - legacy-aws - openshift - csi defaultSnapshotMoveData: true backupLocations: - velero: config: profile: "default" region: noobaa s3Url: https://s3.openshift-storage.svc s3ForcePathStyle: "true" insecureSkipTLSVerify: "true" provider: aws default: true credential: key: cloud name: cloud-credentials objectStorage: bucket: <bucket_name> prefix: oadp其中:
legacy-aws-
指定使用
legacy-aws插件。 <bucket_name>- 指定存储桶名称。
运行以下命令来创建
DataProtectionApplicationCR:$ oc apply -f <dpa_filename>运行以下命令,验证
DataProtectionApplicationCR 是否已成功创建。在示例输出中,您可以看到status对象将type字段设置为Reconciled,status字段设置为"True"。该状态表示DataProtectionApplicationCR 已被成功创建。$ oc get dpa -o yaml输出示例
apiVersion: v1 items: - apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: namespace: openshift-adp #...# spec: backupLocations: - velero: config: #...# status: conditions: - lastTransitionTime: "20....9:54:02Z" message: Reconcile complete reason: Complete status: "True" type: Reconciled kind: List metadata: resourceVersion: ""运行以下命令,验证备份存储位置(BSL)是否可用:
$ oc get backupstoragelocations.velero.io -n openshift-adp您应该看到类似以下示例的输出:
NAME PHASE LAST VALIDATED AGE DEFAULT dpa-sample-1 Available 3s 15s true配置
BackupCR,如下例所示:apiVersion: velero.io/v1 kind: Backup metadata: name: test-backup namespace: openshift-adp spec: includedNamespaces: - <application_namespace>其中:
<application_namespace>- 指定要备份的应用程序的命名空间。
运行以下命令来创建
BackupCR:$ oc apply -f <backup_cr_filename>
验证
运行以下命令,验证备份对象是否处于
Completed阶段。如需了解更多详细信息,请参阅示例输出。$ oc describe backups.velero.io test-backup -n openshift-adp输出示例
Name: test-backup Namespace: openshift-adp # ....# Status: Backup Item Operations Attempted: 1 Backup Item Operations Completed: 1 Completion Timestamp: 2024-09-25T10:17:01Z Expiration: 2024-10-25T10:16:31Z Format Version: 1.1.0 Hook Status: Phase: Completed Progress: Items Backed Up: 34 Total Items: 34 Start Timestamp: 2024-09-25T10:16:31Z Version: 1 Events: <none>
4.5.5. 使用 ROSA STS 在 OADP 上备份工作负载 复制链接链接已复制到粘贴板!
4.5.5.1. 使用 OADP 和 ROSA STS 执行备份 复制链接链接已复制到粘贴板!
以下示例 hello-world 应用没有附加持久性卷 (PV)。使用 OpenShift API for Data Protection (OADP) with Red Hat OpenShift Service on AWS (ROSA) STS 执行备份。
数据保护应用程序 (DPA) 配置都将正常工作。
流程
运行以下命令,创建一个工作负载来备份:
$ oc create namespace hello-world$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift运行以下命令来公开路由:
$ oc expose service/hello-openshift -n hello-world运行以下命令检查应用程序是否正常工作:
$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`您应该看到类似以下示例的输出:
Hello OpenShift!运行以下命令来备份工作负载:
$ cat << EOF | oc create -f - apiVersion: velero.io/v1 kind: Backup metadata: name: hello-world namespace: openshift-adp spec: includedNamespaces: - hello-world storageLocation: ${CLUSTER_NAME}-dpa-1 ttl: 720h0m0s EOF等待备份完成,然后运行以下命令:
$ watch "oc -n openshift-adp get backup hello-world -o json | jq .status"您应该看到类似以下示例的输出:
{ "completionTimestamp": "2022-09-07T22:20:44Z", "expiration": "2022-10-07T22:20:22Z", "formatVersion": "1.1.0", "phase": "Completed", "progress": { "itemsBackedUp": 58, "totalItems": 58 }, "startTimestamp": "2022-09-07T22:20:22Z", "version": 1 }运行以下命令来删除 demo 工作负载:
$ oc delete ns hello-world运行以下命令,从备份中恢复工作负载:
$ cat << EOF | oc create -f - apiVersion: velero.io/v1 kind: Restore metadata: name: hello-world namespace: openshift-adp spec: backupName: hello-world EOF运行以下命令等待 Restore 完成:
$ watch "oc -n openshift-adp get restore hello-world -o json | jq .status"您应该看到类似以下示例的输出:
{ "completionTimestamp": "2022-09-07T22:25:47Z", "phase": "Completed", "progress": { "itemsRestored": 38, "totalItems": 38 }, "startTimestamp": "2022-09-07T22:25:28Z", "warnings": 9 }运行以下命令检查工作负载是否已恢复:
$ oc -n hello-world get pods您应该看到类似以下示例的输出:
NAME READY STATUS RESTARTS AGE hello-openshift-9f885f7c6-kdjpj 1/1 Running 0 90s运行以下命令来检查 JSONPath:
$ curl `oc get route/hello-openshift -n hello-world -o jsonpath='{.spec.host}'`您应该看到类似以下示例的输出:
Hello OpenShift!
有关故障排除提示,请参阅故障排除文档。
4.5.5.2. 使用 OADP 和 ROSA STS 的备份后清理集群 复制链接链接已复制到粘贴板!
如果您需要卸载 OpenShift API for Data Protection (OADP) Operator 以及本例中的备份和 S3 存储桶,请按照以下步骤操作。
流程
运行以下命令来删除工作负载:
$ oc delete ns hello-world运行以下命令来删除数据保护应用程序 (DPA):
$ oc -n openshift-adp delete dpa ${CLUSTER_NAME}-dpa运行以下命令来删除云存储:
$ oc -n openshift-adp delete cloudstorage ${CLUSTER_NAME}-oadp警告如果这个命令挂起,您可能需要通过运行以下命令来删除终结器:
$ oc -n openshift-adp patch cloudstorage ${CLUSTER_NAME}-oadp -p '{"metadata":{"finalizers":null}}' --type=merge如果不再需要 Operator,请运行以下命令删除它:
$ oc -n openshift-adp delete subscription oadp-operator从 Operator 中删除命名空间:
$ oc delete ns openshift-adp如果不再需要备份和恢复资源,请运行以下命令从集群中删除它们:
$ oc delete backups.velero.io hello-world要删除 AWS S3 中的备份、恢复和远程对象,请运行以下命令:
$ velero backup delete hello-world如果您不再需要自定义资源定义 (CRD),请运行以下命令从集群中删除它们:
$ for CRD in `oc get crds | grep velero | awk '{print $1}'`; do oc delete crd $CRD; done运行以下命令来删除 AWS S3 存储桶:
$ aws s3 rm s3://${CLUSTER_NAME}-oadp --recursive$ aws s3api delete-bucket --bucket ${CLUSTER_NAME}-oadp运行以下命令,将策略从角色分离:
$ aws iam detach-role-policy --role-name "${ROLE_NAME}" --policy-arn "${POLICY_ARN}"运行以下命令来删除角色:
$ aws iam delete-role --role-name "${ROLE_NAME}"