1.21. 集群备份和恢复 Operator

当 Red Hat Advanced Cluster Management for Kubernetes hub 集群停机并需要重新创建时,集群备份和恢复 Operator 提供灾难恢复解决方案。它运行在 hub 集群中,它依赖于 OADP Operator 安装 Velero,并从 hub 集群创建到存储数据的备份存储位置的连接。Velero 是运行备份和恢复操作的组件。集群备份和恢复 Operator 解决方案为所有 Red Hat Advanced Cluster Management hub 集群资源(如受管集群、应用程序、策略和裸机资产)提供备份和恢复支持。

它支持备份扩展 hub 集群安装的任何第三方资源。使用这个备份解决方案,您可以定义基于 cron 的备份计划,这些计划在指定时间段内运行。当 hub 集群停机时,可以部署新的 hub 集群,并将备份的数据移到新的 hub 集群中。

集群备份和恢复 Operator 不会被自动安装。通过在 MultiClusterHub 资源中将 cluster-backup 参数设置为 true 来启用备份组件。集群备份 Operator 安装在安装了 Red Hat Advanced Cluster Management 的 open-cluster-management-backup 命名空间中。安装集群备份 Operator 时,也会自动安装 OADP Operator。

备注:

  • OADP Operator 1.0 已禁用构建多架构构建,仅为官方版本生成 x86_64 构建。这意味着,如果您使用 x86_64 以外的构架,由备份组件安装的 OADP Operator 必须替换为正确的版本。在这种情况下,卸载 OADP Operator 并找到与您的架构匹配的 Operator,然后安装它。
  • 如果您之前已在 hub 集群上安装并使用 OADP Operator,请卸载这个版本,因为备份组件现在可以在组件命名空间中安装 OADP。对安装有备份组件的 OADP Operator 拥有的 DataProtectionApplication 资源使用相同的存储位置,它会访问与之前 Operator 相同的备份数据。Velero 备份资源现在在此 hub 集群上的新 OADP Operator 命名空间中载入。

Velero 在 Red Hat Advanced Cluster Management hub 集群上安装 OADP Operator。Velero 用于备份和恢复 Red Hat Advanced Cluster Management hub 集群资源。

有关 Velero 支持的存储供应商列表,请参阅 S3-Compatible 对象存储供应商

1.21.1. 先决条件

  • 确保完成为保存备份的云存储创建凭证 secret 的步骤。secret 资源必须在 OADP operator 命名空间中创建,后者是 open-cluster-management-backup 命名空间。
  • 在创建 DataProtectionApplication 资源时,使用创建的 secret。

    完成以下步骤以创建 DataProtectionApplication 资源实例:

    1. 在 Red Hat OpenShift Container Platform 控制台中选择 Operators > Installed Operators
    2. 在 DataProtectionApplication 下点 Create instance
    3. 使用 {ocp-short)控制台或使用 DataProtectionApplication 示例中所述的 YAML 文件选择配置来创建 Velero 实例。
    4. DataProtectionApplication namespace 设置为 open-cluster-management-backup
    5. DataProtectionApplication 资源正确设置规格(spec:)值。然后点创建

      提到的资源值是为了便于使用。如果您打算使用默认的备份存储位置,请在 backupStorageLocations 部分中设置以下值 default: true。您的 DataProtectionApplication 资源可能类似以下 YAML 文件:

      您的 DataProtectionApplication 资源可能类似以下 YAML 文件:

      apiVersion: oadp.openshift.io/v1alpha1
      kind: DataProtectionApplication
      metadata:
        name: dpa-sample
      spec:
        configuration:
          velero:
            defaultPlugins:
            - openshift
            - aws
          restic:
            enable: true
        backupLocations:
          - name: default
            velero:
              provider: aws
              default: true
              objectStorage:
                bucket: my-bucket
                prefix: my-prefix
              config:
                region: us-east-1
                profile: "default"
              credential:
                name: cloud-credentials
                key: cloud
        snapshotLocations:
          - name: default
            velero:
              provider: aws
              config:
                region: us-west-2
                profile: "default"

      请参阅创建 DataProtectionApplication 资源的示例。

1.21.2. 备份和恢复 Operator 架构

Operator 定义 backupSchedule.cluster.open-cluster-management.io 资源,用于设置 Red Hat Advanced Cluster Management 备份计划,以及 restore.cluster.open-cluster-management.io 资源,该资源用于处理和恢复这些备份。Operator 会创建对应的 Velero 资源,并定义备份远程集群和需要恢复的任何其他 hub 集群资源所需的选项。查看以下示意图:

Backup and restore architecture diagram

1.21.2.1. 备份的资源

集群备份和恢复 Operator 解决方案为所有 hub 集群资源(如受管集群、应用程序、策略和裸机资产)提供备份和恢复支持。您可以使用解决方案备份任何扩展基本 hub 集群安装的第三方资源。使用这个备份解决方案,您可以定义一个基于 cron 的备份调度,该调度在指定时间段内运行,并持续备份 hub 集群内容的最新版本。

当 hub 集群需要替换或处于灾难情况下,当 hub 集群停机时,可以部署新的 hub 集群并备份数据被移到新的 hub 集群中。

