9.8. 使用 OADP 为托管集群进行自动灾难恢复


在裸机或 Amazon Web Services (AWS) 平台上托管的集群中,您可以使用 OpenShift API 进行数据保护(OADP) Operator 自动执行一些备份和恢复步骤。

这个过程涉及以下步骤:

  1. 配置 OADP
  2. 定义数据保护应用程序(DPA)
  3. 备份数据平面工作负载
  4. 备份 control plane 工作负载
  5. 使用 OADP 恢复托管集群

9.8.1. 先决条件

您必须在管理集群中满足以下先决条件:

  • 已安装 OADP Operator
  • 您创建了存储类。
  • 您可以使用 cluster-admin 权限访问集群。
  • 您可以通过目录源访问 OADP 订阅。
  • 您可以访问与 OADP 兼容的云存储供应商,如 S3、Microsoft Azure、Google Cloud Platform 或 MinIO。
  • 在断开连接的环境中,您可以访问与 OADP 兼容的自托管存储供应商,如 Red Hat OpenShift Data FoundationMinIO
  • 您的托管的 control plane pod 已启动并运行。

9.8.2. 配置 OADP

如果您的托管集群位于 AWS 上,请按照"使用 Multicloud Object Gateway 配置 OpenShift API for Data Protection" 中的步骤来配置 OADP。

如果您的托管集群位于裸机平台上,请按照"配置 OpenShift API for Data Protection with AWS S3 兼容存储"中的步骤来配置 OADP。

9.8.3. 使用 DPA 自动化备份和恢复过程

您可以使用数据保护应用程序(DPA)自动化备份和恢复过程的一部分。使用 DPA 时,暂停并重启资源协调的步骤是自动的。DPA 定义包括备份位置和 Velero pod 配置的信息。

您可以通过定义 DataProtectionApplication 对象来创建 DPA。

流程

  • 如果使用裸机平台,您可以完成以下步骤来创建 DPA:

    1. 创建类似以下示例的清单文件:

      例 9.3. dpa.yaml 文件示例

      apiVersion: oadp.openshift.io/v1alpha1
      kind: DataProtectionApplication
      metadata:
        name: dpa-sample
        namespace: openshift-adp
      spec:
        backupLocations:
          - name: default
            velero:
              provider: aws 
      1
      
              default: true
              objectStorage:
                bucket: <bucket_name> 
      2
      
                prefix: <bucket_prefix> 
      3
      
              config:
                region: minio 
      4
      
                profile: "default"
                s3ForcePathStyle: "true"
                s3Url: "<bucket_url>" 
      5
      
                insecureSkipTLSVerify: "true"
              credential:
                key: cloud
                name: cloud-credentials
                default: true
        snapshotLocations:
          - velero:
              provider: aws 
      6
      
              config:
                region: minio 
      7
      
                profile: "default"
              credential:
                key: cloud
                name: cloud-credentials
        configuration:
          nodeAgent:
            enable: true
            uploaderType: kopia
          velero:
            defaultPlugins:
              - openshift
              - aws
              - csi
              - hypershift
            resourceTimeout: 2h
      Copy to Clipboard Toggle word wrap
      1 6
      指定 Velero 的供应商。如果使用裸机和 MinIO,您可以使用 aws 作为供应商。
      2
      指定存储桶名称;例如 oadp-backup
      3
      指定存储桶前缀,例如 hcp
      4 7
      本例中的存储桶区域是 minio,它是一个与 S3 API 兼容的存储供应商。
      5
      指定 S3 端点的 URL。
    2. 运行以下命令来创建 DPA 对象:

      $ oc create -f dpa.yaml
      Copy to Clipboard Toggle word wrap

      创建 DataProtectionApplication 对象后,会在 openshift-adp 命名空间中创建新的 velero 部署和 node-agent pod。

  • 如果使用 Amazon Web Services (AWS),您可以完成以下步骤来创建 DPA:

    1. 创建类似以下示例的清单文件:

      例 9.4. dpa.yaml 文件示例

      apiVersion: oadp.openshift.io/v1alpha1
      kind: DataProtectionApplication
      metadata:
        name: dpa-sample
        namespace: openshift-adp
      spec:
        backupLocations:
          - name: default
            velero:
              provider: aws
              default: true
              objectStorage:
                bucket: <bucket_name> 
      1
      
                prefix: <bucket_prefix> 
      2
      
              config:
                region: minio 
      3
      
                profile: "backupStorage"
              credential:
                key: cloud
                name: cloud-credentials
        snapshotLocations:
          - velero:
              provider: aws
              config:
                region: minio 
      4
      
                profile: "volumeSnapshot"
              credential:
                key: cloud
                name: cloud-credentials
        configuration:
          nodeAgent:
            enable: true
            uploaderType: kopia
          velero:
            defaultPlugins:
              - openshift
              - aws
              - csi
              - hypershift
            resourceTimeout: 2h
      Copy to Clipboard Toggle word wrap
      1
      指定存储桶名称;例如 oadp-backup
      2
      指定存储桶前缀,例如 hcp
      3 4
      本例中的存储桶区域是 minio,它是一个与 S3 API 兼容的存储供应商。
    2. 运行以下命令来创建 DPA 资源:

      $ oc create -f dpa.yaml
      Copy to Clipboard Toggle word wrap

      创建 DataProtectionApplication 对象后,会在 openshift-adp 命名空间中创建新的 velero 部署和 node-agent pod。

