4.12. OADP Data Mover
4.12.1. 关于 OADP Data Mover
OADP 包含一个内置 Data Mover,可用于将 Container Storage Interface (CSI)卷快照移到远程对象存储。如果发生故障、意外删除或损坏,内置的 Data Mover 可让您从远程对象存储中恢复有状态的应用程序。它使用 Kopia 作为上传程序机制来读取快照数据并写入统一存储库。
OADP 支持以下 CSI 快照:
- Red Hat OpenShift Data Foundation
- 使用支持 Kubernetes 卷快照 API 的 Container Storage Interface(CSI)驱动程序的任何其他云存储供应商
OADP 内置 Data Mover(在 OADP 1.3 中作为技术预览引进)现在完全支持容器化和虚拟机工作负载。
4.12.1.1. 启用内置 Data Mover
要启用内置 Data Mover,您必须在 DataProtectionApplication
自定义资源 (CR) 中包含 CSI 插件并启用节点代理。节点代理是一个 Kubernetes daemonset,用于托管数据移动模块。这包括 Data Mover 控制器、上传程序和存储库。
DataProtectionApplication
清单示例
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: dpa-sample spec: configuration: nodeAgent: enable: true 1 uploaderType: kopia 2 velero: defaultPlugins: - openshift - aws - csi 3 defaultSnapshotMoveData: true defaultVolumesToFSBackup: 4 featureFlags: - EnableCSI # ...
4.12.1.2. 内置数据管理控制器和自定义资源定义 (CRD)
内置的 Data Mover 功能引入了三个新的 API 对象,被定义为 CRD,用于管理备份和恢复:
-
DataDownload
: 代表卷快照的数据下载。CSI 插件为每个要恢复的卷创建一个DataDownload
对象。DataDownload
CR 包含有关目标卷的信息、指定的 Data Mover、当前数据下载的进度、指定的备份存储库以及进程完成后当前数据下载的结果。 -
DataUpload
:代表卷快照的数据上传。CSI 插件为每个 CSI 快照创建一个DataUpload
对象。DataUpload
CR 包含有关指定快照的信息、指定的 Data Mover、指定的备份存储库、当前数据上传的进度,以及进程完成后当前数据上传的结果。 -
BackupRepository
: 代表和管理备份存储库的生命周期。当请求第一个 CSI 快照备份或恢复命名空间时,OADP 会为每个命名空间创建一个备份存储库。
4.12.1.3. 关于增量备份支持
OADP 支持对容器化和 OpenShift Virtualization 工作负载进行块
和文件系统
持久性卷的增量备份。下表总结了对文件系统备份 (FSB)、Container Storage Interface (CSI) 和 CSI Data Mover 的支持:
卷模式 | FSB - Restic | FSB - Kopia | CSI | CSI Data Mover |
---|---|---|---|---|
Filesystem | S [1], I [2] | S [1], I [2] | S [1] | S [1], I [2] |
Block | N [3] | N [3] | S [1] | S [1], I [2] |
卷模式 | FSB - Restic | FSB - Kopia | CSI | CSI Data Mover |
---|---|---|---|---|
Filesystem | N [3] | N [3] | S [1] | S [1], I [2] |
Block | N [3] | N [3] | S [1] | S [1], I [2] |
- 支持的备份
- 支持的增量备份
- 不支持
CSI Data Mover 备份使用 Kopia,无论 uploaderType
是什么。
4.12.2. 备份和恢复 CSI 快照数据移动
您可以使用 OADP 1.3 Data Mover 备份和恢复持久性卷。
4.12.2.1. 使用 CSI 快照备份持久性卷
您可以使用 OADP Data Mover 将 Container Storage Interface (CSI) 卷快照备份到远程对象存储。
先决条件
-
您可以使用
cluster-admin
角色访问集群。 - 已安装 OADP Operator。
-
您已在
DataProtectionApplication
自定义资源(CR) 中包含了 CSI 插件并启用了节点代理。 - 您有一个应用程序,其持久性卷在单独的命名空间中运行。
-
您已将
metadata.labels.velero.io/csi-volumesnapshot-class: "true"
键值对添加到VolumeSnapshotClass
CR。
流程
为
Backup
对象创建一个 YAML 文件,如下例所示:Backup
CR 示例kind: Backup apiVersion: velero.io/v1 metadata: name: backup namespace: openshift-adp spec: csiSnapshotTimeout: 10m0s defaultVolumesToFsBackup: 1 includedNamespaces: - mysql-persistent itemOperationTimeout: 4h0m0s snapshotMoveData: true 2 storageLocation: default ttl: 720h0m0s 3 volumeSnapshotLocations: - dpa-sample-1 # ...
注意如果您使用 XFS 文件系统格式化卷,且卷的使用量已为 100%,则备份会失败,并显示
no space left on device
错误。例如:Error: relabel failed /var/lib/kubelet/pods/3ac..34/volumes/ \ kubernetes.io~csi/pvc-684..12c/mount: lsetxattr /var/lib/kubelet/ \ pods/3ac..34/volumes/kubernetes.io~csi/pvc-68..2c/mount/data-xfs-103: \ no space left on device
在这种情况下,请考虑调整卷大小或使用不同的文件系统类型(例如
ext4
),以便备份可以成功完成。应用清单:
$ oc create -f backup.yaml
在快照创建完成后会创建一个
DataUpload
CR。
验证
通过监控
DataUpload
CR 的status.phase
字段来验证快照数据是否已成功传送到远程对象存储。可能的值为In Progress
、Completed
、Failed
或Canceled
。对象存储在DataProtectionApplication
CR 的backupLocations
小节中配置。运行以下命令获取所有
DataUpload
对象的列表:$ oc get datauploads -A
输出示例
NAMESPACE NAME STATUS STARTED BYTES DONE TOTAL BYTES STORAGE LOCATION AGE NODE openshift-adp backup-test-1-sw76b Completed 9m47s 108104082 108104082 dpa-sample-1 9m47s ip-10-0-150-57.us-west-2.compute.internal openshift-adp mongo-block-7dtpf Completed 14m 1073741824 1073741824 dpa-sample-1 14m ip-10-0-150-57.us-west-2.compute.internal
运行以下命令,检查特定
DataUpload
对象的status.phase
字段的值:$ oc get datauploads <dataupload_name> -o yaml
输出示例
apiVersion: velero.io/v2alpha1 kind: DataUpload metadata: name: backup-test-1-sw76b namespace: openshift-adp spec: backupStorageLocation: dpa-sample-1 csiSnapshot: snapshotClass: "" storageClass: gp3-csi volumeSnapshot: velero-mysql-fq8sl operationTimeout: 10m0s snapshotType: CSI sourceNamespace: mysql-persistent sourcePVC: mysql status: completionTimestamp: "2023-11-02T16:57:02Z" node: ip-10-0-150-57.us-west-2.compute.internal path: /host_pods/15116bac-cc01-4d9b-8ee7-609c3bef6bde/volumes/kubernetes.io~csi/pvc-eead8167-556b-461a-b3ec-441749e291c4/mount phase: Completed 1 progress: bytesDone: 108104082 totalBytes: 108104082 snapshotID: 8da1c5febf25225f4577ada2aeb9f899 startTimestamp: "2023-11-02T16:56:22Z"
- 1
- 代表快照数据成功传输到远程对象存储。
4.12.2.2. 恢复 CSI 卷快照
您可以通过创建一个 Restore
CR 来恢复卷快照。
您不能使用 OAPD 1.3 内置数据 Mover 从 OADP 1.2 恢复 Volsync 备份。在升级到 OADP 1.3 之前,建议使用 Restic 对所有工作负载进行文件系统备份。
先决条件
-
您可以使用
cluster-admin
角色访问集群。 -
您有一个 OADP
Backup
CR,可从中恢复数据。
流程
为
Restore
CR 创建 YAML 文件,如下例所示:Restore
CR 示例apiVersion: velero.io/v1 kind: Restore metadata: name: restore namespace: openshift-adp spec: backupName: <backup> # ...
应用清单:
$ oc create -f restore.yaml
恢复启动时会创建一个
DataDownload
CR。
验证
您可以通过检查
DataDownload
CR 的status.phase
字段来监控恢复过程的状态。可能的值为In Progress
、Completed
、Failed
或Canceled
。要获取所有
DataDownload
对象的列表,请运行以下命令:$ oc get datadownloads -A
输出示例
NAMESPACE NAME STATUS STARTED BYTES DONE TOTAL BYTES STORAGE LOCATION AGE NODE openshift-adp restore-test-1-sk7lg Completed 7m11s 108104082 108104082 dpa-sample-1 7m11s ip-10-0-150-57.us-west-2.compute.internal
输入以下命令检查特定
DataDownload
对象的status.phase
字段的值:$ oc get datadownloads <datadownload_name> -o yaml
输出示例
apiVersion: velero.io/v2alpha1 kind: DataDownload metadata: name: restore-test-1-sk7lg namespace: openshift-adp spec: backupStorageLocation: dpa-sample-1 operationTimeout: 10m0s snapshotID: 8da1c5febf25225f4577ada2aeb9f899 sourceNamespace: mysql-persistent targetVolume: namespace: mysql-persistent pv: "" pvc: mysql status: completionTimestamp: "2023-11-02T17:01:24Z" node: ip-10-0-150-57.us-west-2.compute.internal phase: Completed 1 progress: bytesDone: 108104082 totalBytes: 108104082 startTimestamp: "2023-11-02T17:00:52Z"
- 1
- 表示 CSI 快照数据已被成功恢复。
4.12.2.3. 删除 OADP 1.3 的策略
删除策略决定了从系统中删除数据的规则,指定根据保留周期、数据敏感度和合规要求等因素如何进行删除。它有效地管理数据删除,同时满足法规并保留宝贵的信息。
4.12.2.3.1. 删除 OADP 1.3 的策略指南
查看 OADP 1.3 的以下删除策略指南:
-
在 OADP 1.3.x 中,当使用任何类型的备份和恢复方法时,您可以在
VolumeSnapshotClass
自定义资源(CR)中将deletionPolicy
字段设置为Retain
或Delete
。
4.12.3. 覆盖 Kopia 哈希、加密和分割算法
您可以使用 Data Protection Application (DPA) 中的特定环境变量覆盖 Kopia 哈希、加密和分割程序算法的默认值。
4.12.3.1. 配置 DPA 以覆盖 Kopia 哈希、加密和分割算法
您可以使用 OpenShift API for Data Protection (OADP) 选项来覆盖哈希、加密和分割器的默认 Kopia 算法以提高 Kopia 性能或比较性能指标。您可以在 DPA 的 spec.configuration.velero.podConfig.env
部分中设置以下环境变量:
-
KOPIA_HASHING_ALGORITHM
-
KOPIA_ENCRYPTION_ALGORITHM
-
KOPIA_SPLITTER_ALGORITHM
先决条件
- 已安装 OADP Operator。
- 已使用云供应商提供的凭证创建 secret。
流程
使用适用于哈希、加密和分割器的环境变量配置 DPA,如下例所示。
DPA 示例
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication #... configuration: nodeAgent: enable: true 1 uploaderType: kopia 2 velero: defaultPlugins: - openshift - aws - csi 3 defaultSnapshotMoveData: true podConfig: env: - name: KOPIA_HASHING_ALGORITHM value: <hashing_algorithm_name> 4 - name: KOPIA_ENCRYPTION_ALGORITHM value: <encryption_algorithm_name> 5 - name: KOPIA_SPLITTER_ALGORITHM value: <splitter_algorithm_name> 6
4.12.3.2. 覆盖 Kopia 哈希、加密和分割算法的用例
用例示例演示了使用 Kopia 环境变量控制哈希、加密和分割器以进行应用程序的备份。您可以将备份存储在 AWS S3 存储桶中。然后,您可以通过连接到 Kopia 存储库来验证环境变量。
先决条件
- 已安装 OADP Operator。
- 您有一个 AWS S3 存储桶,配置为备份存储位置。
- 已使用云供应商提供的凭证创建 secret。
- 已安装 Kopia 客户端。
- 您有一个应用程序,其持久性卷在单独的命名空间中运行。
流程
配置 Data Protection Application (DPA),如下例所示:
apiVersion: oadp.openshift.io/v1alpha1 kind: DataProtectionApplication metadata: name: <dpa_name> 1 namespace: openshift-adp spec: backupLocations: - name: aws velero: config: profile: default region: <region_name> 2 credential: key: cloud name: cloud-credentials 3 default: true objectStorage: bucket: <bucket_name> 4 prefix: velero provider: aws configuration: nodeAgent: enable: true uploaderType: kopia velero: defaultPlugins: - openshift - aws - csi 5 defaultSnapshotMoveData: true podConfig: env: - name: KOPIA_HASHING_ALGORITHM value: BLAKE3-256 6 - name: KOPIA_ENCRYPTION_ALGORITHM value: CHACHA20-POLY1305-HMAC-SHA256 7 - name: KOPIA_SPLITTER_ALGORITHM value: DYNAMIC-8M-RABINKARP 8
运行以下命令来创建 DPA:
$ oc create -f <dpa_file_name> 1
- 1
- 指定您配置的 DPA 的文件名。
运行以下命令验证 DPA 是否已协调:
$ oc get dpa -o yaml
创建备份 CR,如下例所示:
备份 CR 示例
apiVersion: velero.io/v1 kind: Backup metadata: name: test-backup namespace: openshift-adp spec: includedNamespaces: - <application_namespace> 1 defaultVolumesToFsBackup: true
- 1
- 指定集群中安装的应用程序的命名空间。
运行以下命令来创建备份:
$ oc apply -f <backup_file_name> 1
- 1
- 指定备份 CR 文件的名称。
运行以下命令验证备份是否已完成:
$ oc get backups.velero.io <backup_name> -o yaml 1
- 1
- 指定备份的名称。
验证
运行以下命令连接到 Kopia 存储库:
$ kopia repository connect s3 \ --bucket=<bucket_name> \ 1 --prefix=velero/kopia/<application_namespace> \ 2 --password=static-passw0rd \ 3 --access-key="<aws_s3_access_key>" \ 4 --secret-access-key="<aws_s3_secret_access_key>" \ 5
注意如果您使用 AWS S3 以外的存储供应商,则需要在命令中添加
--endpoint
(存储桶端点 URL 参数)。运行以下命令,验证 Kopia 使用 DPA 中配置的环境变量进行备份:
$ kopia repository status
输出示例
Config file: /../.config/kopia/repository.config Description: Repository in S3: s3.amazonaws.com <bucket_name> # ... Storage type: s3 Storage capacity: unbounded Storage config: { "bucket": <bucket_name>, "prefix": "velero/kopia/<application_namespace>/", "endpoint": "s3.amazonaws.com", "accessKeyID": <access_key>, "secretAccessKey": "****************************************", "sessionToken": "" } Unique ID: 58....aeb0 Hash: BLAKE3-256 Encryption: CHACHA20-POLY1305-HMAC-SHA256 Splitter: DYNAMIC-8M-RABINKARP Format version: 3 # ...
4.12.3.3. 基准测试 Kopia 哈希、加密和拆分算法
您可以运行 Kopia 命令以对哈希、加密和拆分算法进行基准测试。根据基准测试结果,您可以为工作负载选择最合适的算法。在此过程中,您将从集群中的 pod 运行 Kopia 基准测试命令。基准测试结果可能会因 CPU 速度、可用 RAM、磁盘速度、当前 I/O 负载等因素而异。
先决条件
- 已安装 OADP Operator。
- 您有一个应用程序,其持久性卷在单独的命名空间中运行。
- 已使用 Container Storage Interface (CSI) 快照运行应用程序的备份。
流程
如以下示例所示,配置 pod。确保为 OADP 版本 1.3 及之后的版本使用
oadp-mustgather
镜像。pod 配置示例
apiVersion: v1 kind: Pod metadata: name: oadp-mustgather-pod labels: purpose: user-interaction spec: containers: - name: oadp-mustgather-container image: registry.redhat.io/oadp/oadp-mustgather-rhel9:v1.3 command: ["sleep"] args: ["infinity"]
注意Kopia 客户端包括在
oadp-mustgather
镜像中。运行以下命令来创建 pod:
$ oc apply -f <pod_config_file_name> 1
- 1
- 指定 pod 配置的 YAML 文件的名称。
验证 Pod 上的安全性上下文约束 (SCC) 是否为
anyuid
,以便 Kopia 能够连接到存储库。$ oc describe pod/oadp-mustgather-pod | grep scc
输出示例
openshift.io/scc: anyuid
运行以下命令,通过 SSH 连接到 pod:
$ oc -n openshift-adp rsh pod/oadp-mustgather-pod
运行以下命令连接到 Kopia 存储库:
sh-5.1# kopia repository connect s3 \ --bucket=<bucket_name> \ 1 --prefix=velero/kopia/<application_namespace> \ 2 --password=static-passw0rd \ 3 --access-key="<access_key>" \ 4 --secret-access-key="<secret_access_key>" \ 5 --endpoint=<bucket_endpoint> \ 6
注意这是一个示例命令。命令可能会根据对象存储提供程序而有所不同。
要对哈希算法进行基准测试,请运行以下命令:
sh-5.1# kopia benchmark hashing
输出示例
Benchmarking hash 'BLAKE2B-256' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'BLAKE2B-256-128' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'BLAKE2S-128' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'BLAKE2S-256' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'BLAKE3-256' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'BLAKE3-256-128' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'HMAC-SHA224' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'HMAC-SHA256' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'HMAC-SHA256-128' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'HMAC-SHA3-224' (100 x 1048576 bytes, parallelism 1) Benchmarking hash 'HMAC-SHA3-256' (100 x 1048576 bytes, parallelism 1) Hash Throughput ----------------------------------------------------------------- 0. BLAKE3-256 15.3 GB / second 1. BLAKE3-256-128 15.2 GB / second 2. HMAC-SHA256-128 6.4 GB / second 3. HMAC-SHA256 6.4 GB / second 4. HMAC-SHA224 6.4 GB / second 5. BLAKE2B-256-128 4.2 GB / second 6. BLAKE2B-256 4.1 GB / second 7. BLAKE2S-256 2.9 GB / second 8. BLAKE2S-128 2.9 GB / second 9. HMAC-SHA3-224 1.6 GB / second 10. HMAC-SHA3-256 1.5 GB / second ----------------------------------------------------------------- Fastest option for this machine is: --block-hash=BLAKE3-256
要对加密算法进行基准测试,请运行以下命令:
sh-5.1# kopia benchmark encryption
输出示例
Benchmarking encryption 'AES256-GCM-HMAC-SHA256'... (1000 x 1048576 bytes, parallelism 1) Benchmarking encryption 'CHACHA20-POLY1305-HMAC-SHA256'... (1000 x 1048576 bytes, parallelism 1) Encryption Throughput ----------------------------------------------------------------- 0. AES256-GCM-HMAC-SHA256 2.2 GB / second 1. CHACHA20-POLY1305-HMAC-SHA256 1.8 GB / second ----------------------------------------------------------------- Fastest option for this machine is: --encryption=AES256-GCM-HMAC-SHA256
要对 splitter 算法进行基准测试,请运行以下命令:
sh-5.1# kopia benchmark splitter
输出示例
splitting 16 blocks of 32MiB each, parallelism 1 DYNAMIC 747.6 MB/s count:107 min:9467 10th:2277562 25th:2971794 50th:4747177 75th:7603998 90th:8388608 max:8388608 DYNAMIC-128K-BUZHASH 718.5 MB/s count:3183 min:3076 10th:80896 25th:104312 50th:157621 75th:249115 90th:262144 max:262144 DYNAMIC-128K-RABINKARP 164.4 MB/s count:3160 min:9667 10th:80098 25th:106626 50th:162269 75th:250655 90th:262144 max:262144 # ... FIXED-512K 102.9 TB/s count:1024 min:524288 10th:524288 25th:524288 50th:524288 75th:524288 90th:524288 max:524288 FIXED-8M 566.3 TB/s count:64 min:8388608 10th:8388608 25th:8388608 50th:8388608 75th:8388608 90th:8388608 max:8388608 ----------------------------------------------------------------- 0. FIXED-8M 566.3 TB/s count:64 min:8388608 10th:8388608 25th:8388608 50th:8388608 75th:8388608 90th:8388608 max:8388608 1. FIXED-4M 425.8 TB/s count:128 min:4194304 10th:4194304 25th:4194304 50th:4194304 75th:4194304 90th:4194304 max:4194304 # ... 22. DYNAMIC-128K-RABINKARP 164.4 MB/s count:3160 min:9667 10th:80098 25th:106626 50th:162269 75th:250655 90th:262144 max:262144