查看以下用于识别备份数据的集群备份和恢复过程的排序列表:

  • 排除 MultiClusterHub 命名空间中的所有资源。这是为了避免备份链接到当前 hub 集群身份的安装资源,不应该备份。
  • 使用 .open-cluster-management.io 后缀的 API 版本备份所有 CRD。这个后缀表示所有 Red Hat Advanced Cluster Management 资源都已备份。
  • 从以下 API 组备份所有 CRD: argoproj.io,app.k8s.io,core.observatorium.io,hive.openshift.io
  • 排除以下 API 组中的所有 CRD: admission.cluster.open-cluster-management.io, admission.work.open-cluster-management.io, internal.open-cluster-management.io, operator.open-cluster-management.io, work.open-cluster-management.io, search.open-cluster-management.io, admission.hive.openshift.io, velero.io
  • 排除以下 CRD,它们是包含的 API 组的一部分,但并不需要或被所有者资源(也会被备份)所替代:clustermanagementaddon, observabilityaddon, applicationmanager, certpolicycontroller, iampolicycontroller, policycontroller, searchcollector, workmanager, backupschedule, restore, clusterclaim.cluster.open-cluster-management.io
  • 使用以下标签之一备份 secret 和 ConfigMap:cluster.open-cluster-management.io/type,hive.openshift.io/secret-type,cluster.open-cluster-management.io/backup
  • 对于您要备份的任何其他资源,使用 cluster.open-cluster-management.io/backup 标签,且不包含在前面提到的条件中。请参见以下示例:

    apiVersion: my.group/v1alpha1
    kind: MyResource
    metadata:
      labels:
        cluster.open-cluster-management.io/backup: ""

    注:需要备份 hive.openshift.io.ClusterDeployment 资源使用的 secret,并仅在使用控制台创建集群时使用 cluster.open-cluster-management.io/backup 标签自动标注。如果使用 GitOps 部署 Hive 集群,则必须手动将 cluster.open-cluster-management.io/backup 标签添加到 ClusterDeployment 使用的 secret 中。

  • 排除您不想备份的特定资源。例如,请查看以下从备份过程中排除 Velero 资源的示例:

    apiVersion: my.group/v1alpha1
    kind: MyResource
    metadata:
      labels:
        velero.io/exclude-from-backup: "true"

    ==== 扩展备份数据

您可以通过在资源中添加 cluster.open-cluster-management.io/backup 标签来备份集群备份和恢复的第三方资源。标签的值可以是任意字符串,包括空字符串。使用一个可以帮助您识别要备份的组件的值。例如,如果组件是由 IDP 解决方案提供,请使用 cluster.open-cluster-management.io/backup: idp 标签。

注: 如果您希望在受管集群激活资源时恢复资源,请使用 cluster.open-cluster-management.io/backup 标签的 cluster-activation 值。恢复受管集群激活资源会导致受管集群活跃由 hub 集群(在启动恢复的位置)主动管理。

1.21.2.1.1. 在受管集群激活时恢复的资源

当您将 cluster.open-cluster-management.io/backup 标签添加到资源时,资源会在 acm-resources-generic-schedule 备份中自动备份。如果需要恢复任何资源,则必须将标签值设置为 cluster-activation,仅在受管集群移到新的 hub 集群后,并在恢复的资源中使用 veleroManagedClustersBackupName:latest。这样可确保资源不会被恢复,除非受管集群激活被调用。查看以下示例:

apiVersion: my.group/v1alpha1
kind: MyResource
metadata:
  labels:
    cluster.open-cluster-management.io/backup: cluster-activation

除了使用 cluster.open-cluster-management.io/backup: cluster-activation 标签并由 acm-resources-generic-schedule 备份存储的激活数据资源外,集群备份和恢复 Operator 还默认在激活集合中包括一些资源。以下资源由 acm-managed-clusters-schedule 备份备份:

  • managedcluster.cluster.open-cluster-management.io
  • managedcluster.clusterview.open-cluster-management.io
  • klusterletaddonconfig.agent.open-cluster-management.io
  • managedclusteraddon.addon.open-cluster-management.io
  • managedclusterset.cluster.open-cluster-management.io
  • managedclusterset.clusterview.open-cluster-management.io
  • managedclustersetbinding.cluster.open-cluster-management.io
  • clusterpool.hive.openshift.io
  • clusterclaim.hive.openshift.io
  • clustercurator.cluster.open-cluster-management.io

1.21.2.2. 资源请求和限值自定义

最初安装 Velero 时,Velero pod 会被设置为默认 CPU 和内存限值,如下例所示:

resources:
 limits:
   cpu: "1"
   memory: 256Mi
 requests:
   cpu: 500m
   memory: 128Mi

以上示例中的限制在某些情况下可以正常工作,但可能会在集群备份大量资源时进行更新。例如,当备份在管理 2000 集群的 hub 集群上运行时,Velero pod 会因为内存不足错误(OOM)崩溃。对于这种情况,以下配置允许备份完成:

  limits:
    cpu: "2"
    memory: 1Gi
  requests:
    cpu: 500m
    memory: 256Mi

要更新 Velero pod 资源的限制和请求,您需要更新 DataProtectionApplication 资源,并为 Velero pod 插入 resourceAllocation 模板。查看以下示例:

apiVersion: oadp.openshift.io/v1alpha1
kind: DataProtectionApplication
metadata:
  name: velero
  namespace: open-cluster-management-backup
spec:
...
  configuration:
...
    velero:
      podConfig:
        resourceAllocations:
          limits:
            cpu: "2"
            memory: 1Gi
          requests:
            cpu: 500m
            memory: 256Mi

请参阅 Velero 资源请求和限值自定义,以了解更多有关 DataProtectionApplication 参数的信息。

1.21.2.3. 使用服务器端加密保护数据

服务器端加密是应用程序或服务的数据加密,在存储位置接收数据。在传输过程中,备份机制本身不会加密数据(因为它会前往备份存储位置),或其他人(同时存储在备份存储位置的磁盘上)。它依赖于对象和快照系统中的原生机制。

最佳实践 :使用可用的备份存储服务器端加密数据。备份包含资源,如在 hub 集群外存储需要加密的凭证和配置文件。