后续步骤

  • 备份数据平面工作负载。

9.8.4. 备份数据平面工作负载

要使用 OADP Operator 备份数据平面工作负载,请参阅"恢复应用程序"。如果 data plane 工作负载不重要,您可以跳过这个过程。

9.8.5. 备份 control plane 工作负载

您可以通过创建 Backup 自定义资源 (CR) 来备份 control plane 工作负载。

要监控并观察备份过程,请参阅"保留备份和恢复进程"。

流程

  1. 创建定义 Backup CR 的 YAML 文件:

    例 9.5. backup-control-plane.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup_resource_name> 
    1
    
      namespace: openshift-adp
      labels:
        velero.io/storage-location: default
    spec:
      hooks: {}
      includedNamespaces: 
    2
    
      - <hosted_cluster_namespace> 
    3
    
      - <hosted_control_plane_namespace> 
    4
    
      includedResources:
      - sa
      - role
      - rolebinding
      - pod
      - pvc
      - pv
      - bmh
      - configmap
      - infraenv 
    5
    
      - priorityclasses
      - pdb
      - agents
      - hostedcluster
      - nodepool
      - secrets
      - services
      - deployments
      - hostedcontrolplane
      - cluster
      - agentcluster
      - agentmachinetemplate
      - agentmachine
      - machinedeployment
      - machineset
      - machine
      - route
      - clusterdeployment
      excludedResources: []
      storageLocation: default
      ttl: 2h0m0s
      snapshotMoveData: true 
    6
    
      datamover: "velero" 
    7
    
      defaultVolumesToFsBackup: true 
    8
    Copy to Clipboard Toggle word wrap
    1
    backup_resource_name 替换为您的 Backup 资源的名称。
    2
    选择特定命名空间来备份对象。您必须包含托管集群命名空间和托管的 control plane 命名空间。
    3
    <hosted_cluster_namespace> 替换为托管集群命名空间的名称,如 clusters
    4
    <hosted_control_plane_namespace> 替换为托管的 control plane 命名空间的名称,如 cluster-hosted
    5
    您必须在单独的命名空间中创建 infraenv 资源。不要在备份过程中删除 infraenv 资源。
    6 7
    启用 CSI 卷快照,并自动将 control plane 工作负载上传到云存储中。
    8
    将持久性卷 (PV) 的 fs-backup 备份方法设置为默认。当您使用 Container Storage Interface (CSI) 卷快照和 fs-backup 方法的组合时,此设置很有用。
    注意

    如果要使用 CSI 卷快照,您必须在 PV 中添加 backup.velero.io/backup-volumes-excludes=<pv_name> 注解。

  2. 运行以下命令来应用 Backup CR:

    $ oc apply -f backup-control-plane.yaml
    Copy to Clipboard Toggle word wrap

验证

  • 运行以下命令,验证 status.phase 的值是否为 Completed

    $ oc get backups.velero.io <backup_resource_name> -n openshift-adp \
      -o jsonpath='{.status.phase}'
    Copy to Clipboard Toggle word wrap

后续步骤

  • 使用 OADP 恢复托管集群。

9.8.6. 使用 OADP 恢复托管集群

