OpenShift 4 - 容器应用备份和恢复(附视频)

59 篇文章 2 订阅
6 篇文章 0 订阅

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

  1. 根据《OpenShift 4 - 部署运行 MinIO 对象存储》在 “my-minio” 项目中安装 MinIO 服务,并创建名为“ocp-backup”的 Bucket。
  2. 执行命令,在 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
  1. 进入部署好的名为 minio-client 的 Pod。
$ oc get pod
NAME           READY   STATUS    RESTARTS   AGE
minio-client   1/1     Running   0          41s
$ oc rsh minio-client
  1. 在 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

  1. 使用默认配置安装 OADP Operator,Opeartor 会安装到 openshift-adp 项目中。
    在这里插入图片描述
  2. 在 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>
  1. 根据以下 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
  1. 在 OADP Opeartor 中查看 DataProtectionApplication 对象以及相关的资源,另外 DataProtectionApplication 还会自动创建其他相关对象。还可在 OpenShift 的 “开发者” 视图中查看部署的资源。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 确认在 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
  1. 确认在 velero 中已经有一个 VolumeSnapshotLocation 对象了。
$ velero get snapshot-location -n openshift-adp
NAME            PROVIDER
example-dpa-1   aws

对应用进行备份和恢复

备份应用

  1. 执行命令,针对 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.
  1. 查看 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>
  1. 在名为 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

恢复应用

  1. 先查看 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
  1. 删除 parks-app 测试应用的项目来模拟灾难。
$ oc delete project parks-app
  1. 使用名为 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.
  1. 查看 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>
  1. 确认 parks-app 项目和其中的资源又被恢复了。
$ oc get project parks-app
NAME        DISPLAY NAME   STATUS
parks-app                  Active
  1. 最后查看被恢复 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 PositionCharacter PeriodAcceptable Values
1Minute0-59,*
2Hour0-23,*
3Day of Month1-31,*
4Month1-12,*
5Day of Week0-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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值