您可以使用 serverSideEncryptionkmsKeyId 参数为存储在 Amazon S3 中的备份启用加密。如需了解更多详细信息,请参阅备份存储位置 YAML。以下示例指定在设置 DataProtectionApplication 资源时的 AWS KMS 密钥 ID:

spec:
  backupLocations:
    - velero:
        config:
          kmsKeyId: 502b409c-4da1-419f-a16e-eif453b3i49f
          profile: default
          region: us-east-1

请参阅 Velero 支持的存储供应商,以找出其它存储供应商的所有可配置参数。

1.21.2.4. 调度集群备份

在创建 backupschedule.cluster.open-cluster-management.io 资源时,会激活备份调度。查看以下 backupschedule.cluster.open-cluster-management.io 示例:

apiVersion: cluster.open-cluster-management.io/v1beta1
kind: BackupSchedule
metadata:
  name: schedule-acm
spec:
  veleroSchedule: 0 */2 * * *
  veleroTtl: 120h

创建 backupschedule.cluster.open-cluster-management.io 资源后,运行以下命令来获取调度的集群备份的状态:

oc get bsch -n <oadp-operator-ns>

上一命令中的 <oadp-operator-ns> 参数是创建 BackupSchedule 的命名空间,它与安装 OADP Operator 的命名空间相同。backupschedule.cluster.open-cluster-management.io 资源会创建六个 schedule.velero.io 资源,用于生成备份。运行以下命令查看调度的备份列表:

os get schedules -A | grep acm

资源在以下组中单独备份:

  • 凭证备份,其中包含 Hive、Red Hat Advanced Cluster Management 和用户创建凭证的三个备份文件。
  • 资源备份,其中包含 Red Hat Advanced Cluster Management 资源的一个备份,另一个用于通用资源。这些资源使用以下标签 cluster.open-cluster-management.io/backup
  • 受管集群备份,其中仅包含激活与 hub 集群连接的资源,在恢复备份时。

资源备份文件包含特定于受管集群的资源,但不包含将受管集群连接到 hub 集群的资源子集。连接受管集群的资源称为激活资源,并包含在受管集群备份中。当您只在新 hub 集群中为 凭证资源备份中恢复备份时,新的 hub 集群将所有使用 Hive API 创建的受管集群处于分离状态。但是,只有在 passive hub 集群上恢复激活数据时,使用导入操作在主 hub 集群上导入的受管集群才会出现。目前,受管集群仍然连接到创建备份文件的原始 hub 集群。

当恢复激活数据时,只有使用 Hive API 创建的受管集群才会与新的 hub 集群自动连接。所有其他受管集群都显示为 Pending 状态,必须手动重新附加到新集群。

1.21.3. 恢复备份

在进行一般的恢复时,运行备份的 hub 集群变得不可用,备份的数据需要移到一个新的 hub 集群。这可以通过在新的 hub 集群上运行集群恢复操作来完成。在这种情况下,恢复操作会在创建备份的不同 hub 集群中运行。

有些情况下,您要在收集备份的同一 hub 集群中恢复数据,以便恢复来自以前快照的数据。在这种情况下,恢复和备份操作都在同一 hub 集群中运行。

在 hub 集群中创建 restore.cluster.open-cluster-management.io 资源后,您可以运行以下命令来获取恢复操作的状态:oc get restore -n <oadp-operator-ns>。您还应能够验证是否已创建备份文件中包含的已备份资源。

restore.cluster.open-cluster-management.io 资源运行一次。如果要在恢复操作完成后再次运行相同的恢复操作,您必须使用相同的 spec 选项创建新的 restore.cluster.open-cluster-management.io 资源。

restore 操作用于恢复备份操作创建的所有三种备份类型。但是,您可以选择只安装特定类型的备份(仅限受管集群、仅用户凭证或只安装 hub 集群资源)。

恢复定义以下三个必要的 spec 属性,其中为备份文件类型定义了恢复逻辑:

  • veleroManagedClustersBackupName 用于定义受管集群激活资源的恢复选项。
  • veleroCredentialsBackupName 用于为用户凭证定义 restore 选项。
  • veleroResourcesBackupName 用于定义 hub 集群资源的 restore 选项(ApplicationsPolicy 及其他 hub 集群资源,如受管集群被动数据)。

    前面提到的属性的有效选项有以下值:

    • latest - 此属性恢复此类型的备份文件。
    • skip - 此属性不会尝试使用当前恢复操作恢复这种类型的备份。
    • <backup_name> - 此属性按名称恢复指向它的指定的备份。

restore.cluster.open-cluster-management.io 创建的 restore.velero.io 资源的名称遵循以下模版规则 <restore.cluster.open-cluster-management.io name>-<velero-backup-resource-name>.查看以下描述:

  • restore.cluster.open-cluster-management.io 名称 是当前 restore.cluster.open-cluster-management.io 资源的名称,该资源用于启动恢复。
  • velero-backup-resource-name 是 Velero 备份文件的名称,用于恢复数据。例如,名为 restore-acmrestore.cluster.open-cluster-management.io 资源创建 restore.velero.io 恢复资源。查看以下格式示例:

    • restore-acm-acm-managed-clusters-schedule-20210902205438 可用于恢复受管集群激活数据备份。在本例中,用于恢复资源的 backup.velero.io 备份名称为 acm-managed-clusters-schedule-20210902205438
    • restore-acm-acm-credentials-schedule-20210902206789 用于恢复凭据备份。在本例中,用于恢复资源的 backup.velero.io 备份名称为 acm-managed-clusters-schedule-20210902206789
    • restore-acm-acm-resources-schedule-20210902201234 用于恢复应用程序、策略和其他 hub 集群资源,如受管集群被动数据备份。在这个示例中,用于恢复资源的 backup.velero.io 备份名称为 acm-managed-clusters-schedule-20210902201234