您可以通过创建 Restore 自定义资源(CR)来恢复托管集群。

  • 如果您使用原位升级,则 InfraEnv 资源不需要备用节点。您需要从新的管理集群重新置备 worker 节点。
  • 如果使用替换更新,则需要一些备用节点才能让 InfraEnv 资源部署 worker 节点。
重要

备份托管集群后,您必须销毁它来启动恢复过程。要启动节点置备,您必须在删除托管集群前备份数据平面中的工作负载。

先决条件

要监控并观察备份过程,请参阅"保留备份和恢复进程"。

流程

  1. 运行以下命令,验证托管的 control plane 命名空间中没有 pod 和持久性卷声明 (PVC):

    $ oc get pod pvc -n <hosted_control_plane_namespace>
    Copy to Clipboard Toggle word wrap

    预期输出

    No resources found
    Copy to Clipboard Toggle word wrap

  2. 创建定义 Restore CR 的 YAML 文件:

    restore-hosted-cluster.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: <restore_resource_name> 
    1
    
      namespace: openshift-adp
    spec:
      backupName: <backup_resource_name> 
    2
    
      restorePVs: true 
    3
    
      existingResourcePolicy: update 
    4
    
      excludedResources:
      - nodes
      - events
      - events.events.k8s.io
      - backups.velero.io
      - restores.velero.io
      - resticrepositories.velero.io
    Copy to Clipboard Toggle word wrap

    1
    <restore_resource_name> 替换为 Restore 资源的名称。
    2
    <backup_resource_name> 替换为 Backup 资源的名称。
    3
    启动持久性卷 (PV) 及其 pod 的恢复。
    4
    确保现有对象被备份的内容覆盖。
    重要

    您必须在单独的命名空间中创建 InfraEnv 资源。不要在恢复过程中删除 InfraEnv 资源。InfraEnv 资源对于重新置备新节点是必需的。

  3. 运行以下命令来应用 Restore CR:

    $ oc apply -f restore-hosted-cluster.yaml
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,验证 status.phase 的值是否为 Completed

    $ oc get hostedcluster <hosted_cluster_name> -n <hosted_cluster_namespace> \
      -o jsonpath='{.status.phase}'
    Copy to Clipboard Toggle word wrap

9.8.7. 观察备份和恢复过程

当使用 OpenShift API for Data Protection (OADP) 来备份和恢复托管集群时,您可以监控并观察进程。

流程

  1. 运行以下命令观察备份过程:

    $ watch "oc get backups.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令观察恢复过程:

    $ watch "oc get restores.velero.io -n openshift-adp <backup_resource_name> -o jsonpath='{.status}'"
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令观察 Velero 日志:

    $ oc logs -n openshift-adp -ldeploy=velero -f
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,观察所有 OADP 对象的进度:

    $ watch "echo BackupRepositories:;echo;oc get backuprepositories.velero.io -A;echo; echo BackupStorageLocations: ;echo; oc get backupstoragelocations.velero.io -A;echo;echo DataUploads: ;echo;oc get datauploads.velero.io -A;echo;echo DataDownloads: ;echo;oc get datadownloads.velero.io -n openshift-adp; echo;echo VolumeSnapshotLocations: ;echo;oc get volumesnapshotlocations.velero.io -A;echo;echo Backups:;echo;oc get backup -A; echo;echo Restores:;echo;oc get restore -A"
    Copy to Clipboard Toggle word wrap

9.8.8. 使用 velero CLI 描述备份和恢复资源

当使用 OpenShift API 进行数据保护时,您可以使用 velero 命令行界面 (CLI) 获取 BackupRestore 资源的更多详情。

流程

  1. 运行以下命令,创建一个别名,以便从容器中使用 velero CLI:

    $ alias velero='oc -n openshift-adp exec deployment/velero -c velero -it -- ./velero'
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,获取 Restore 自定义资源 (CR) 的详情:

    $ velero restore describe <restore_resource_name> --details 
    1
    Copy to Clipboard Toggle word wrap
    1
    <restore_resource_name> 替换为 Restore 资源的名称。
  3. 运行以下命令,获取 Backup CR 的详情:

    $ velero restore describe <backup_resource_name> --details 
    1
    Copy to Clipboard Toggle word wrap
    1
    <backup_resource_name> 替换为 Backup 资源的名称。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat