《OpenShift 4.x HOL教程汇总》
说明:本文已经在OpenShift 4.14环境中验证
文章目录
OpenShift API Data Protection(OADP)
数据保护可能包括按需备份、计划备份和恢复等操作。这些操作允许集群内的对象被备份到本地或公共云上的存储提供商,并在发生故障或计划维护时从备份中恢复该集群。Red Hat 为此提供了 OpenShift API Data Protection,即OADP。OADP 基于 Velero 开源项目,它为 OpenShift 容器的应用提供了一个灾难恢复和数据保护解决方案。
部署测试应用
部署 parkmap 应用
$ oc apply -f https://raw.githubusercontent.com/liuxiaoyu-git/oadp-operator/master/tests/e2e/sample-applications/parks-app/manifest4.14.yaml
部署 MSSQL 应用
$ oc apply -f https://raw.githubusercontent.com/liuxiaoyu-git/oadp-operator/master/tests/e2e/sample-applications/mssql-persistent/mssql-persistent-template4.14.yaml
安装环境
安装 velero 客户端
在 https://github.com/vmware-tanzu/velero/releases 查看当前 velero 最新版本。然后执行以下命令:
$ VERSION=v1.13.1
$ cd ~/ && curl -OL https://github.com/vmware-tanzu/velero/releases/download/${VERSION}/velero-${VERSION}-linux-amd64.tar.gz
$ tar -xvf velero-${VERSION}-linux-amd64.tar.gz
$ PATH=$PATH:~/velero-${VERSION}-linux-amd64
安装 MinIO
- 根据《OpenShift 4 - 部署运行 MinIO 对象存储》在 “my-minio” 项目中安装 MinIO 服务,并创建名为“ocp-backup”的 Bucket。
- 执行命令,在 minio-client 项目中云一个 Pod 作为运行 minio-client 的环境。
$ oc new-project minio-client
$ oc apply -f - << EOF
apiVersion: v1
kind: Pod
metadata:
name: minio-client
namespace: minio-client
spec:
containers:
- name: minio-client
image: busybox
command: [ "/bin/sh", "-c", "while true ; do date; sleep 1; done;" ]
restartPolicy: Never
EOF
- 进入部署好的名为 minio-client 的 Pod。
$ oc get pod
NAME READY STATUS RESTARTS AGE
minio-client 1/1 Running 0 41s
$ oc rsh minio-client
- 在 minio-client 中安装 mc,并确认可以通过 http://minio.my-minio.svc 访问到前面部署的 MinIO 服务。
/ # wget https://dl.min.io/client/mc/release/linux-amd64/mc
/ # chmod +x mc
/ # ./mc alias set my-minio http://minio.my-minio.svc minio minio123
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
Added `my-minio` successfully.
/ # ./mc ls my-minio/
[2022-01-07 13:02:41 UTC] 0B ocp-backup/
安装OADP
- 使用默认配置安装 OADP Operator,Opeartor 会安装到 openshift-adp 项目中。
- 在 openshift-adp 项目中创建名为 “cloud-credentials” 的 Secret,其中 Key为 minio,Value 为以下内容:
[default]
aws_access_key_id=minio
aws_secret_access_key=minio123
或执行以下命令创建 cloud-credentials(需要先将 Secret 的 Value 保存到 “CREDENTIALS_FILE” 中)。
$ oc create secret generic cloud-credentials -n openshift-adp --from-file cloud=<CREDENTIALS_FILE>
- 根据以下 YAML 内容在 openshift-adp 项目中创建 DataProtectionApplication 对象。
apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
name: example-dpa
namespace: openshift-adp
spec:
backupLocations:
- velero:
backupSyncPeriod: 2m0s
config:
profile: default
region: minio
s3ForcePathStyle: 'true'
s3Url: 'http://minio.my-minio.svc/'
credential:
key: minio
name: cloud-credentials
default: true
objectStorage:
bucket: ocp-backup
prefix: velero
provider: aws
configuration:
restic:
enable: true
velero:
defaultPlugins:
- openshift
- aws
featureFlags:
- EnableCSI
snapshotLocations:
- velero:
config:
profile: default
region: minio
provider: aws
- 在 OADP Opeartor 中查看 DataProtectionApplication 对象以及相关的资源,另外 DataProtectionApplication 还会自动创建其他相关对象。还可在 OpenShift 的 “开发者” 视图中查看部署的资源。
- 确认在 velero 中已经有一个 BackupStorageLocation 对象了。根据名称可以知道,它是根据名为 example-dpa 的 DataProtectionApplication 自动创建的。
$ velero get backup-location -n openshift-adp
NAME PROVIDER BUCKET/PREFIX PHASE LAST VALIDATED ACCESS MODE DEFAULT
example-dpa-1 aws ocp-backup/velero Available 2023-10-06 10:55:39 +0000 UTC ReadWrite true
- 确认在 velero 中已经有一个 VolumeSnapshotLocation 对象了。
$ velero get snapshot-location -n openshift-adp
NAME PROVIDER
example-dpa-1 aws
对应用进行备份和恢复
备份应用
- 执行命令,针对 parks-app 项目创建一个 名为 parks-app-backup 的 backup。
$ velero backup create parks-app-backup --include-namespaces parks-app -n openshift-adp
Backup request "parks-app-backup" submitted successfully.
Run `velero backup describe parks-app-backup` or `velero backup logs parks-app-backup` for more details.
- 查看 Velero 的 Backup 对象,直到 STATUS 为 Completed。
$ velero get backup -n openshift-adp
NAME STATUS ERRORS WARNINGS CREATED EXPIRES STORAGE LOCATION SELECTOR
parks-app-backup Completed 0 0 2023-10-06 11:19:28 +0000 UTC 29d example-dpa-1 <none>
- 在名为 minio-client 的 Pod 中查看 “my-minio/ocp-backup/velero/backups/parks-app-backup” 已有了备份数据。
$ oc project minio-client && oc exec minio-client -- /root/mc ls my-minio/ocp-backup/velero/backups/parks-app-backup
[2023-10-06 11:19:38 UTC] 29B STANDARD parks-app-backup-csi-volumesnapshotclasses.json.gz
[2023-10-06 11:19:38 UTC] 27B STANDARD parks-app-backup-csi-volumesnapshotcontents.json.gz
[2023-10-06 11:19:38 UTC] 27B STANDARD parks-app-backup-csi-volumesnapshots.json.gz
[2023-10-06 11:19:38 UTC] 27B STANDARD parks-app-backup-itemoperations.json.gz
[2023-10-06 11:19:38 UTC] 11KiB STANDARD parks-app-backup-logs.gz
[2023-10-06 11:19:38 UTC] 29B STANDARD parks-app-backup-podvolumebackups.json.gz
[2023-10-06 11:19:38 UTC] 928B STANDARD parks-app-backup-resource-list.json.gz
[2023-10-06 11:19:38 UTC] 49B STANDARD parks-app-backup-results.gz
[2023-10-06 11:19:38 UTC] 29B STANDARD parks-app-backup-volumesnapshots.json.gz
[2023-10-06 11:19:38 UTC] 95KiB STANDARD parks-app-backup.tar.gz
[2023-10-06 11:19:38 UTC] 2.6KiB STANDARD velero-backup.json
恢复应用
- 先查看 parks-app 项目中应用用到的 PVC。
$ oc get pvc -n parks-app
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mongodb-data-claim Bound pvc-1dc9c03d-1e1e-41d0-a514-56bd920b7902 10Gi RWO gp3-csi 37m
- 删除 parks-app 测试应用的项目来模拟灾难。
$ oc delete project parks-app
- 使用名为 parks-app-up 的备份创一个建名为 parks-app-restore 的 restore 。
$ velero create restore parks-app-restore --from-backup parks-app-backup -n openshift-adp
Restore request "parks-app-restore" submitted successfully.
Run `velero restore describe parks-app-restore` or `velero restore logs parks-app-restore` for more details.
- 查看 velero 的 Restore 对象,直到 STATUS 为 Completed。
$ velero get restore -n openshift-adp
NAME BACKUP STATUS STARTED COMPLETED ERRORS WARNINGS CREATED SELECTOR
parks-app-restore parks-app-backup Completed 2023-10-06 11:50:05 +0000 UTC 2023-10-06 11:50:09 +0000 UTC 0 10 2023-10-06 11:50:05 +0000 UTC <none>
- 确认 parks-app 项目和其中的资源又被恢复了。
$ oc get project parks-app
NAME DISPLAY NAME STATUS
parks-app Active
- 最后查看被恢复 parks-app 项目中应用用到的 PVC,确认和以前用到的 PVC 已经不同了。
$ oc get pvc -n parks-app
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mongodb-data-claim Bound pvc-9198ba80-cb1a-4a3d-b03f-e7bb063ad6df 10Gi RWO gp3-csi 42s
备份定时
执行命令可实现定制备份:
$ velero create schedule parks-app-backup-schedule --schedule="0 7 * * *" --include-namespaces parks-app -n openshift-adp
备份频率可以使用类似 cron 命令的方法设置上面命令中的 “–schedule” 参数。
Character Position | Character Period | Acceptable Values |
---|---|---|
1 | Minute | 0-59,* |
2 | Hour | 0-23,* |
3 | Day of Month | 1-31,* |
4 | Month | 1-12,* |
5 | Day of Week | 0-6,* |
其他说明
- OADP 可以将一个集群的 backup 在另一个 OpenShift 集群中进行恢复。
- OADP 在恢复 Kubernetes 对象的时候缺省无法对已有对象进行覆盖。如需覆盖可在命令中使用 --existing-resource-policy=update 参数。
演示视频
参考
https://github.com/konveyor/labs
https://gitlab.consulting.redhat.com/iberia-consulting/inditex/ocs/ocs-procedures/-/blob/master/resources/content/oadp-testing-examples.md
使用 OADP 在多集群之间备份恢复应用 https://velero.io/docs/main/migration-case/#verify-both-clusters