:备份类型为 skip,则不会创建 restore.velero.io

查看以下集群 Restore 资源的 YAML 示例。在这个示例中,使用最新可用的备份文件恢复所有三种备份文件:

apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Restore
metadata:
  name: restore-acm
spec:
  veleroManagedClustersBackupName: latest
  veleroCredentialsBackupName: latest
  veleroResourcesBackupName: latest

Note:当来自受管集群备份的 acm-managed-clusters 备份被恢复到另外一个 hub 集群时,只有 Hive API 创建的受管集群会自动连接到新的 hub 集群。所有其他受管集群都处于 Pending Import 状态,且必须重新导入到新的 hub 集群中。如需更多信息,请参阅 恢复导入的受管集群(技术预览)

1.21.3.1. 准备新的 hub 集群

在新 hub 集群上运行恢复操作前,您需要手动配置 hub 集群,并在初始 hub 集群上安装相同的 Operator。您必须在与初始 hub 集群相同的命名空间中安装 Red Hat Advanced Cluster Management Operator,创建 DataProtectionApplication 资源,然后连接到之前备份了数据的同一存储位置。

例如,如果初始 hub 集群安装了任何其他 Operator,如 Ansible Automation Platform、Red Hat OpenShift GitOps、cert-manager,则必须在运行恢复操作前安装它们。这样可确保配置新的 hub 集群与初始 hub 集群相同。

1.21.3.2. 在恢复前清理 hub 集群

Velero 目前跳过 hub 集群中现有的备份资源。这会限制在新 hub 集群上恢复 hub 集群数据时可以使用的场景。如果使用新的 hub 集群并且应用了多次恢复,则不建议使用 hub 集群作为被动配置,除非在运行恢复前清理数据。新 hub 集群中的数据没有反映恢复的资源的可用数据。

创建 restore.cluster.open-cluster-management.io 资源时,集群备份和恢复 Operator 将运行一组步骤,以便在 Velero 恢复开始前清理 hub 集群来准备恢复。

cleanup 选项使用 cleanupBeforeRestore 属性来识别要清理的对象子集。您可以为这个清理设置三个选项:

  • None: 不需要清理,只开始 Velero 恢复。这在全新的 hub 集群中使用。
  • CleanupRestored :清理以前 Red Hat Advanced Cluster Management 恢复创建的所有资源。建议使用此属性,因为它比 CleanupAll 属性小。
  • CleanupAll :清理 hub 集群上的所有资源,它可以作为 Red Hat Advanced Cluster Management 备份的一部分,即使资源没有因为恢复操作而创建。当在 hub 集群中创建额外的内容时,会使用它,这需要清理。请谨慎使用这个选项,因为这个选项会在由用户创建的 hub 集群上清理资源,而不是之前备份。强烈建议您使用 CleanupRestored 选项,并在 hub 集群指定为灾难情况下,禁止手动更新 hub 集群内容。使用 CleanupAll 选项作为最后一个替代方案。

备注:

  • 如果恢复的备份没有资源,Velero 会为 velero 恢复资源设置状态 PartiallyFailed。这意味着,如果任何创建的 restore.velero.io 资源没有恢复任何资源,则 restore.cluster.open-cluster-management.io 资源可能会处于 PartiallyFailed 状态。
  • restore.cluster.open-cluster-management.io 资源会运行一次,除非您使用 syncRestoreWithNewBackups:true 来在新的备份可用时恢复被动数据。在这种情况下,请按照使用同步示例的恢复被动操作。请参阅在检查备份时恢复被动资源。完成恢复操作后,您想要在同一 hub 集群上运行另一个恢复操作,您必须创建一个新的 restore.cluster.open-cluster-management.io 资源。
  • 虽然您可以创建多个 restore.cluster.open-cluster-management.io 资源,但在任何时间点上只能有一个。

1.21.3.3. 恢复激活资源

当您希望 hub 集群管理集群时,请使用 restore-passive-activate 示例。在这种情况下,假设其它数据已在使用被动资源的 hub 集群上恢复。

1.21.3.4. 恢复被动资源

被动数据是备份数据,如 secret、ConfigMap、应用程序、策略以及所有受管集群自定义资源,它不在受管集群和 hub 集群之间激活连接。备份资源通过凭证备份和恢复资源在 hub 集群上恢复。

1.21.3.5. 在检查备份时恢复被动资源

使用 restore-passive-sync 示例恢复被动数据,同时继续检查新的备份是否可用并自动恢复它们。要自动恢复新的备份,您必须将 syncRestoreWithNewBackups 参数设置为 true。您还必须仅恢复最新的被动数据。

VeleroResourcesBackupNameVeleroCredentialsBackupName 参数设置为 latestVeleroManagedClustersBackupName 参数为 skip。当将 VeleroManagedClustersBackupName 设置为 latest 后,受管集群会在新的 hub 集群中激活,现在是主 hub 集群。

当激活的受管集群变为主 hub 集群时,恢复资源被设置为 Finished,并且 syncRestoreWithNewBackups 会被忽略,即使设置为 true

默认情况下,当 syncRestoreWithNewBackups 设为 true 时,控制程序会每 30 分钟检查新的备份。如果找到新的备份,它会恢复备份的资源。您可以通过更新 restoreSyncInterval 参数来更改检查的持续时间。

例如,以下资源每 10 分钟检查备份:

apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Restore
metadata:
  name: restore-acm-passive-sync
spec:
  syncRestoreWithNewBackups: true # restore again when new backups are available
  restoreSyncInterval: 10m # check for new backups every 10 minutes
  cleanupBeforeRestore: CleanupRestored
  veleroManagedClustersBackupName: skip
  veleroCredentialsBackupName: latest
  veleroResourcesBackupName: latest

1.21.3.6. 恢复导入的受管集群

只有使用 Hive API 与主 hub 集群连接的受管集群会自动连接到新的 hub 集群,其中恢复激活数据。这些集群已在主 hub 集群上使用 Clusters 选项卡的 Create cluster 按钮创建。当激活数据被恢复时,使用 Import cluster 按钮连接到初始 hub 集群的受管集群显示为 Pending Import,需要在新的 hub 集群中重新导入。

Hive 受管集群可以与新的 hub 集群连接,因为 Hive 将受管集群 kubeconfig 存储在 hub 集群上的受管集群命名空间中。这在新的 hub 集群上备份和恢复。然后,导入控制器使用恢复的配置更新受管集群上的 bootstrap kubeconfig,该配置仅适用于使用 Hive API 创建的受管集群。导入的集群不可用。

要在新 hub 集群上重新连接导入的集群,请在启动恢复操作后手动创建 auto-import-secret 资源。如需了解更多详细信息,请参阅使用自动导入 secret 导入集群

在受管集群命名空间中创建 auto-import-secret 资源,每个集群处于 Pending Import 状态。使用具有足够权限的 kubeconfig 或令牌,以便导入组件在新 hub 集群上启动自动导入。您必须使用令牌连接到受管集群,为每个受管集群具有访问权限。令牌必须具有 klusterlet 角色绑定或具有相同权限的角色。

1.21.4. 主动被动配置

在主动被动配置中,有一个主动 hub 集群和被动 hub 集群。一个活跃 hub 集群也被视为主 hub 集群,它使用 BackupSchedule.cluster.open-cluster-management.io 资源以定义的时间间隔管理集群并备份资源。

被动 hub 集群会持续检索最新的备份并恢复被动数据。当有新的备份数据时,被动 hub 使用 Restore.cluster.open-cluster-management.io 资源从主 hub 集群恢复被动数据。当主 hub 集群停机时,这些 hub 集群处于备用状态,成为主 hub 集群。

主动和被动 hub 集群连接到相同的存储位置,主 hub 集群备份 被动 hub 集群的数据,以访问主 hub 集群。有关如何设置这个自动恢复配置的详情,请参阅 Restore 被动资源,同时检查备份部分。

在以下图中,活跃 hub 集群会管理本地集群并定期备份 hub 集群数据:

Active passive configration diagram

被动 hub 集群恢复这个数据,但受管集群激活数据除外,后者将受管集群移到 passive hub 集群。被动 hub 集群可以持续恢复被动数据,请参阅 Restore 被动资源,同时检查备份 部分。被动 hub 集群可以将被动数据恢复为一次性操作,请参阅 Restore passive resources 部分以了解更多详细信息。

1.21.4.1. 受管集群激活数据

受管集群激活数据或其他激活数据是一个备份资源。当在新的 hub 集群上恢复激活数据时,受管集群就会由运行恢复的 hub 集群主动管理。当使用 cluster.open-cluster-management.io/backup: cluster-activation 标签时,激活数据资源由受管集群备份和 resource-generic 备份存储。

1.21.4.2. 资源在受管激活时恢复

cluster.open-cluster-management.io/backup: cluster-activation 标签添加到资源时,资源会在 acm-resources-generic-schedule 备份资源中自动备份。当您在恢复资源中设置 veleroManagedClustersBackupName:latest 标签值时,通常需要恢复资源。如果在受管集群移动到新 hub 集群时需要恢复任何这些资源,请将 veleroManagedClustersBackupName:latest 标签值设置为 cluster-activation。这样可确保不会恢复资源,除非受管集群激活启动。

您的资源可能类似以下示例:

apiVersion: my.group/v1alpha1
kind: MyResource
metadata:
  labels:
    cluster.open-cluster-management.io/backup: cluster-activation

也支持由 acm-managed-clusters-schedule 资源备份的激活集合中也会有默认资源。查看由 acm-managed-clusters-schedule 资源恢复的以下默认资源:

  • managedcluster.cluster.open-cluster-management.io
  • managedcluster.clusterview.open-cluster-management.io
  • klusterletaddonconfig.agent.open-cluster-management.io
  • managedclusteraddon.addon.open-cluster-management.io
  • clusterpool.hive.openshift.io
  • clusterclaim.hive.openshift.io
  • clustercurator.cluster.open-cluster-management.io
  • clustersync.hiveinternal.openshift.io
  • baremetalhost.metal3.io
  • bmceventsubscription.metal3.io
  • hostfirmwaresettings.metal3.io

1.21.5. 灾难恢复

当主 hub 集群停机时,管理员选择其中一个被动 hub 集群来接管受管集群。在以下镜像中,管理员决定将 Hub 集群 N 用作新的主 hub 集群:

Disaster recovery diagram

hub 集群 N 恢复受管集群激活数据。此时,受管集群与 Hub 集群 N 连接。管理员通过在新的主 hub 集群( Hub 集群 N )上激活备份,方法是创建一个 BackupSchedule.cluster.open-cluster-management.io 资源,并将备份存储在与初始主 hub 集群相同的存储位置。

所有其他被动 hub 集群现在使用由新主 hub 集群创建的备份数据恢复被动数据。Hub N 现在是主 hub 集群,管理集群和备份数据。

1.21.6. 使用策略备份验证

集群备份和恢复 Operator Helm chart (cluster-backup-chart) 在 hub 集群上安装 backup-restore-enabled 策略,用于告知您备份和恢复组件的问题。backup-restore-enabled 策略包括一组用于检查以下限制的模板:

  • Pod 验证

    以下模板检查备份组件和依赖项的 pod 状态:

    • acm-backup-pod-running 模板检查备份和恢复 operator pod 是否在运行。
    • oadp-pod-running 模板检查 OADP operator pod 是否在运行。
    • velero-pod-running 模板检查 Velero pod 是否在运行。
  • 数据保护应用程序验证

    • data-protection-application-available 模板检查是否创建了 DataProtectioApplicatio.oadp.openshift.io 资源。这个 OADP 资源设置 Velero 配置。
  • 备份存储验证

    • backup-storage-location-available 模板检查 BackupStorageLocation.velero.io 资源是否已创建以及状态值是否为 Available。这意味着与备份存储的连接有效。
  • BackupSchedule 冲突验证

    • 如果当前 hub 集群上存在 BackupSchedule.cluster.open-cluster-management.io,则 acm-backup-clusters-collision-report 模板会验证状态不是 BackupCollision。这会在将备份数据写入存储位置时,验证当前 hub 集群与其它 hub 集群不冲突。

      对于 BackupCollision 状态的定义,请参阅 Backup Collisions 部分

  • BackupSchedule 和恢复状态验证

    • acm-backup-phase-validation 模板检查当前集群中是否存在 BackupSchedule.cluster.open-cluster-management.io,则检查状态为 FailedEmpty 状态。这样可确保如果此集群是主 hub 集群,并正在生成备份,则 BackupSchedule.cluster.open-cluster-management.io 状态是健康。
    • 如果当前集群中存在 Restore.cluster.open-cluster-management.io,则相同的模板会检查当前集群中没有处于 FailedEmpty 状态的状态。这样可确保如果这个集群是二级 hub 集群,且被恢复备份,Restore.cluster.open-cluster-management.io 状态是健康。
  • 备份存在验证

    • acm-managed-clusters-schedule-backups-available 模板检查 Backup.velero.io 资源是否位于 BackupStorageLocation.velero.io 指定的位置上,以及备份是否由 BackupSchedule.cluster.open-cluster-management.io 资源创建。这验证了备份已至少运行一次,使用备份和恢复 Operator。
  • 备份完成

    • acm-backup-in-progress-report 模板检查 Backup.velero.io 资源是否处于 InProgress 状态。这个验证会被添加,因为带有大量资源,velero pod 会作为备份运行重启,备份会停留在不继续完成状态。在正常备份过程中,备份资源会在某一时间点进行,但不会被卡住并在完成运行。正常情况下,在调度运行时报告 acm-backup-in-progress-report 模板会在调度运行时报告警告并备份正在进行。
  • 主动作为 cron 作业运行的备份

    • BackupSchedule.cluster.open-cluster-management.io 主动运行并在存储位置保存新的备份。此验证通过 backup-schedule-cron-enabled 策略模板来完成。模板检查是否有带有 velero.io/schedule-name: acm-validation-policy-schedule 标签的 Backup.velero.io

      acm-validation-policy-schedule 备份设置为在为备份 cron 调度设定时间后过期。如果没有创建备份的 cron 作业,旧的 acm-validation-policy-schedule 备份将被删除,因为它过期且没有创建新的备份。因此,如果在任何时间点上没有 acm-validation-policy-schedule backups,这代表没有活跃的 cron 作业生成备份。

      此策略旨在帮助在 hub 集群活跃并生成或恢复备份时通知 hub 集群管理员。

了解如何启用和管理集群备份和恢复 Operator,请参阅管理 备份和恢复 Operator。

1.21.7. 管理备份和恢复 Operator

启用集群备份和恢复操作器,为集群资源调度备份和恢复。

需要的访问权限: 集群管理员

1.21.7.1. 先决条件

对于主动和被动 hub 集群

  • 在 Red Hat OpenShift Container Platform 集群中,安装 Red Hat Advanced Cluster Management for Kubernetes operator 版本 2.5.x。安装 Red Hat Advanced Cluster Management 时会自动创建 MultiClusterHub 资源,并显示以下状态: Running
  • 集群备份和恢复 Operator 必须手动安装。启用集群备份和恢复 Operator (cluster-backup)。通过将 cluster-backup 参数设置为 true 来编辑 MultiClusterHub 资源。这将使用 cluster-backup 资源在同一命名空间中安装 OADP operator。

对于被动 hub 集群

  • 在被动 hub 集群上运行恢复操作前,您必须手动配置 hub 集群,并在活跃 hub 集群上安装所有 Operator,以及与活跃 hub 集群相同的命名空间中。
  • 确保 Red Hat Advanced Cluster Management Operator 安装在与初始 hub 集群相同的命名空间中。然后,创建 DataProtectionApplication 资源,并连接到初始 hub 集群备份数据的相同存储位置。查看以下 DataProtectionApplication 资源示例:

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: dpa-sample
    spec:
      configuration:
        velero:
          defaultPlugins:
          - openshift
          - aws
        restic:
          enable: true
      backupLocations:
        - name: default
          velero:
            provider: aws
            default: true
            objectStorage:
              bucket: my-bucket
              prefix: my-prefix
            config:
              region: us-east-1
              profile: "default"
            credential:
              name: cloud-credentials
              key: cloud
      snapshotLocations:
        - name: default
          velero:
            provider: aws
            config:
              region: us-west-2
              profile: "default"
  • 在运行恢复操作前,请验证已安装了其他 Operator,如 Ansible Automation Platform、Red Hat OpenShift Container Platform GitOps 或证书管理器。这样可确保新 hub 集群配置与初始 hub 集群相同。
  • 安装备份和恢复 Operator 时,被动 hub 集群必须使用与初始 hub 集群相同的命名空间名称,以及在之前的 hub 集群上配置的任何其他 Operator。

1.21.7.2. 启用备份和恢复 Operator

当第一次创建 MultiClusterHub 资源时,可以启用集群备份和恢复 Operator。cluster-backup 参数设为 true。启用 Operator 后,会安装 operator 资源。

如果已创建了 MultiClusterHub 资源,您可以通过编辑 MultiClusterHub 资源来安装或卸载集群备份 Operator。如果要卸载集群备份 Operator,将 cluster-backup 设置为 false

启用备份和恢复 Operator 时,MultiClusterHub 资源可能类似以下 YAML 文件:

apiVersion: operator.open-cluster-management.io/v1
  kind: MultiClusterHub
  metadata:
    name: multiclusterhub
    namespace: open-cluster-management
  spec:
    availabilityConfig: High
    enableClusterBackup: false
    imagePullSecret: multiclusterhub-operator-pull-secret
    ingress:
      sslCiphers:
        - ECDHE-ECDSA-AES256-GCM-SHA384
        - ECDHE-RSA-AES256-GCM-SHA384
        - ECDHE-ECDSA-AES128-GCM-SHA256
        - ECDHE-RSA-AES128-GCM-SHA256
    overrides:
      components:
        - enabled: true
          name: multiclusterhub-repo
        - enabled: true
          name: search
        - enabled: true
          name: management-ingress
        - enabled: true
          name: console
        - enabled: true
          name: insights
        - enabled: true
          name: grc
        - enabled: true
          name: cluster-lifecycle
        - enabled: true
          name: volsync
        - enabled: true
          name: multicluster-engine
        - enabled: false
          name: cluster-proxy-addon
        - enabled: true <<<<<<<<
          name: cluster-backup
    separateCertificateManagement: false

1.21.7.3. 使用备份和恢复 Operator

完成以下步骤以调度和恢复备份:

  1. 使用备份和恢复 operator,backupschedule.cluster.open-cluster-management.iorestore.cluster.open-cluster-management.io 资源,使用 cluster_v1beta1_backupschedule.yaml 示例文件创建 backupschedule.cluster.open-cluster-management.io 资源。请参阅 cluster-backup-operator 示例。运行以下命令,使用 cluster_v1beta1_backupschedule.yaml 示例文件创建 backupschedule.cluster.open-cluster-management.io 资源:

    kubectl create -n <oadp-operator-ns> -f config/samples/cluster_v1beta1_backupschedule.yaml

    您的资源可能类似以下文件:

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: BackupSchedule
    metadata:
      name: schedule-acm
    spec:
      veleroSchedule: 0 */6 * * * # Create a backup every 6 hours
      veleroTtl: 72h # deletes scheduled backups after 72h; optional, if not specified, the maximum default value set by velero is used - 720h

    查看 backupschedule.cluster.open-cluster-management.io spec 属性的描述:

    • veleroSchedule 是必需属性,定义用于调度备份的 cron 作业。
    • veleroTtl 是可选属性,定义调度的备份资源的过期时间。如果没有指定,则使用 Velero 设置的最大默认值,即 720h
  2. 检查 backupschedule.cluster.open-cluster-management.io 资源的状态,这会显示三个 schedule.velero.io 资源的定义。运行以下命令:

    oc get bsch -n <oadp-operator-ns>
  3. 提醒,恢复操作在不同的 hub 集群上运行,用于恢复场景。要启动恢复操作,请在要恢复备份的 hub 集群中创建一个 restore.cluster.open-cluster-management.io 资源。

    您可以使用集群备份和恢复 Operator,backupschedule.cluster.open-cluster-management.iorestore.cluster.open-cluster-management.io 资源来创建备份或恢复资源。请参阅 cluster-backup-operator 示例

  4. 运行以下命令,使用 cluster_v1beta1_restore.yaml 示例文件创建 restore.cluster.open-cluster-management.io 资源。确保将 oadp-operator-ns 替换为用于安装 OADP Operator 的命名空间名称。OADP Operator 安装命名空间的默认值为 oadp-operator

    kubectl create -n <oadp-operator-ns> -f config/samples/cluster_v1beta1_restore.yaml

    您的资源可能类似以下文件:

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Restore
    metadata:
      name: restore-acm
    spec:
      veleroManagedClustersBackupName: latest
      veleroCredentialsBackupName: latest
      veleroResourcesBackupName: latest

    查看以下 restore.cluster.open-cluster-management.io 的三个所需 spec 属性的描述:

    • veleroManagedClustersBackupName 用于定义受管集群协调数据的恢复选项。
    • veleroCredentialsBackupName 用于为用户凭证定义 restore 选项。
    • veleroResourcesBackupName 用于定义 hub 集群资源的 restore 选项(ApplicationsPolicy 及其他 hub 资源,如受管集群被动数据)。

      前面提到的属性的有效选项有以下值:

    • latest - 此属性恢复此类型的备份文件。
    • skip - 此属性不会尝试使用当前恢复操作恢复这种类型的备份。
    • backup_name - 此属性通过引用名称来恢复指定的备份。
  5. 运行以下命令来查看 Velero Restore 资源:

    oc get restore.velero.io -n <oadp-operator-ns>

    查看以下 YAML 示例以恢复不同类型的备份文件:

    • 恢复所有三种备份资源:

      apiVersion: cluster.open-cluster-management.io/v1beta1
      kind: Restore
      metadata:
        name: restore-acm
      spec:
        veleroManagedClustersBackupSchedule: latest
        veleroCredentialsBackupSchedule: latest
        veleroResourcesBackupSchedule: latest
    • 仅恢复受管集群资源:

      apiVersion: cluster.open-cluster-management.io/v1beta1
      kind: Restore
      metadata:
        name: restore-acm
      spec:
        veleroManagedClustersBackupName: latest
        veleroCredentialsBackupName: skip
        veleroResourcesBackupName: skip
    • 使用 acm-managed-clusters-schedule-20210902205438 备份只为受管集群恢复资源:

      apiVersion: cluster.open-cluster-management.io/v1beta1
      kind: Restore
      metadata:
        name: restore-acm
      spec:
        veleroManagedClustersBackupName: acm-managed-clusters-schedule-20210902205438
        veleroCredentialsBackupName: skip
        veleroResourcesBackupName: skip

      备注:

      • restore.cluster.open-cluster-management.io 资源运行一次。恢复操作完成后,您可以选择在同一 hub 集群中运行另一个恢复操作。您必须创建新的 restore.cluster.open-cluster-management.io 资源才能运行新的恢复操作。
      • 您可以创建多个 restore.cluster.open-cluster-management.io,但在任何时候都只能运行一个。

1.21.7.4. 查看恢复事件

使用以下命令获取有关恢复事件的信息:

oc describe -n <oadp-n> <restore-name>

您的事件列表可能类似以下示例:

Spec:
  Cleanup Before Restore:               CleanupRestored
  Restore Sync Interval:                4m
  Sync Restore With New Backups:        true
  Velero Credentials Backup Name:       latest
  Velero Managed Clusters Backup Name:  skip
  Velero Resources Backup Name:         latest
Status:
  Last Message:                     Velero restores have run to completion, restore will continue to sync with new backups
  Phase:                            Enabled
  Velero Credentials Restore Name:  example-acm-credentials-schedule-20220406171919
  Velero Resources Restore Name:    example-acm-resources-schedule-20220406171920
Events:
  Type    Reason                   Age   From                Message
  ----    ------                   ----  ----                -------
  Normal  Prepare to restore:      76m   Restore controller  Cleaning up resources for backup acm-credentials-hive-schedule-20220406155817
  Normal  Prepare to restore:      76m   Restore controller  Cleaning up resources for backup acm-credentials-cluster-schedule-20220406155817
  Normal  Prepare to restore:      76m   Restore controller  Cleaning up resources for backup acm-credentials-schedule-20220406155817
  Normal  Prepare to restore:      76m   Restore controller  Cleaning up resources for backup acm-resources-generic-schedule-20220406155817
  Normal  Prepare to restore:      76m   Restore controller  Cleaning up resources for backup acm-resources-schedule-20220406155817
  Normal  Velero restore created:  74m   Restore controller  example-acm-credentials-schedule-20220406155817
  Normal  Velero restore created:  74m   Restore controller  example-acm-resources-generic-schedule-20220406155817
  Normal  Velero restore created:  74m   Restore controller  example-acm-resources-schedule-20220406155817
  Normal  Velero restore created:  74m   Restore controller  example-acm-credentials-cluster-schedule-20220406155817
  Normal  Velero restore created:  74m   Restore controller  example-acm-credentials-hive-schedule-20220406155817
  Normal  Prepare to restore:      64m   Restore controller  Cleaning up resources for backup acm-resources-schedule-20220406165328
  Normal  Prepare to restore:      62m   Restore controller  Cleaning up resources for backup acm-credentials-hive-schedule-20220406165328
  Normal  Prepare to restore:      62m   Restore controller  Cleaning up resources for backup acm-credentials-cluster-schedule-20220406165328
  Normal  Prepare to restore:      62m   Restore controller  Cleaning up resources for backup acm-credentials-schedule-20220406165328
  Normal  Prepare to restore:      62m   Restore controller  Cleaning up resources for backup acm-resources-generic-schedule-20220406165328
  Normal  Velero restore created:  61m   Restore controller  example-acm-credentials-cluster-schedule-20220406165328
  Normal  Velero restore created:  61m   Restore controller  example-acm-credentials-schedule-20220406165328
  Normal  Velero restore created:  61m   Restore controller  example-acm-resources-generic-schedule-20220406165328
  Normal  Velero restore created:  61m   Restore controller  example-acm-resources-schedule-20220406165328
  Normal  Velero restore created:  61m   Restore controller  example-acm-credentials-hive-schedule-20220406165328
  Normal  Prepare to restore:      38m   Restore controller  Cleaning up resources for backup acm-resources-generic-schedule-20220406171920
  Normal  Prepare to restore:      38m   Restore controller  Cleaning up resources for backup acm-resources-schedule-20220406171920
  Normal  Prepare to restore:      36m   Restore controller  Cleaning up resources for backup acm-credentials-hive-schedule-20220406171919
  Normal  Prepare to restore:      36m   Restore controller  Cleaning up resources for backup acm-credentials-cluster-schedule-20220406171919
  Normal  Prepare to restore:      36m   Restore controller  Cleaning up resources for backup acm-credentials-schedule-20220406171919
  Normal  Velero restore created:  36m   Restore controller  example-acm-credentials-cluster-schedule-20220406171919
  Normal  Velero restore created:  36m   Restore controller  example-acm-credentials-schedule-20220406171919
  Normal  Velero restore created:  36m   Restore controller  example-acm-resources-generic-schedule-20220406171920
  Normal  Velero restore created:  36m   Restore controller  example-acm-resources-schedule-20220406171920
  Normal  Velero restore created:  36m   Restore controller  example-acm-credentials-hive-schedule-20220406171919

有关所需规格属性和有效选项的描述,请参阅 恢复备份