业务连续性
第 1 章 业务连续性
有关灾难恢复解决方案和 hub 集群以及受管集群,请参阅以下主题。
1.1. 备份和恢复
集群备份和恢复 Operator 在 hub 集群上运行,并为 Red Hat Advanced Cluster Management for Kubernetes hub 集群失败提供灾难恢复解决方案。当 hub 集群失败时,一些功能(如基于策略的警报或集群更新)会停止工作,即使所有受管集群仍可以正常工作。当 hub 集群不可用时,您需要一个恢复计划来决定是否可以恢复,或者是否需要从新部署的 hub 集群中恢复数据。
备份和恢复组件提供了一组策略来报告备份和恢复组件的问题,如备份 pod 或备份调度没有运行。如果备份解决方案无法按预期工作,您可以使用策略模板为 hub 集群管理员创建警报。如需更多信息,请参阅验证备份或恢复配置。
集群备份和恢复 Operator 依赖于 OADP Operator 安装 Velero,并从 hub 集群创建到存储数据的备份存储位置的连接。Velero 是运行备份和恢复操作的组件。集群备份和恢复 Operator 解决方案为所有 Red Hat Advanced Cluster Management hub 集群资源(包括受管集群、应用程序和策略)提供备份和恢复支持。
集群备份和恢复 Operator 支持备份扩展 hub 集群安装的任何第三方资源。使用这个备份解决方案,您可以定义基于 cron 的备份计划,这些计划在指定时间段内运行。当 hub 集群停机时,可以部署新的 hub 集群,并将备份的数据移到新的 hub 集群中。
继续阅读以下主题以了解更多有关备份和恢复 Operator 的信息:
1.1.1. 备份和恢复 Operator 架构
Operator 定义 BackupSchedule.cluster.open-cluster-management.io
资源,用于设置 Red Hat Advanced Cluster Management 备份计划,以及 restore.cluster.open-cluster-management.io
资源,该资源用于处理和恢复这些备份。Operator 会创建对应的 Velero 资源,并定义备份远程集群和需要恢复的任何其他 hub 集群资源所需的选项。查看以下示意图:
1.1.1.1. 备份的资源
集群备份和恢复 Operator 解决方案为所有 hub 集群资源(如受管集群、应用程序和策略)提供备份和恢复支持。您可以使用解决方案备份任何扩展基本 hub 集群安装的第三方资源。使用这个备份解决方案,您可以定义一个基于 cron 的备份调度,该调度在指定时间段内运行,并持续备份 hub 集群内容的最新版本。
当 hub 集群需要替换或处于灾难情况下,当 hub 集群停机时,可以部署新的 hub 集群并备份数据被移到新的 hub 集群中。
查看以下集群备份和恢复过程列表,以及它们如何备份或排除资源和组来识别备份数据:
-
排除
MultiClusterHub
命名空间中的所有资源。这是为了避免备份链接到当前 hub 集群身份的安装资源,不应该备份。 -
备份由
.open-cluster-management.io
和.hive.openshift.io
后缀的 API 版本的所有资源。这些后缀表示所有 Red Hat Advanced Cluster Management 资源都已备份。 备份以下 API 组中的所有资源:
argoproj.io
,app.k8s.io
,core.observatorium.io
,hive.openshift.io
.资源在acm-resources-schedule
备份中备份,但agent-install.openshift.io
API 组中的资源除外。agent-install.openshift.io
API 组中的资源在acm-managed-clusters-schedule
备份中备份。来自hive.openshift.io
和hiveinternal.openshift.io
API 组中的以下资源也由acm-managed-clusters-schedule
备份备份:-
clusterdeployment.hive.openshift.io
-
machinepool.hive.openshift.io
-
clusterpool.hive.openshift.io
-
clusterclaim.hive.openshift.io
-
clusterimageset.hive.openshift.io
-
clustersync.hiveinternal.openshift.io
-
从以下 API 组中排除所有资源:
-
internal.open-cluster-management.io
-
operator.open-cluster-management.io
-
work.open-cluster-management.io
-
search.open-cluster-management.io
-
admission.hive.openshift.io
-
proxy.open-cluster-management.io
-
action.open-cluster-management.io
-
view.open-cluster-management.io
-
clusterview.open-cluster-management.io
-
velero.io
-
排除作为包含 API 组一部分的所有资源,但不需要,或者由备份的所有者资源重新创建:
-
clustermanagementaddon.addon.open-cluster-management.io
-
backupschedule.cluster.open-cluster-management.io
-
restore.cluster.open-cluster-management.io
-
clusterclaim.cluster.open-cluster-management.io
-
discoveredcluster.discovery.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
标签用于您要备份的任何其他资源,且未包含在前面提到的条件中,或者是排除的 API 组的一部分。请参见以下示例: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 中。带有 cluster.open-cluster-management.io/backup: cluster-activation 标签的 secret
和配置映射资源会在集群激活时恢复。排除您不想备份的特定资源。请参阅以下示例从备份过程中排除 Velero 资源:
apiVersion: my.group/v1alpha1 kind: MyResource metadata: labels: velero.io/exclude-from-backup: "true"
1.1.1.2. 由 Red Hat Advanced Cluster Management 调度创建的备份文件
您可以使用 Red Hat Advanced Cluster Management 调度来备份 hub 集群资源,这些资源根据资源类型或标签注解在单独的备份文件中分组。
BackupSchedule.cluster.open-cluster-management.io
资源会创建一组四个 schedule.velero.io
资源。这些 schedule.velero.io
资源生成备份文件,这些文件也称为资源。
要查看调度的备份文件列表,请运行以下命令: oc get schedule -A | grep acm
。
调度的备份文件是 backup.velero.io
。下表列出了这些调度的备份文件的描述:
调度的备份 | 描述 |
---|---|
凭证备份 |
存储以下内容: Hive 凭证、Red Hat Advanced Cluster Management、用户创建的凭证和 |
资源备份 |
包含 Red Hat Advanced Cluster Management 资源、 |
受管集群备份 |
仅包含激活受管集群连接到 hub 集群的资源,其中恢复备份。此备份文件的名称是 |
1.1.1.3. 在受管集群激活时恢复的资源
将 cluster.open-cluster-management.io/backup
标签添加到资源时,资源会在 acm-resources-generic-schedule
备份中自动备份,但备份 acm-credentials-schedule-schedule-
中备份的 Secrets
和 ConfigMap
资源除外。如果您需要在将受管集群移至新的 hub 集群后恢复任何资源,并在恢复的资源中使用 veleroManagedClustersBackupName:latest
,请将标签值设置为 cluster-activation
。
当您将 cluster.open-cluster-management.io/backup
标签设置为 cluster-activation
时,您可以确保资源不会被恢复,除非激活受管集群。查看以下示例:
apiVersion: my.group/v1alpha1 kind: MyResource metadata: labels: cluster.open-cluster-management.io/backup: cluster-activation
注: 对于任何受管集群命名空间或其中的任何资源,您必须在集群激活步骤中恢复一个。因此,如果您需要添加到受管集群命名空间中创建的备份资源,请为 cluster.open-cluster-management.io/backup
标签使用 cluster-activation
值。要了解恢复过程,请查看以下信息:
-
如果恢复命名空间,则
managedcluster-import-controller
会删除命名空间。 -
如果恢复
managedCluster
自定义资源,则cluster-manager-registration-controller
会创建命名空间。
除了使用 cluster.open-cluster-management.io/backup: cluster-activation
标签并由 acm-resources-generic-schedule
备份存储的激活数据资源外,集群备份和恢复 Operator 还默认在激活集合中包括一些资源。以下资源由 acm-managed-clusters-schedule
备份备份:
-
managedcluster.cluster.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.1.1.4. 扩展备份数据
您可以通过在资源中添加 cluster.open-cluster-management.io/backup
标签来备份集群备份和恢复的第三方资源。标签的值可以是任意字符串,包括空字符串。使用一个可以帮助您识别要备份的组件的值。例如,如果组件是由 IDP 解决方案提供,请使用 cluster.open-cluster-management.io/backup: idp
标签。
注: 如果您希望在受管集群激活资源时恢复资源,请使用 cluster.open-cluster-management.io/backup
标签的 cluster-activation
值。当您恢复受管集群激活资源时,对由 hub 集群主动管理的受管集群开始恢复。
1.1.2. 配置主动-被动 hub 集群
了解如何配置主动 - 被动 hub 集群配置,其中初始 hub 集群备份数据,在活跃集群不可用时,可以备份一个或多个被动 hub 集群,以便在活跃集群不可用时控制受管集群。
1.1.2.1. 主动-被动配置
在主动-被动配置中,有一个主动 hub 集群和被动 hub 集群。一个活跃 hub 集群也被视为主 hub 集群,它使用 BackupSchedule.cluster.open-cluster-management.io
资源以定义的时间间隔管理集群并备份资源。
注: 要备份主 hub 集群数据,您不需要 主动 - 被动配置
。您只需备份并存储 hub 集群数据。这样,如果出现问题或失败,您可以部署新的 hub 集群,并在这个新 hub 集群上恢复主 hub 集群数据。要减少恢复主 hub 集群数据的时间,您可以使用 主动 - 被动配置
,但这不是必需的。
被动 hub 集群会持续检索最新的备份并恢复被动数据。当有新的备份数据时,被动 hub 使用 Restore.cluster.open-cluster-management.io
资源从主 hub 集群恢复被动数据。这些 hub 集群处于备用状态,当主 hub 集群失败时会成为主 hub 集群。
主动和被动 hub 集群连接到相同的存储位置,主 hub 集群备份 被动 hub 集群的数据,以访问主 hub 集群。有关如何设置此自动恢复配置的详情,请参阅在检查备份时恢复被动资源。
在以下图中,活跃 hub 集群会管理本地集群并定期备份 hub 集群数据:
被动 hub 集群恢复这个数据,但受管集群激活数据除外,后者将受管集群移到 passive hub 集群。被动 hub 集群可以持续恢复被动数据。被动 hub 集群可以将被动数据恢复为一次性操作。如需了解更多详细信息,请参阅恢复被动资源。
1.1.2.2. 灾难恢复
当主 hub 集群失败时,作为 hub 管理员,您可以选择一个被动 hub 集群来接管受管集群。在以下 灾难恢复图中,请参阅 如何使用 Hub 集群 N 作为新的主 hub 集群:
hub 集群 N 恢复受管集群激活数据。受管集群连接到 Hub 集群 N。您可以通过创建一个 BackupSchedule.cluster.open- cluster -management.io
资源,并将备份存储在与初始主 hub 集群相同的存储位置,在新的主 hub 集群上激活备份。
所有其他被动 hub 集群现在使用新的主 hub 集群创建的备份数据恢复被动数据。Hub N 现在是主 hub 集群,管理集群和备份数据。
重要:
早期 灾难恢复图中的第一个进程 没有被自动化,原因如下:
- 您必须决定主 hub 集群是否失败,需要替换,或者 hub 集群和受管集群之间存在网络通信错误。
- 您必须决定哪个被动 hub 集群成为主 hub 集群。策略与 Red Hat Ansible Automation Platform 作业集成,您可以通过在备份策略报告备份错误时进行作业运行来自动化此步骤。
早期 灾难恢复图中的 第二个进程是 manual。如果您没有在新的主 hub 集群上创建备份调度,则
backup-restore-enabled
策略将使用backup-schedule-cron-enabled
策略模板显示违反情况。在这个第二个过程中,您可以执行以下操作:-
使用
backup-schedule-cron-enabled
策略模板来验证新的主 hub 集群是否有作为 cron 作业运行的备份。 -
使用策略与
Ansible
集成,并定义一个Ansible
作业,该作业可在backup-schedule-cron-enabled
策略模板报告违反情况时运行。
-
使用
-
有关
backup-restore-enabled
策略模板的详情,请参阅 验证备份或恢复配置。
1.1.2.3. 其他资源
有关被动资源的更多信息,请参阅以下恢复选项:
- 在检查备份时恢复被动资源。
- 恢复被动资源.
-
如果要在灾难发生时部署新的 hub 集群,并恢复这个新 hub 集群上的所有主 hub 集群数据,而不是构建
主动 - 被动配置
,请参阅恢复所有资源 主题。
1.1.3. 安装备份和恢复 Operator
集群备份和恢复 Operator 不会被自动安装。继续阅读以了解如何安装和启用 Operator。
1.1.3.1. 为备份和恢复 Operator 设置 hub 集群
要使用备份和恢复 Operator,您必须设置 hub 集群。要设置 hub 集群,请按顺序完成以下部分:
1.1.3.1.1. 创建存储位置 secret
要创建存储位置 secret,请完成以下步骤:
- 完成为保存备份的云存储 创建默认 Secret 的步骤。
- 在 OADP Operator 命名空间中创建 secret 资源,该资源位于备份组件命名空间中。
1.1.3.1.2. 启用备份 Operator
启用备份 Operator,以使用 Red Hat Advanced Cluster Management for Kubernetes 的灾难恢复解决方案。
1.1.3.1.2.1. 前提条件
-
在 Red Hat OpenShift Container Platform 集群中,安装 Red Hat Advanced Cluster Management Operator 版本 2.12。安装 Red Hat Advanced Cluster Management 时会自动创建
MultiClusterHub
资源,并显示以下状态:Running
。
1.1.3.1.2.2. 为 hub 集群启用备份 Operator
要为您的主动和被动 hub 集群启用备份 Operator,请完成以下步骤:
通过完成以下步骤启用集群备份和恢复 Operator
cluster-backup
:-
通过将
cluster-backup
参数设置为true
来更新MultiClusterHub
资源。如果此 hub 集群没有启用 AWS 安全令牌服务(STS)选项,则 OADP Operator 也安装在带有备份组件的同一命名空间中。 - 对于启用了 STS 选项的 hub 集群,您必须手动安装 OADP operator。
-
通过将
- 确保恢复 hub 集群使用与备份 hub 集群使用的相同 Red Hat Advanced Cluster Management 版本。您不能在 hub 集群上恢复备份,其版本早于备份 hub 集群使用的版本。
通过完成以下步骤手动配置恢复 hub 集群:
- 安装在活跃 hub 集群上安装的所有 Operator,以及与活跃 hub 集群相同的命名空间中。
- 验证新 hub 集群是否已配置与备份 hub 集群相同。
- 安装备份和恢复 Operator 以及备份 hub 集群上配置的任何 Operator 时,请使用与备份 hub 集群相同的命名空间名称。
通过完成以下步骤,在被动 hub 集群上创建
DataProtectionApplication
资源:-
在主动和被动 hub 集群上创建
DataProtectionApplication
资源。 -
对于恢复 hub 集群,当您创建
DataProtectionApplication
资源时,请使用与备份 hub 相同的存储位置。
-
在主动和被动 hub 集群上创建
1.1.3.1.2.3. 在带有较新版本的 hub 集群中运行恢复操作
如果要在使用较新的 Red Hat Advanced Cluster Management 版本而不是创建备份的 hub 集群上运行恢复操作,您仍可以通过完成以下步骤运行恢复操作:
- 在恢复 hub 集群中,在与创建备份的 hub 集群相同的版本安装 Operator。
- 恢复恢复 hub 集群上的备份数据。
- 在恢复 hub 集群中,使用 upgrade 操作升级到您要使用的版本。
1.1.3.1.3. 安装 OADP operator
对于启用了 AWS Security Token Service (STS)选项的 hub 集群,在 hub 集群上安装集群备份和恢复 Operator 时不会安装 OADP operator。要将 STS role_arn
传递给 OADP operator,您必须手动安装 OADP operator。
对于没有启用 STS 选项的 hub 集群,当您在 hub 集群上安装集群备份和恢复 Operator 时,会自动安装 OADP operator。
当您启用 MultiClusterHub
资源的 backup 选项时,backup 选项会一直处于 Pending
状态,直到您在 open-cluster-management-backup
命名空间中安装 OADP operator。如果您还没有在 hub 集群上启用 AWS STS 选项,则 OADP operator 会使用备份 chart 自动安装。否则,您必须手动安装 OADP operator。
当集群处于 STS 模式时,备份 chart 在 open-cluster-management-backup
命名空间中创建一个名为 acm-redhat-oadp-operator-subscription
的配置映射。此配置映射还包含 OADP 频道和环境信息。使用此配置映射获取您需要安装的 OADP 版本,并获取要在 OADP 订阅上设置的任何环境选项。
如需了解更多有关使用 STS 选项安装 OADP Operator 的信息,请参阅 OpenShift Container Platform 文档中的在 OADP ROSA 上备份工作负载。
重要:
安装 OADP operator 时,请参阅以下备注:
- 自定义资源定义是集群范围的,因此不能在同一集群中安装两个不同版本的 OADP 或 Velero。如果您有两个不同的版本,则一个版本会使用错误的自定义资源定义来运行。
-
当您创建
MultiClusterHub
资源时,Velero 自定义资源定义(CRD)不会在 hub 集群中自动安装。安装 OADP operator 时,Velero CRD 会在 hub 集群上安装。因此,Multielero CRD 资源不再被MultiClusterHub
资源协调和更新。 - 备份组件可用于在组件命名空间中安装的 OADP Operator。
- 如果手动安装 OADP operator,OADP operator 的自定义资源定义版本和 Velereo 必须完全匹配。如果这些版本不完全匹配,您会收到问题。
- Velero 在 Red Hat Advanced Cluster Management for Kubernetes hub 集群中使用 OADP Operator 安装。它用于备份和恢复 Red Hat Advanced Cluster Management hub 集群资源。
- 有关 Velero 支持的存储供应商列表,请参阅关于安装 OADP。
1.1.3.1.4. 安装自定义 OADP 版本
在 MultiClusterHub
资源上设置注解后,您可以根据您的特定需求自定义 OADP 版本。完成以下步骤:
要覆盖备份和恢复 Operator 安装的 OADP 版本,请在
MultiClusterHub
资源中使用以下注解:installer.open-cluster-management.io/oadp-subscription-spec: '{"channel": "stable-1.4"}'
重要: 如果您使用这个选项获得与备份和恢复 Operator 默认安装的 OADP 版本不同的 OADP 版本,请确保 hub 集群使用的 Red Hat OpenShift Container Platform 版本上支持这个版本。请谨慎使用此覆盖选项,因为它可能会导致配置不受支持。
例如,通过设置注解来安装 OADP 1.5 版本。您的
MultiClusterHub
资源可能类似以下示例:apiVersion: operator.open-cluster-management.io/v1 kind: MultiClusterHub metadata: annotations: installer.open-cluster-management.io/oadp-subscription-spec: '{"channel": "stable-1.5","installPlanApproval": "Automatic","name": "redhat-oadp-operator","source": "redhat-operators","sourceNamespace": "openshift-marketplace"}' name: multiclusterhub spec: {}
-
通过将
cluster-back
设置为true
,在MultiClusterHub
资源上启用cluster-backup
选项。
1.1.3.1.5. 创建 DataProtectionApplication
资源
要为您的主动和被动 hub 集群创建 DataProtectionApplication
资源实例,请完成以下步骤:
- 在 Red Hat OpenShift Container Platform 控制台中选择 Operators > Installed Operators。
-
在 DataProtectionApplication 下点
Create instance
。 -
使用 OpenShift Container Platform 控制台或使用 YAML 文件(如
DataProtectionApplication
示例中所述)选择配置来创建 Velero 实例。 -
将
DataProtectionApplication
namespace 设置为open-cluster-management-backup
。 为
DataProtectionApplication
资源正确设置规格(spec:
)值。然后点创建。如果您打算使用默认的备份存储位置,请在
backupStorageLocations
部分中设置以下值default: true
。查看以下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"
1.1.3.1.6. 在断开连接的环境中启用备份和恢复组件
要在断开连接的环境中使用 Red Hat OpenShift Container Platform 启用备份和恢复组件,请完成以下步骤:
使用 follwing 注解更新
MultiClusterHub
资源,以覆盖安装 OADP Operator 的源。在MultiClusterHub
资源上启用cluster-backup
组件前创建注解:apiVersion: operator.open-cluster-management.io/v1 kind: MultiClusterHub metadata: annotations: installer.open-cluster-management.io/oadp-subscription-spec: '{"source": "redhat-operator-index"}'
redhat-operator-index
是一个自定义名称,代表您定义并用来在断开连接的环境中访问 Red Hat OpenShift Operator 的CatalogSource
资源的名称。运行以下命令来检索catalogsource
:oc get catalogsource -A
输出可能类似以下:
NAMESPACE NAME DISPLAY TYPE PUBLISHER AGE openshift-marketplace acm-custom-registry Advanced Cluster Management grpc Red Hat 42h openshift-marketplace multiclusterengine-catalog MultiCluster Engine grpc Red Hat 42h openshift-marketplace redhat-operator-index grpc 42h
1.1.3.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: true name: cluster-backup separateCertificateManagement: false
1.1.3.3. 其他资源
- 请参阅 Velero。
- 如需支持的 Velero 存储供应商列表,请参阅 OpenShift Container Platform 文档中的 AWS S3 兼容备份 存储供应商。
- 了解有关 DataProtectionApplication 资源的更多信息。
1.1.4. 调度备份
通过调度备份,您可以确保数据保持保护并可访问。完成以下步骤以调度备份:
运行以下命令来创建
backupschedule.cluster.open-cluster-management.io
资源:oc create -f cluster_v1beta1_backupschedule.yaml
您的
cluster_v1beta1_backupschedule.yaml
资源可能类似以下文件:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm namespace: open-cluster-management-backup spec: veleroSchedule: 0 */2 * * * 1 veleroTtl: 120h 2 useManagedServiceAccount: true 3 paused: false 4
- 1
veleroSchedule
是必需属性,定义用于调度备份的 cron 作业。在前面的示例中,它每 2 小时创建一个备份。- 2
- 可选:
veleroTtl
是一个可选属性,定义调度的备份资源的过期时间。如果没有指定,则使用 Velero 设置的最大默认值,即720h
。它会在120h
后删除调度的备份。 - 3
- 可选:
使用ManagedServiceAccount
是一个可选属性,可启用自动导入功能,在恢复操作中导入集群。如果您将其设置为true
,它会启用自动导入功能,在恢复操作中导入集群。 - 4
- 可选:
paused
是一个可选属性,可以暂停备份调度。如果您将其设置为true
,它会暂停备份调度,请删除此资源创建的所有 Velero 调度。
检查
backupschedule.cluster.open-cluster-management.io
资源的状态,这会显示三个schedule.velero.io
资源的定义。运行以下命令:oc get BackupSchedule -n open-cluster-management-backup
提醒,恢复操作在不同的 hub 集群上运行,用于恢复场景。要启动恢复操作,请在要恢复备份的 hub 集群中创建一个
restore.cluster.open-cluster-management.io
资源。注:当您在新的 hub 集群上恢复备份时,请确保关闭创建备份的以前的 hub 集群。如果正在运行,则旧的 hub 集群会在受管集群协调发现受管集群不再可用时立即重新导入受管集群。
backupschedule.cluster.open-cluster-management.io
资源会创建六个 schedule.velero.io
资源,用于生成备份。运行以下命令查看调度的备份列表:
oc get schedules -A | grep acm
资源在组中单独备份,如下表所示:
资源 | 描述 |
---|---|
| 存储 Hive 凭证、Red Hat Advanced Cluster Management 和用户创建的凭证和 ConfigMap 的备份文件。 |
|
包括一个 Red Hat Advanced Cluster Management 资源的备份,另一个用于通用资源。这些资源使用 |
| 仅包含激活受管集群连接到 hub 集群的资源,其中恢复备份。 |
注 :资源备份文件包含特定于受管集群的资源,但不包含将受管集群连接到 hub 集群的资源子集。连接受管集群的资源称为激活资源,并包含在受管集群备份中。当您只在新 hub 集群中为 凭证和资源备份中恢复备份时,新的 hub 集群将所有使用 Hive API 创建的受管集群处于分离状态。只有在被动 hub 集群上恢复激活数据时,才会使用导入操作在主 hub 集群上导入的受管集群。受管集群仍然连接到创建备份文件的原始 hub 集群。
当恢复激活数据时,只有使用 Hive API 创建的受管集群才会与新的 hub 集群自动连接。所有其他受管集群都处于 Pending 状态。您需要手动将它们重新关联到新集群。
有关各种 BackupSchedule
状态的描述,请查看下表:
BackupSchedule 状态 | 描述 |
---|---|
|
|
|
错误阻止 |
|
|
|
如果您使用 |
1.1.4.1. 了解备份冲突
如果 hub 集群的状态从被动改为主 hub 集群,或从主到被动(从主到被动)和不同的 hub 集群备份同一存储位置的数据,则可能会出现备份冲突。
因此,最新的备份由 hub 集群生成,该集群不再设置为主 hub 集群。这个 hub 集群仍然会生成备份,因为 BackupSchedule.cluster.open-cluster-management.io
资源仍被启用。
当您在受控环境中运行恢复操作(如灾难恢复测试操作)时,您可以在使用备份 hub 集群上的 BackupSchedule
暂停
属性时防止备份冲突。在恢复新 hub 集群上的资源前,请通过在 BackupSchedule
资源上设置 paused=true
属性来暂停备份 hub 上的 BackupSchedule
资源。
请参阅以下列表以了解两个可能会导致备份冲突的情况:
主 hub 集群意外失败,这由以下条件导致:
- 从主 hub 集群到初始 hub 集群的通信会失败。
- 初始 hub 集群备份数据会在名为 secondary hub 集群的二级 hub 集群上恢复。
-
管理员在二级 hub 集群中创建
BackupSchedule.cluster.open-cluster-management.io
资源,该资源现在是主 hub 集群,并将备份数据生成到通用存储位置。 初始 hub 集群意外开始工作。
因为
BackupSchedule.cluster.open-cluster-management.io
资源在初始 hub 集群中仍被启用,所以初始 hub 集群会恢复到与二级 hub 集群相同的存储位置。现在,两个 hub 集群都在同一个存储位置写入备份数据。任何 hub 集群从这个存储位置恢复最新的备份都可以使用初始 hub 集群数据,而不是二级 hub 集群数据。
管理员通过将二级 hub 集群设置为主 hub 集群来测试灾难场景,这是由以下条件造成的:
- 初始 hub 集群已停止。
- 初始 hub 集群备份数据在二级 hub 集群上恢复。
-
管理员在二级 hub 集群中创建
BackupSchedule.cluster.open-cluster-management.io
资源,该资源现在是主 hub 集群,并将备份数据生成到通用存储位置。 - 灾难恢复完成后,管理员将恢复到之前的状态,并使初始 hub 集群再次变为主 hub 集群。
当二级 hub 集群仍然处于活跃状态时,初始 hub 集群会启动。
因为
BackupSchedule.cluster.open-cluster-management.io
资源仍然在二级 hub 集群中启用,所以它会在违反备份数据的同一存储位置写入备份。任何从此位置恢复最新备份的 hub 集群都可以使用二级 hub 集群数据,而不是初始 hub 集群数据。在这种情况下,在启动初始 hub 集群前,首先停止二级 hub 集群或暂停BackupSchedule.cluster.open-cluster-management.io
资源,以避免备份冲突问题。
管理员通过使二级 hub 集群设置为主 hub 集群来测试灾难的情况,而无需首先停止初始 hub 集群,从而导致以下条件:
- 初始 hub 集群仍在运行。
- 初始 hub 集群备份数据在二级 hub 集群上恢复,包括受管集群备份。因此,二级 hub 集群现在是活跃的集群。
-
因为
BackupSchedule.cluster.open-cluster-management.io
资源在初始 hub 集群上仍被启用,因此它会将备份位置写入破坏备份数据的同一存储位置。例如,任何 hub 集群从这个位置恢复最新的备份都可以使用初始 hub 集群数据,而不是二级 hub 集群数据。为避免数据崩溃,初始 hub 集群BackupSchedule
资源状态会自动更改为BackupCollision
。在这种情况下,为了避免这个备份冲突状态,请首先停止初始 hub 集群,或者在在二级 hub 集群上恢复受管集群数据前,在初始 hub 集群上删除BackupSchedule.cluster.open-cluster-management.io
资源。
1.1.4.2. 防止备份冲突
要防止和报告备份冲突,请使用 BackupSchedule.cluster.open-cluster-management.io
资源中的 BackupCollision
状态。控制器定期检查存储位置的最新备份是否已从当前 hub 集群生成。如果没有,则不同的 hub 集群最近已将备份数据写入存储位置,这表示 hub 集群与不同的 hub 集群合并。
在备份冲突场景中,当前 hub 集群 BackupSchedule.cluster.open-cluster-management.io
资源状态被设置为 BackupCollision
。要防止数据崩溃,此资源会删除 Schedule.velero.io
资源。备份策略报告 BackupCollision
。
在同一场景中,管理员会验证哪些 hub 集群写入存储位置。管理员在从无效的 hub 集群中删除 BackupSchedule.cluster.open-cluster-management.io
资源前进行这个验证。然后,管理员可以在有效的主 hub 集群上创建一个新的 BackupSchedule.cluster.open-cluster-management.io
资源,恢复备份。
要检查是否有备份冲突,请运行以下命令:
oc get backupschedule -A
如果存在备份冲突,输出可能类似以下示例:
NAMESPACE NAME PHASE MESSAGE openshift-adp schedule-hub-1 BackupCollision Backup acm-resources-schedule-20220301234625, from cluster with id [be97a9eb-60b8-4511-805c-298e7c0898b3] is using the same storage location. This is a backup collision with current cluster [1f30bfe5-0588-441c-889e-eaf0ae55f941] backup. Review and resolve the collision then create a new BackupSchedule resource to resume backups from this cluster.
1.1.4.3. 其他资源
1.1.5. 恢复备份
在进行一般的恢复时,运行备份的 hub 集群变得不可用,备份的数据需要移到一个新的 hub 集群。通过在新的 hub 集群中运行集群恢复操作来完成此操作。在这种情况下,恢复操作会在创建备份的不同 hub 集群中运行。
有些情况下,您希望在收集备份的同一 hub 集群上恢复数据,以便您可以从早期快照中恢复数据。在这种情况下,恢复和备份操作都在同一 hub 集群中运行。
要完全恢复备份,请完成以下内容:
1.1.5.1. 使用恢复操作进行备份类型
使用恢复操作恢复备份操作创建的所有 3 个备份类型。您可以选择只安装特定类型的备份,如只安装受管集群、只有用户凭证或只安装 hub 集群资源。
恢复定义以下三个必要的 spec
属性,其中为备份文件类型定义了恢复逻辑:
-
veleroManagedClustersBackupName
用于定义受管集群激活资源的恢复选项。 -
veleroCredentialsBackupName
用于为用户凭证定义 restore 选项。 veleroResourcesBackupName
用于定义 hub 集群资源的 restore 选项(Applications
、Policy
及其他 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-acm
的restore.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 namespace: open-cluster-management-backup spec: veleroManagedClustersBackupName: latest veleroCredentialsBackupName: latest veleroResourcesBackupName: latest
Note:当来自受管集群备份的 acm-managed-clusters
备份被恢复到另外一个 hub 集群时,只有 Hive API 创建的受管集群会自动连接到新的 hub 集群。所有其他受管集群都处于 Pending Import
状态,且必须重新导入到新的 hub 集群中。如需更多信息,请参阅恢复导入的受管集群。
1.1.5.2. 将数据恢复到初始主 hub
当您需要恢复集群中的备份数据时,请创建一个新集群,而不是使用主 hub 集群,或使用在恢复操作前创建用户资源的 hub 集群。在 hub 集群恢复操作中,您可以将 hub 集群备份恢复配置为清理现有资源,如果这些资源不是正在恢复的备份数据的一部分。恢复会清理之前备份创建的资源,但不会清理用户资源。因此,在此 hub 集群上用户创建的资源不会被清理,因此此 hub 集群上的数据不会反映恢复的资源可用的数据。
灾难恢复测试,如果您只验证被动 hub 上的恢复操作,然后重新使用主 hub 集群,您可以使用主 hub 集群作为被动集群。在这个恢复测试场景中,您只测试 hub 备份场景。不要使用主 hub 集群创建新资源。相反,备份数据已从主 hub 集群临时移到 passive hub 集群。如果您将所有资源恢复到此 hub 集群,您可以使初始主 hub 集群再次成为主 hub 集群。此操作运行后恢复操作,它将受管集群移到此 hub 集群。
1.1.5.3. 准备新的 hub 集群
当您需要在 hub 集群上恢复备份数据时,请创建一个新的 hub 集群,而不是使用主 hub 集群,或之前在恢复操作前创建资源的 hub 集群。
在灾难恢复场景中,当将备份恢复到被动 hub 集群时,您希望一个 hub 集群与灾难过程中失败的 hub 集群相同。您不需要任何其他用户资源,如应用程序、策略和额外的受管集群。
当您恢复此 hub 集群上的备份时,如果您有由此 hub 集群管理的受管集群,恢复操作可能会分离它们并删除其集群资源。恢复操作会进行清理不是恢复备份一部分的资源,使此 hub 集群中的内容与初始 hub 集群相同。在这种情况下,您可能会丢失用户数据,因为受管集群工作负载由 detach 操作删除。
在新 hub 集群上运行恢复操作前,您需要手动配置 hub 集群,并在初始 hub 集群上安装相同的 Operator。您必须在与初始 hub 集群相同的命名空间中安装 Red Hat Advanced Cluster Management Operator,创建 DataProtectionApplication 资源,然后连接到之前备份了数据的同一存储位置。
对 Red Hat Advanced Cluster Management Operator 创建的 MultiClusterHub
资源使用与初始 hub 集群上的配置相同,包括对 MultiClusterEngine
资源的任何更改。
例如,如果初始 hub 集群安装了任何其他 Operator,如 Ansible Automation Platform、Red Hat OpenShift GitOps、cert-manager
,则必须在运行恢复操作前安装它们。这样可确保配置新的 hub 集群与初始 hub 集群相同。
1.1.5.4. 在恢复后清理 hub 集群
如果使用当前恢复的备份更改了,Velero 会更新现有资源。Velero 不会清理 delta 资源,这些资源是由以前的恢复创建的资源,而不是当前恢复的备份的一部分。这限制了在新 hub 集群上恢复 hub 集群数据时可以使用的情况。除非恢复只应用一次,否则您无法可靠地使用新的 hub 集群作为被动配置。hub 集群中的数据没有反映恢复的资源可用的数据。
为解决这个限制,当创建 Restore.cluster.open-cluster-management.io
资源时,备份 Operator 会运行一个清理 hub 集群的 post 恢复操作。该操作会删除之前不是由 Red Hat Advanced Cluster Management 恢复(不是当前恢复的备份的一部分)创建的资源。
后恢复清理使用 cleanupBeforeRestore
属性来识别要清理的对象子集。您可以使用以下选项进行后恢复清理:
-
None
: 不需要清理,只开始 Velero 恢复。在新 hub 集群中使用None
。 -
CleanupRestored
:清理之前由以前 Red Hat Advanced Cluster Management 恢复创建的所有资源,这些资源不是当前恢复的备份的一部分。 CleanupAll
:清理 hub 集群上可能成为 Red Hat Advanced Cluster Management 备份的一部分的所有资源,即使它们没有因为恢复操作而创建。这在恢复操作启动前在 hub 集群上创建额外内容时使用。最佳实践:避免使用
CleanupAll
选项。仅将它用作最后的手段,且需要非常小心。除了之前恢复的备份创建的资源外,CleanupAll
还会清理用户创建的 hub 集群上的资源。反之,使用CleanupRestored
选项来防止在 hub 集群指定为灾难场景的被动候选时更新 hub 集群内容。使用干净的 hub 集群作为被动集群。
备注:
-
如果恢复的备份没有资源,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.1.5.5. 在检查备份时恢复被动资源
使用 restore-passive-sync
示例恢复被动数据,同时继续检查新备份是否可用并自动恢复它们。要自动恢复新的备份,您必须将 syncRestoreWithNewBackups
参数设置为 true
。您还必须仅恢复最新的被动数据。您可以在本节末尾找到示例示例。
将 VeleroResourcesBackupName
和 VeleroCredentialsBackupName
参数设置为 latest
,VeleroManagedClustersBackupName
参数为 skip
。当将 VeleroManagedClustersBackupName
设置为 latest
后,受管集群会在新的 hub 集群中激活,现在是主 hub 集群。
当激活的受管集群变为主 hub 集群时,恢复资源被设置为 Finished
,并且 syncRestoreWithNewBackups
会被忽略,即使设置为 true
。
默认情况下,当 syncRestoreWithNewBackups
设为 true
时,控制器会每 30 分钟检查新的备份。如果找到新的备份,它会恢复备份的资源。您可以通过更新 restoreSyncInterval
参数来更改检查的持续时间。
如果要在恢复操作完成后再次运行相同的恢复操作,您必须创建一个具有相同 spec
选项的新 restore.cluster.open-cluster-management.io
资源。
例如,请查看以下资源每 10 分钟检查备份:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm-passive-sync namespace: open-cluster-management-backup 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.1.5.6. 恢复被动资源
使用 restore-acm-passive
示例在被动配置中恢复 hub 集群资源。被动数据是备份数据,如 secret、ConfigMap、应用程序、策略以及所有受管集群自定义资源,它不在受管集群和 hub 集群之间激活连接。备份资源通过凭证备份和恢复资源在 hub 集群上恢复。
请参见以下示例:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm-passive namespace: open-cluster-management-backup spec: cleanupBeforeRestore: CleanupRestored veleroManagedClustersBackupName: skip veleroCredentialsBackupName: latest veleroResourcesBackupName: latest
1.1.5.7. 恢复激活资源
在恢复被动 hub 集群上的激活数据前,请关闭创建备份的之前的 hub 集群。如果主 hub 集群仍在运行,它会尝试根据在此 hub 集群上运行的协调流程,尝试使用不再可用的受管集群。
当您希望 hub 集群管理集群时,请使用 restore-acm-passive-activate
示例。在这种情况下,假设其它数据已在使用被动资源的 hub 集群上恢复。
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm-passive-activate namespace: open-cluster-management-backup spec: cleanupBeforeRestore: CleanupRestored veleroManagedClustersBackupName: latest veleroCredentialsBackupName: skip veleroResourcesBackupName: skip
根据您如何恢复被动资源,您有一些选项来恢复激活资源:
-
如果您使用
restore-acm-passive-sync cluster.open-cluster-management.io
资源,如 Restore passive resources while checking for backups to restore passive data 部分所述,将veleroManagedClustersBackupName
值更新为latest
。因此,受管集群资源和restore-acm-passive-sync
资源会被恢复。 - 如果您将被动资源恢复为一个时间操作,或者还没有恢复任何资源,选择恢复所有资源,如 恢复所有资源部分所述。
1.1.5.8. 恢复受管集群激活数据
当使用 cluster.open-cluster-management.io/backup: cluster-activation
标签时,受管集群激活数据或其他激活数据资源由受管集群备份和 resource-generic 备份存储。当在新的 hub 集群上恢复激活数据时,受管集群由运行恢复的 hub 集群主动管理。请参阅 调度和恢复备份 以了解如何使用 Operator。
1.1.5.9. 恢复所有资源
要恢复所有数据,请使用以下 restore-acm
示例:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm namespace: open-cluster-management-backup spec: cleanupBeforeRestore: None veleroManagedClustersBackupName: latest veleroCredentialsBackupName: latest veleroResourcesBackupName: latest
在 hub 集群中创建 restore.cluster.open-cluster-management.io
资源后,运行以下命令来获取恢复操作的状态:
oc describe -n open-cluster-management-backup restore-acm
1.1.5.10. 恢复导入的受管集群
只有使用 Hive API 与主 hub 集群连接的受管集群会自动连接到新的 hub 集群,其中恢复激活数据。这些集群由 Hive API 在主 hub 集群上创建,使用 Clusters 选项卡中的 Create cluster 按钮或通过 CLI 创建。当激活数据被恢复时,使用 Import cluster 按钮连接到初始 hub 集群的受管集群显示为 Pending Import
,需要在新的 hub 集群中重新导入。
Hive 受管集群可以与新的 hub 集群连接,因为 Hive 将受管集群 kubeconfig
存储在 hub 集群上的受管集群命名空间中。这在新的 hub 集群上备份和恢复。然后,导入控制器使用恢复的配置更新受管集群上的 bootstrap kubeconfig
,该配置仅适用于使用 Hive API 创建的受管集群。导入的集群不可用。
要在恢复操作过程中重新在新 hub 集群上重新连接导入的集群,请在 BackupSchedule
上启用自动导入功能。如需更多信息,请参阅启用自动导入。
1.1.5.11. 使用其他恢复示例
查看以下 YAML 示例以恢复不同类型的备份文件:
恢复所有三种备份资源:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm namespace: open-cluster-management-backup spec: veleroManagedClustersBackupSchedule: latest veleroCredentialsBackupSchedule: latest veleroResourcesBackupSchedule: latest
仅恢复受管集群资源:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm namespace: open-cluster-management-backup 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 namespace: open-cluster-management-backup spec: veleroManagedClustersBackupName: acm-managed-clusters-schedule-20210902205438 veleroCredentialsBackupName: skip veleroResourcesBackupName: skip
备注:
-
如果阶段为
Enabled
或Running
,则restore.cluster.open-cluster-management.io
资源仍然活跃。如果阶段更改为Finished
,则资源运行已完成。恢复操作完成后,您可以在同一 hub 集群中运行另一个恢复操作。 -
一次只能运行一个
restore.cluster.open-cluster-management.io
。
-
如果阶段为
使用带有
velero.io.restore
的高级选项对要恢复的资源进行文件化。将以下示例与velero.io.restore
spec
选项一起使用,只从vb-managed-cls-2
受管集群命名空间中恢复资源,并排除全局MultiCluster
资源:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-filter-sample namespace: open-cluster-management-backup spec: cleanupBeforeRestore: None veleroCredentialsBackupName: latest veleroResourcesBackupName: latest veleroManagedClustersBackupName: latest excludedResources: - ManagedCluster orLabelSelectors: - matchExpressions: - values: - vb-managed-cls-2 key: name operator: In
在创建 Red Hat Advanced Cluster Management 恢复资源时设置以下
velero.io.restore
spec
选项:spec: includedResources includedNamespaces excludedResources excludedNamespaces LabelSelector OrLabelSelector
备注:
-
当您设置任何这些 Velero 恢复过滤器时,将
cleanupBeforeRestore
设置为None
,以避免清理作为恢复备份一部分的 hub 集群资源,但不会因为应用的过滤器被恢复。
-
当您设置任何这些 Velero 恢复过滤器时,将
1.1.5.12. 查看恢复事件
使用以下命令获取有关恢复事件的信息:
oc describe -n open-cluster-management-backup <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
1.1.5.13. 其他资源
- 请参阅 DataProtectionApplication。
- 请参阅使用自动导入 secret 导入集群。
- 请参阅 调度备份。
1.1.6. 使用受管服务帐户自动连接集群
备份控制器使用 Managed Service Account 组件自动将导入的集群连接到新的 hub 集群。Managed Service Account 创建一个令牌,为每个受管集群命名空间中的每个导入的集群备份令牌。该令牌使用 klusterlet-bootstrap-kubeconfig
ClusterRole
绑定,允许自动导入操作使用令牌。klusterlet-bootstrap-kubeconfig
ClusterRole
只能获取或更新 bootstrap-hub-kubeconfig
secret。要了解更多有关受管服务帐户组件的信息,请参阅什么是受管服务帐户?
当新 hub 集群上恢复激活数据时,恢复控制器会运行 post 恢复操作,并查找处于 Pending Import
状态的所有受管集群。如果找到了 Managed Service Account 生成的有效令牌,控制器会使用令牌创建一个 auto-import-secret
。因此,导入组件会尝试重新连接受管集群。如果可以访问集群,则操作可以成功。
1.1.6.1. 启用自动导入
默认情况下,禁用使用 Managed Service Account 组件的自动导入功能。要启用自动导入功能,请完成以下步骤:
通过在
MultiClusterEngine
资源中将managedserviceaccount
enabled
参数设置为true
来启用 Managed Service Account 组件。请参见以下示例:apiVersion: multicluster.openshift.io/v1 kind: MultiClusterEngine metadata: name: multiclusterhub spec: overrides: components: - enabled: true name: managedserviceaccount
通过将
useManagedServiceAccount
参数设置为true
,为BackupSchedule.cluster.open-cluster-management.io
资源启用自动导入功能。请参见以下示例:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm-msa namespace: open-cluster-management-backup spec: veleroSchedule: veleroTtl: 120h useManagedServiceAccount: true
默认令牌有效期持续时间被设置为
veleroTtl
值的两倍,以提高令牌对整个生命周期存储令牌的所有备份的几率。在某些情况下,您可能需要通过为可选的managedServiceAccountTTL
属性设置值来控制令牌的有效时长。如果您需要为生成的令牌更新默认令牌过期时间,请谨慎使用
managedServiceAccountTTL
。从默认值更改令牌过期时间可能会导致生成带有令牌集的备份,在备份生命周期中过期。因此,导入功能不适用于受管集群。重要 :除非需要控制令牌的有效时长,否则不要使用
managedServiceAccountTTL
。有关使用
managedServiceAccountTTL
属性的示例:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm-msa namespace: open-cluster-management-backup spec: veleroSchedule: veleroTtl: 120h useManagedServiceAccount: true managedServiceAccountTTL: 300h
启用自动导入功能后,备份组件通过创建以下内容开始处理导入的受管集群:
-
名为
managed-serviceaccount
的ManagedServiceAddon
。 -
名为
auto-import-account
的ManagedServiceAccount
。 -
每个
ManagedServiceAccount
的ManifestWork
,用于为受管集群上的ManagedServiceAccount
令牌设置klusterlet-bootstrap-kubeconfig
RoleBinding
。
只有在创建 Managed Service Account 时可以访问受管集群时,才会创建令牌,否则在受管集群可用后它会被创建。
1.1.6.2. 自动导入注意事项
以下场景可能会阻止受管集群在迁移到新 hub 集群时被自动导入:
-
在没有
ManagedServiceAccount
令牌的情况下运行 hub 备份时,例如在受管集群无法访问时创建ManagedServiceAccount
资源时,备份不包含自动导入受管集群的令牌。 -
如果
auto-import-account
secret 令牌有效并且已备份,但在备份的可用令牌已过期时运行恢复操作,则自动导入操作会失败。restore.cluster.open-cluster-management.io
资源会为每个受管集群报告无效的令牌问题。 因此在恢复时创建的
auto-import-secret
使用ManagedServiceAccount
令牌连接到受管集群,受管集群还必须提供 kubeapiserver
信息。apiserver
必须在ManagedCluster
资源中设置。请参见以下示例:apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: managed-cluster-name spec: hubAcceptsClient: true leaseDurationSeconds: 60 managedClusterClientConfigs: url: <apiserver>
当在 hub 集群中导入集群时,只会在 OpenShift Container Platform 集群中自动设置
apiserver
。您必须在其他类型的受管集群中手动设置apiserver
,如 EKS 集群,否则自动导入功能会忽略集群。因此,当您将其移到恢复 hub 集群时,集群会处于Pending Import
状态。-
如果备份调度在
ManagedServiceAccount
secret 上设置了备份标签前运行,则ManagedServiceAccount
secret 可能不包含在备份中。ManagedServiceAccount
secret 在创建时没有设置集群open-cluster-management.io/backup
标签。因此,备份控制器定期在受管集群命名空间下搜索ManagedServiceAccount
secret,并在未找到时添加备份标签。
1.1.6.3. 禁用自动导入
您可以通过在 BackupSchedule
资源中将 useManagedServiceAccount
参数设置为 false
来禁用自动导入集群功能。请参见以下示例:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm-msa namespace: open-cluster-management-backup spec: veleroSchedule: veleroTtl: 120h useManagedServiceAccount: false
默认值为 false
。将值设为 false
后,备份 Operator 会删除所有创建的资源,包括 ManagedServiceAddon
、ManagedServiceAccount
和 ManifestWork
。删除资源会删除 hub 集群和受管集群中的自动导入令牌。
1.1.6.4. 其他资源
- 请参阅什么是受管服务帐户? 以了解更多有关受管服务帐户组件的信息。
- 使用受管服务帐户返回到自动连接集群。
1.1.7. 验证备份或恢复配置
当在 MultiClusterHub
资源中将 cluster-backup
选项设置为 true
时,multicluster engine operator 会安装集群备份和恢复名为 cluster-backup-chart
的 operator Helm chart。然后,此图会安装 backup-restore-enabled
和 backup-restore-auto-import
策略。使用这些策略查看有关备份和恢复组件问题的信息。
注: hub 集群由 作为 local-cluster
自动导入和自我管理。如果您通过将 MultiClusterHub
资源上的 disableHubSelfManagement
设置为 true
来禁用自我管理,则 backup-restore-enabled
策略不会放置在 hub 集群中,策略模板不会生成任何报告。
如果 hub 集群由全局 hub 集群管理,或者安装在受管集群实例上,则 self-management 选项可能会通过将 disableHubSelfManagement
设置为 true
来禁用。在这个实例中,您仍然可以在 hub 集群上启用 backup-restore-enabled
策略。在代表本地集群的 ManagedCluster
资源中设置 is-hub=true
标签。
backup-restore-enabled
策略包括一组用于检查以下限制的模板:
OADP 频道验证
-
当您在
MultiClusterHub
上启用备份组件时,集群备份和恢复 Operator Helm chart 可以在open-cluster-management-backup
命名空间中自动安装 OADP Operator。您还可以在命名空间中手动安装 OADP operator。 -
为手动安装选择的
OADP-channel
必须匹配或超过 Red Hat Advanced Cluster Management 备份和恢复 Operator Helm Chart 版本。 -
由于 OADP Operator 和 Velero 自定义资源定义(CRD)
是集群范围的
,所以您无法在同一集群中有多个版本。您必须在open-cluster-management-backup
命名空间和任何其他命名空间中安装相同的版本。 使用以下模板来检查可用性并验证 OADP 安装:
-
OADP
-operator-exists
:使用此模板验证 OADP operator 是否安装在open-cluster-management-backup
命名空间中。 -
OADP
-channel-validation
:使用此模板来确保open-cluster-management-backup
命名空间中的 OADP operator 版本与 Red Hat Advanced Cluster Management 备份和恢复 Operator 设置的版本匹配或超过。 -
custom-oadp-channel-validation
:使用此模板检查其他命名空间中的 OADP operator 是否与open-cluster-management-backup
命名空间中的版本匹配。
-
OADP
-
当您在
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
的定义,请参阅 防止备份冲突。
BackupSchedule
和恢复状态验证-
acm-backup-phase-validation
模板检查当前集群中是否存在BackupSchedule.cluster.open-cluster-management.io
,则检查状态为Failed
或Empty
状态。这样可确保如果此集群是主 hub 集群,并正在生成备份,则BackupSchedule.cluster.open-cluster-management.io
状态是健康。 -
如果当前集群中存在
Restore.cluster.open-cluster-management.io
,则相同的模板会检查当前集群中没有处于Failed
或Empty
状态的状态。这样可确保如果这个集群是二级 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
模板会在调度运行时报告警告并备份正在进行。
-
备份调度在主 hub 集群上生成备份
-
backup-schedule-cron-enabled
策略模板通知 hub 集群管理员主 hub 集群没有创建新的备份。策略显示BackupSchedule.cluster.open-cluster-management.io
资源在主 hub 集群中被禁用,或者无法创建调度的备份。 -
如果主 hub 集群上的备份调度没有生成新的备份,则
backup-schedule-cron-enabled
策略模板会处于违反状态。如果
BackupSchedule
不存在,将暂停,或者更新BackupSchedule
cron job 属性以及运行增加备份的时间,会出现这种情况。该模板违反了,直到创建新的备份集为止。 模板验证以以下方式工作:
-
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 作业生成备份。
-
-
backup-restore-auto-import
策略包括一组用于检查以下限制的模板:
自动导入 secret 验证
-
auto-import-account-secret
模板检查ManagedServiceAccount
secret 是否在local-cluster
以外的受管集群命名空间中创建。备份控制器定期扫描导入的受管集群。发现受管集群后,备份控制器会在受管集群命名空间中创建ManagedServiceAccount
资源。此过程会在受管集群中启动令牌创建。但是,如果此操作无法访问受管集群,则ManagedServiceAccount
无法创建令牌。例如,如果受管集群正在休眠,则无法创建令牌。因此,如果在此期间执行 hub 备份,则备份缺少自动导入受管集群的令牌。
-
自动导入备份标签验证
-
auto-import-backup-label
模板验证local-cluster
以外的受管集群命名空间中是否存在ManagedServiceAccount
secret。如果模板找到ManagedServiceAccount
secret,则模板会在 secret 上强制执行cluster.open-cluster-management.io/backup
标签。该标签对于在 Red Hat Advanced Cluster Management 备份中包含ManagedServiceAccount
secret 至关重要。
-
1.1.7.1. 使用服务器端加密保护数据
服务器端加密是应用程序或服务的数据加密,在存储位置接收数据。在传输过程中,备份机制本身不会加密数据(因为它会前往备份存储位置),或其他人(同时存储在备份存储位置的磁盘上)。它依赖于对象和快照系统中的原生机制。
最佳实践 :使用可用的备份存储服务器端加密数据。备份包含资源,如在 hub 集群外存储需要加密的凭证和配置文件。
您可以使用 serverSideEncryption
和 kmsKeyId
参数为存储在 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.1.7.2. 其他资源
- 请参阅备份存储位置 YAML。
- 请参阅 Velero 支持的存储供应商。
- 返回到验证您的备份或恢复配置。
1.1.8. 在恢复过程中保持主 hub 集群活跃
恢复操作通常在灾难发生后发生,主 hub 集群失败。因此,在恢复操作启动时,您无法访问主 hub 集群。
如果要运行灾难恢复测试,且不希望主 hub 集群在测试过程中停止,请在 hub 集群恢复期间和之后保留主 hub 集群活跃。
如果您在不同 hub 集群上恢复 hub 集群数据时保留主 hub 集群活跃,则初始 hub 集群可以访问受管集群。因此,两个 hub 集群都争用受管集群。如果初始 hub 集群控制受管集群,则您在恢复的 hub 集群上进行的任何策略或应用程序更改可能无法撤消。
继续阅读,了解如何在恢复操作期间和之后使主 hub 集群保持活跃状态。
1.1.8.1. 准备主 hub 集群
在运行恢复操作并保持 hub 集群活跃前,您必须准备主 hub 集群。
要准备主 hub 集群,请完成以下步骤:
通过将
paused
属性设为true
来暂停BackupSchedule
资源。请参见以下示例:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm-msa namespace: open-cluster-management-backup spec: veleroSchedule: 0 */1 * * * veleroTtl: 120h useManagedServiceAccount: true paused: true
备注: - 如果您在继续下一步前,不要在主 hub 集群上暂停备份调度,您可以使用 import.open-cluster-management.io/disable-auto-import 注解设置,使用
import.open-cluster-management.io/disable-auto-import
注解设置备份调度,使用 import.open-cluster-management.io/disable-auto-import 注解设置。-
如果您使用
import.open-cluster-management.io/disable-auto-import
注解备份ManagedCluster
资源,则受管集群在新的 hub 集群上恢复备份数据时,受管集群将无法自动导入。
-
如果您使用
使用备份注解标记主 hub 集群资源。完成以下步骤:
-
创建名为
restore-acm.yaml
的文件。 在文件中添加以下内容:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm namespace: open-cluster-management-backup spec: cleanupBeforeRestore: None veleroManagedClustersBackupName: latest veleroCredentialsBackupName: latest veleroResourcesBackupName: latest
运行以下命令应用该文件并运行恢复操作:
oc -f apply restore-acm.yaml
注: 运行
Restore
资源时,如果启用了BackupSchedule
,则会标记要备份的所有 hub 集群资源。资源使用velero.io/backup-name: backupName
标签标记,其中backupName
是主 hub 集群创建的最新备份的名称。因此,任何在主集群中运行的恢复操作通过使用
Restore
资源,将cleanupBeforeRestore
d 设置为CleanupRestored
处理这些资源,如果它们不是最新的备份的一部分,则删除这些资源。
-
创建名为
为受管集群禁用自动导入。
-
在
ManagedCluster
global 资源中为您要移至恢复 hub 集群的所有受管集群设置以下注解。通过设置注解,您可以防止备份 hub 集群在受管集群移至恢复 hub 集群后恢复任何受管集群:
annotations: import.open-cluster-management.io/disable-auto-import: ''
-
在
1.1.8.2. 在新 hub 集群中运行恢复操作
准备主 hub 集群后,在新 hub 集群上运行恢复操作并移动受管集群。受管集群连接到新的 hub 集群,且不会返回到初始 hub 集群,因为备份 hub 集群上现在禁用了自动导入功能。
通过完成以下步骤,在新的 hub 集群中运行恢复操作:
将以下内容添加到
restore-acm.yaml
文件:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm namespace: open-cluster-management-backup spec: cleanupBeforeRestore: None veleroManagedClustersBackupName: latest veleroCredentialsBackupName: latest veleroResourcesBackupName: latest
注: 将
veleroManagedClustersBackupName
设置为最新
恢复受管集群并将其与二级 hub 集群连接。运行以下命令应用该文件并运行恢复操作:
oc -f apply restore-acm.yaml
1.1.8.3. 清理备份 hub 集群中的受管集群资源
在恢复并成功连接到新的 hub 集群后,从初始备份 hub 集群中清理受管集群资源。如果要在恢复测试完成后将数据恢复到备份,请跳过清理资源
要从备份 hub 集群清理受管集群,请完成以下步骤:
-
在删除
ManagedCluster
全局资源前,请确保主 hub 上的受管集群状态为Unknown
。如果状态不是Unknown
,则您的工作负载将从受管集群卸载。 -
决定您要删除
ManagedCluster
全局资源。这样做会删除受管集群命名空间。 -
使用恢复操作,从备份 hub 集群中删除您移至新 hub 集群的受管集群的
ManagedCluster
全局资源。
重要:
-
在删除
ManagedCluster
全局资源前,请确保主 hub 上的受管集群状态为Unknown
。如果状态不是Unknown
,则您的工作负载将从受管集群卸载。 -
删除
ManagedCluster
全局资源也会删除受管集群命名空间。
1.1.9. 备份和恢复高级配置
您可以通过查看以下部分来进一步配置备份和恢复:
1.1.9.1. 资源请求和限值自定义
最初安装 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
1.1.9.2. 其他资源
-
请参阅 Red Hat OpenShift Container Platform 文档中的 Default Velero 云供应商插件 主题,以了解更多有关
DataProtectionApplication
参数的信息。 - 如需有关集群使用情况 备份和恢复 CPU 和内存要求的更多详情,请参阅 OpenShift Container Platform 文档中的配置主题的 CPU 和内存要求。
1.1.10. 使用现有 hub 集群的约束作为恢复 hub 集群
如果您使用现有 hub 集群作为在恢复操作前创建的资源的恢复 hub 集群,您必须了解以下限制:
- 现有受管集群在恢复过程过程中被分离。
- 恢复 hub 集群上具有比备份 hub 集群更多的资源。
1.1.10.1. 现有受管集群在恢复过程过程中被分离
如果您计划用于恢复操作的 hub 集群已管理集群,并且运行 restore 操作,并将 cleanupBeforeRestore
d 设置为 CleanupRestored
,则预期以下结果:
-
如果
ManagedCluster
资源由恢复的备份创建,则资源会设置velero.io/backup-name: backupName
标签注解。如果用户运行恢复操作并使用cleanupBeforeRestore=CleanupRestored
选项,受管集群将从 hub 集群分离,并在这些受管集群中清理工作负载。 -
如果用户创建了
ManagedCluster
资源,则资源没有设置velero.io/backup-name: backupName
标签注解。如果您运行恢复操作并使用cleanupBeforeRestore=CleanupRestored
选项,则不会清理受管集群资源,即使资源不是当前恢复的备份的一部分。
1.1.10.2. 恢复 hub 集群的资源比备份 hub 集群更多
当使用较早用户创建的数据恢复 hub 集群时,对于恢复操作将 cleanupBeforeRestore
d 设置为 CleanupRestored
,则恢复 hub 集群的资源与主 hub 集群的资源不匹配。用户数据包括以下资源: 策略
、应用程序
、凭证
或用户定义的任何自定义资源。不会清理资源,因为资源由用户创建,而不是由早期备份创建。
如果要将现有 hub 集群用于恢复 hub 集群配置,并期望 hub 集群在恢复完成后与备份 hub 集群具有相同的内容,请标记您要成为 hub 集群备份的任何资源。如需更多信息,请参阅 标记资源。
1.1.11. 标记资源
在恢复 hub 集群上标记用户创建的资源,以使用现有 hub 集群作为恢复集群。这有助于确保您在恢复 hub 集群和备份 hub 集群之间具有相同的内容。
当您将现有 hub 集群用于恢复 hub 集群配置时,请使用 velero.io/backup-name: backupName
标签注解标记您要成为 hub 集群备份的任何资源。使用 Velero 注解标记资源,将它们标记为之前恢复生成的。
1.1.11.1. 前提条件
- 确保了解使用现有 hub 集群作为在恢复操作前创建的资源的恢复 hub 集群的约束。请参阅使用现有 hub 集群作为恢复 hub 集群的限制。
-
在恢复 hub 集群中,更新
DataProtectionApplication
资源,并将存储位置设置为一个新的临时位置。您不想创建备份,用于在与备份 hub 集群相同的存储位置标记恢复 hub 集群资源。 - 在标记资源前,请确保将存储位置设置为与备份 hub 集群不同的位置。
1.1.11.2. 使用 velero 标签标记资源
要使用 velero.io/backup-name: backupName
标签在恢复 hub 集群上标记用户创建的资源,请完成以下步骤:
使用以下 YAML 创建
BackupSchedule
资源来生成包含所有 hub 集群资源的备份:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm-msa namespace: open-cluster-management-backup spec: veleroSchedule: 0 */1 * * * veleroTtl: 120h useManagedServiceAccount: true paused: false
-
验证
BackupSchedule
创建了 hub 集群备份资源,且资源状态为Completed
。 通过在
schedule-acm-msa
上设置属性BackupSchedule
paused=true
来暂停 BackupSchedule 调度并停止生成备份。注: 如果启用了
BackupSchedule
,则无法在 hub 集群上运行恢复操作。使用以下 YAML 运行恢复操作:
kind: Restore metadata: name: restore-acm namespace: open-cluster-management-backup spec: cleanupBeforeRestore: None veleroManagedClustersBackupName: latest veleroCredentialsBackupName: latest veleroResourcesBackupName: latest excludedResources: 1 - ManagedCluster excludedNamespaces: 2 - managed-cls-1 - managed-cls-2 - managed-cls-n
Operator 会通过作为 hub 集群备份一部分的每个资源,并使用 velero.io/backup-name: backupName
标记,其中 backupName
是最新备份的名称。
标记资源后,您可以使用 hub 集群作为恢复集群。现在,您可以通过更新 DataProtectionApplication
存储位置来指向备份 hub 集群的存储位置,以便您可以运行使用 hub 集群备份资源的恢复操作,从主 hub 集群恢复数据。
所有恢复 hub 集群资源都使用 velero.io/backup-name 标签标记
,因此 hub 集群会显示早期恢复生成的。因此,在使用 cleanupBeforeRestore
选项设置为 CleanupRestored
时,您在现有 hub 集群上运行的恢复操作都会清理不是恢复的备份一部分的数据。
重要:
-
如果您在恢复 hub 集群上有一个没有恢复备份一部分的恢复操作创建的受管集群,请不要使用 cleanupBeforeRestore 选项的恢复操作,将
cleanupBeforeRestore
d 设置为CleanupRestored
。否则,恢复 hub 集群上的受管集群会从 hub 集群分离,受管集群资源会被删除。 当恢复 hub 集群中数量超过备份 hub 集群时,您可以在以下情况下使用现有 hub 集群作为恢复 hub 集群:
- 此恢复 hub 集群上没有受管集群。
- 恢复 hub 集群上有受管集群,您不需要恢复的 hub 集群用户数据与恢复的备份的可用数据相同。
- 来自恢复 hub 集群的受管集群的名称与备份 hub 集群中的任何受管集群名称都不冲突。
1.1.12. 恢复后返回到初始 hub 集群
在这种情况下,通过模拟灾难来运行灾难恢复测试,使主 hub 集群无法使用,需要在新的 hub 集群上恢复 hub 集群数据。在此模拟中,备份数据恢复到新的 hub 集群,您必须验证所有数据是否已成功恢复。
完成所有所需的测试后,使用主 hub 集群作为活跃 hub 集群返回初始 hub 集群。要做到这一点,将数据恢复到初始 hub 集群。此操作称为受控的恢复操作,因为您可以控制恢复操作的时间。您可以运行任何必要的步骤来准备主 hub 集群,以便在完成灾难恢复测试后重复使用 hub 集群。
1.1.12.1. 前提条件
要为恢复操作准备备份 hub 集群并运行恢复,请完成以下文档: 在恢复过程中保持主 hub 集群处于活动状态。
1.1.12.2. 将新 hub 集群设置为活跃 hub 集群
要开始模拟,您必须通过完成以下步骤使新的 hub 集群设置为活跃 hub 集群:
- 在新 hub 集群上运行恢复操作,使其活跃 hub 集群。
- 要验证受管集群现在是否已连接到新的 hub 集群,请从集群控制台检查受管集群的状态。
- 在新 hub 集群上运行灾难恢复模拟测试。
1.1.12.3. 返回到主 hub 集群
在灾难恢复测试完成后,您可以返回到主 hub 集群,并使其成为管理集群机的活跃 hub 集群。要做到这一点,请完成以下部分以返回到主集群:
1.1.12.3.1. 在恢复 hub 集群中创建备份
要将数据恢复到初始 hub 集群,请完成以下步骤在恢复 hub 集群上创建一个备份:
在恢复 hub 集群中,应用以下资源:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm-msa namespace: open-cluster-management-backup spec: veleroSchedule: "0 */1 * * *" veleroTtl: 120h useManagedServiceAccount: true paused: false
-
确保生成 Red Hat Advanced Cluster Management 备份并具有
Completed
状态。
1.1.12.3.2. 为移动准备恢复 hub 集群
要准备恢复 hub 集群以返回初始 hub 集群,在恢复 hub 集群中完成以下步骤:
-
通过在
schedule-acm-msa BackupSchedule
资源上设置paused=true
属性来暂停备份调度。 -
要确保
ManagedCluster
资源在移至主 hub 集群后不会重新连接到初始 hub 集群,请将import.open-cluster-management.io/disable-auto-import: ''
注解添加到所有ManagedCluster
资源。
1.1.12.3.3. 将初始 hub 集群设置为活跃 hub 集群
当您将初始 hub 集群设置为活跃 hub 集群时,所有受管集群都会被初始 hub 集群返回和管理。要做到这一点,请完成以下步骤:
- 进入初始 hub 集群。
通过应用以下恢复资源从二级 hub 集群备份中恢复所有资源:
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Restore metadata: name: restore-acm namespace: open-cluster-management-backup spec: cleanupBeforeRestore: CleanupRestored veleroManagedClustersBackupName: latest veleroCredentialsBackupName: latest veleroResourcesBackupName: latest
注: 当您将
cleanupBeforeRestore
属性设置为CleanupRestored
时,会在所有资源恢复后运行清理操作。此清理操作会删除不是恢复备份一部分的 hub 资源。
1.1.12.3.4. 在主 hub 集群上启用备份调度
现在,初始 hub 集群再次是主 hub 集群,通过完成以下步骤在主 hub 集群上启用备份调度:
- 进入主 hub 集群。
应用以下
BackupSchedule
资源:apiVersion: cluster.open-cluster-management.io/v1beta1 kind: BackupSchedule metadata: name: schedule-acm-msa namespace: open-cluster-management-backup spec: veleroSchedule: "0 */1 * * *" veleroTtl: 120h useManagedServiceAccount: true paused: false
注: 第二个 hub 集群可以
在主动 - 被动配置中
再次用作二级 hub 集群。
1.2. VolSync 持久性卷复制服务
VolSync 是一种 Kubernetes 操作器,支持异步复制集群中的持久性卷,或者在集群中使用存储类型不兼容进行复制的集群间复制。它使用容器存储接口(CSI)来克服兼容性限制。在您的环境中部署 VolSync Operator 后,您可以使用它来创建和维护持久数据的副本。VolSync 只能在支持的 Red Hat OpenShift Container Platform 集群上复制持久性卷声明。
重要: VolSync 只支持复制带有 volumeMode
的 Filesystem
的持久性卷声明。如果您没有选择 volumeMode
,则默认为 Filesystem
。
1.2.1. 使用 VolSync 复制持久性卷
您可以使用三种支持的方法来复制带有 VolSync 的持久性卷,这取决于您拥有的同步位置数量:rsync, rsync-tls, restic 或 Rclone。
1.2.1.1. 先决条件
在集群上安装 VolSync 前,您必须满足以下要求:
- 在受支持的 Red Hat Advanced Cluster Management hub 集群中配置了 Red Hat OpenShift Container Platform 环境
- 至少两个用于同一 Red Hat Advanced Cluster Management hub 集群的受管集群
-
使用 VolSync 配置的集群之间的网络连接。如果集群不在同一网络中,您可以配置 Submariner multicluster networking 和 service discovery,并使用
ServiceType
的ClusterIP
值来联网集群,或使用带有LoadBalancer
值的ServiceType
的负载均衡器。 - 您用于源持久性卷的存储驱动程序必须与 CSI 兼容,并能够支持快照。
1.2.1.2. 在受管集群上安装 VolSync
要启用 VolSync 将一个集群上的持久性卷声明复制到另一个集群的持久性卷声明,您必须在源和目标受管集群中安装 VolSync。
VolSync 不创建自己的命名空间,因此它与其他 OpenShift Container Platform all-namespace operator 相同的命名空间中。对 VolSync 的 Operator 设置所做的任何更改也会影响同一命名空间中的其他 Operator,例如,如果您更改为手动批准频道更新。
您可以使用两种方式之一在环境中的两个集群中安装 VolSync。您可以为 hub 集群中的每个受管集群添加标签,也可以手动创建并应用 ManagedClusterAddOn
,如以下部分所述:
1.2.1.2.1. 使用标签安装 VolSync
通过添加标签在受管集群中安装 VolSync。
从 Red Hat Advanced Cluster Management 控制台完成以下步骤:
-
从 hub 集群控制台的
Clusters
页面中选择其中一个受管集群来查看其详情。 在 Labels 字段中,添加以下标签:
addons.open-cluster-management.io/volsync=true
VolSync 服务 pod 已安装在受管集群上。
- 为其他受管集群添加相同的标签。
在每个受管集群中运行以下命令,以确认已安装了 VolSync Operator:
oc get csv -n openshift-operators
安装 VolSync 时,会列出该 Operator。
-
从 hub 集群控制台的
使用命令行界面完成以下步骤:
- 在 hub 集群中启动一个命令行会话。
输入以下命令为第一个集群添加标签:
oc label managedcluster <managed-cluster-1> "addons.open-cluster-management.io/volsync"="true"
将
managed-cluster-1
替换为其中一个受管集群的名称。输入以下命令在第二个集群中添加标签:
oc label managedcluster <managed-cluster-2> "addons.open-cluster-management.io/volsync"="true"
将
managed-cluster-2
替换为其他受管集群的名称。应该在每个对应受管集群的命名空间中自动创建一个
ManagedClusterAddOn
资源。
1.2.1.2.2. 使用 ManagedClusterAddOn 安装 VolSync
要通过手动添加 ManagedClusterAddOn
在受管集群中安装 VolSync,请完成以下步骤:
在 hub 集群中,创建一个名为
volsync-mcao.yaml
的 YAML 文件,其中包含类似以下示例的内容:apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: volsync namespace: <managed-cluster-1-namespace> spec: {}
将
managed-cluster-1-namespace
替换为其中一个受管集群的命名空间。此命名空间与受管集群的名称相同。注: 名称必须是
volsync
。输入类似以下示例的命令,将该文件应用到您的配置中:
oc apply -f volsync-mcao.yaml
为其他受管集群重复上述步骤。
应该在每个对应受管集群的命名空间中自动创建一个
ManagedClusterAddOn
资源。
1.2.1.2.3. 更新 VolSync ManagedClusterAddOn
根据您使用的 Red Hat Advanced Cluster Management 版本,您可能需要更新 VolSync 版本。要更新 VolSync ManagedClusterAddOn
资源,请完成以下步骤:
在
ManagedClusterAddOn
资源中添加以下注解:annotations: operator-subscription-channel: stable-0.9
-
定义您要从其中部署 VolySync 的
operator-subscription-channel
。 -
进入
ManagedClusterAddOn
资源并确认包含您选择的operator-subscription-channel
,来验证您更新了 Volsync 版本。
1.2.1.3. 配置 Rsync-TLS 复制
您可以使用 Rsync-TLS 复制创建持久性卷的 1:1 异步复制。您可以使用基于 Rsync-TLS 的复制进行灾难恢复,或者将数据发送到远程站点。使用 Rsync-TLS 时,Volis 在 stunnel 提供的 TLS 保护隧道中使用 Rsync 来同步数据。如需更多信息,请参阅 stunnel 文档。
以下示例演示了如何使用 Rsync-TLS 方法配置。有关 Rsync-TLS 的更多信息,请参阅 VolSync 文档中的使用情况。
1.2.1.3.1. 在受管集群中配置 Rsync-TLS 复制
对于基于 Rsync-TLS 的复制,请在源和目标集群上配置自定义资源。自定义资源使用 address
值将源连接到目的地,以及 stunnel 提供的 TLS 保护隧道,以确保传输的数据安全。
参阅以下信息和示例,将 Rsync-TLS 复制的配置从使用 source-ns
命名空间中的 source
集群中的持久性卷声明,改为使用 destination-ns
命名空间中的 destination
集群上的持久性卷声明。在需要时替换值:
配置您的目标集群。
在目标集群中运行以下命令以创建命名空间:
oc create ns <destination-ns>
将
destination-ns
替换为复制目的地所在的命名空间。创建名为
replication_destination
的新 YAML 文件,并复制以下内容:apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: <destination> namespace: <destination-ns> spec: rsyncTLS: serviceType: LoadBalancer 1 copyMethod: Snapshot capacity: 2Gi 2 accessModes: [ReadWriteOnce] storageClassName: gp2-csi volumeSnapshotClassName: csi-aws-vsc
可选:如果您使用与环境默认值不同的存储类和卷快照类名称,请指定
storageClassName
和volumeSnapshotClassName
参数的值。在目标集群中运行以下命令以创建
replicationdestination
资源:oc create -n <destination-ns> -f replication_destination.yaml
将
destination-ns
替换为目的地所在的命名空间的名称。创建
replicationdestination
资源后,以下参数和值会添加到资源中:参数 值 .status.rsyncTLS.address
用于连接的目标集群的 IP 地址,用于启用源和目标集群进行通信。
.status.rsyncTLS.keySecret
包含与源集群验证连接的 TLS 密钥的 secret 名称。
运行以下命令复制
.status.rsyncTLS.address
的值,以便在源集群中使用:将destination
替换为复制目标自定义资源的名称。将destination-ns
替换为目的地所在的命名空间的名称。ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.address}}` echo $ADDRESS
输出结果类似如下,这适用于 Amazon Web Services 环境:
a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
运行以下命令来复制 secret 的名称:
KEYSECRET=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.keySecret}}` echo $KEYSECRET
将
destination
替换为复制目标自定义资源的名称。将
destination-ns
替换为目的地所在的命名空间的名称。在配置源时,您必须在源集群中输入它。输出应该是 SSH 密钥 secret 文件的名称,该文件可能类似以下名称:
volsync-rsync-tls-destination-name
通过针对目标集群输入以下命令来从目标集群复制密钥 secret:
oc get secret -n <destination-ns> $KEYSECRET -o yaml > /tmp/secret.yaml
将
destination-ns
替换为复制目的地所在的命名空间。输入以下命令在
vi
编辑器中打开 secret 文件:vi /tmp/secret.yaml
在目标集群的 open secret 文件中进行以下更改:
-
将命名空间更改为源集群的命名空间。本例中是
source-ns
。 -
删除所有者引用(
.metadata.ownerReferences
)。
-
将命名空间更改为源集群的命名空间。本例中是
在源集群中,在源集群中输入以下命令来创建 secret 文件:
oc create -f /tmp/secret.yaml
找到您要复制的源持久性卷声明。
注: 源持久性卷声明必须位于 CSI 存储类中。
创建
ReplicationSource
项。在源集群中创建一个名为
replication_source
的新 YAML 文件,并复制以下内容:apiVersion: volsync.backube/v1alpha1 kind: ReplicationSource metadata: name: <source> 1 namespace: <source-ns> 2 spec: sourcePVC: <persistent_volume_claim> 3 trigger: schedule: "*/3 * * * *" #/* rsyncTLS: keySecret: <mykeysecret> 4 address: <my.host.com> 5 copyMethod: Snapshot storageClassName: gp2-csi volumeSnapshotClassName: csi-aws-vsc
- 1
- 将
source
替换为复制源自定义资源的名称。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。 - 2
- 将
source-ns
替换为源所在持久性卷声明的命名空间。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。 - 3
- 将
persistent_volume_claim
替换为源持久性卷声明的名称。 - 4
- 将
mykeysecret
替换为您从目标集群复制到源集群的 secret 名称($KEYSECRET
的值)。 - 5
- 将
my.host.com
替换为您在配置ReplicationDestination
的.status.rsyncTLS.address
字段复制的主机地址。您可以在下一步中找到sed
命令示例。
如果您的存储驱动程序支持克隆,使用
Clone
作为copyMethod
的值,则可能是更精简的复制过程。可选:如果您使用与环境默认值不同的存储类和卷快照类名称,请指定
storageClassName
和volumeSnapshotClassName
参数的值。现在,您可以设置持久性卷的同步方法。
在源集群中,输入以下命令替换
ReplicationSource
对象中的address
和keySecret
的值来修改replication_source.yaml
文件:sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml sed -i "s/<mykeysecret>/$KEYSECRET/g" replication_source.yaml oc create -n <source> -f replication_source.yaml
将
my.host.com
替换为您在配置ReplicationDestination
的.status.rsyncTLS.address
字段复制的主机地址。将
keySecret
替换为您在配置时从ReplicationDestination
的.status.rsyncTLS.keySecret
字段复制的密钥。使用源所在的持久性卷声明的名称替换
source
。注: 您必须在与要复制的持久性卷声明相同的命名空间中创建该文件。
在
ReplicationSource
对象中运行以下命令来验证复制是否完成:oc describe ReplicationSource -n <source-ns> <source>
将
source-ns
替换为源所在持久性卷声明的命名空间。将
source
替换为复制源自定义资源的名称。如果复制成功,输出应类似以下示例:
Status: Conditions: Last Transition Time: 2021-10-14T20:48:00Z Message: Synchronization in-progress Reason: SyncInProgress Status: True Type: Synchronizing Last Transition Time: 2021-10-14T20:41:41Z Message: Reconcile complete Reason: ReconcileComplete Status: True Type: Reconciled Last Sync Duration: 5m20.764642395s Last Sync Time: 2021-10-14T20:47:01Z Next Sync Time: 2021-10-14T20:48:00Z
如果
Last Sync Time
没有列出时间,则复制不会完成。
您有原始持久性卷声明的副本。
1.2.1.4. 配置 Rsync 复制
重要:使用 Rsync-TLS 而不是 Rsync 来提高安全性。通过使用 Rsync-TLS,您可以避免使用复制持久性卷不需要的提升用户权限。
您可以使用 Rsync 复制创建持久性卷的 1:1 异步复制。您可以使用基于 Rsync 的复制进行灾难恢复,或者将数据发送到远程站点。
以下示例演示了如何使用 Rsync 方法配置。
1.2.1.4.1. 在受管集群中配置 Rsync 复制
对于基于 Rsync 的复制,请在源和目标集群上配置自定义资源。自定义资源使用 address
值将源连接到目的地,sshKeys
则用于确保传输的数据安全。
注: 您必须将 address
和 sshKeys
的值从目的地复制到源,因此请在配置源前配置目的地。
本例显示了一个步骤,将 Rsync 复制的配置从使用 source-ns
命名空间中的 source
集群中的持久性卷声明,改为使用 destination-ns
命名空间中的 destination
集群上的持久性卷声明。如果需要,您可以将这些值替换为其他值。
配置您的目标集群。
在目标集群中运行以下命令以创建命名空间:
oc create ns <destination-ns>
将
destination-ns
替换为包含目标持久性卷声明的命名空间的名称。复制以下 YAML 内容,以创建名为
replication_destination.yaml
的新文件:apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: <destination> namespace: <destination-ns> spec: rsync: serviceType: LoadBalancer copyMethod: Snapshot capacity: 2Gi accessModes: [ReadWriteOnce] storageClassName: gp2-csi volumeSnapshotClassName: csi-aws-vsc
注意:
容量
值应与正在复制的持久卷声明的容量匹配。将
destination
替换为复制目的地 CR 的名称。将
destination-ns
替换为目的地所在的命名空间的名称。在本例中,使用
LoadBalancer
的ServiceType
值。负载均衡器服务由源集群创建,以便您的源集群可以将信息传送到不同的目标受管集群。如果您的源和目标位于同一集群中,或者配置了 Submariner 网络服务,则可以使用ClusterIP
作为服务类型。记录配置源集群时要引用的 secret 的地址和名称。storageClassName
和volumeSnapshotClassName
是可选参数。指定您的环境的值,特别是如果您使用与环境默认值不同的存储类和卷快照类名称。在目标集群中运行以下命令以创建
replicationdestination
资源:oc create -n <destination-ns> -f replication_destination.yaml
将
destination-ns
替换为目的地所在的命名空间的名称。创建
replicationdestination
资源后,将以下参数和值添加到资源中:参数 值 .status.rsync.address
用于连接的目标集群的 IP 地址,用于启用源和目标集群进行通信。
.status.rsync.sshKeys
启用保护从源集群到目标集群的数据传输的 SSH 密钥文件的名称。
运行以下命令复制
.status.rsync.address
的值,以便在源集群中使用:ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.address}}` echo $ADDRESS
将
destination
替换为复制目标自定义资源的名称。将
destination-ns
替换为目的地所在的命名空间的名称。输出结果应该类似以下示例,这适用于 Amazon Web Services 环境:
a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
运行以下命令来复制 secret 的名称:
SSHKEYS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.sshKeys}}` echo $SSHKEYS
将
destination
替换为复制目标自定义资源的名称。将
destination-ns
替换为目的地所在的命名空间的名称。在配置源时,您必须在源集群中输入它。输出应该是 SSH 密钥 secret 文件的名称,该文件可能类似以下名称:
volsync-rsync-dst-src-destination-name
通过针对目标集群输入以下命令从目标集群复制 SSH secret:
oc get secret -n <destination-ns> $SSHKEYS -o yaml > /tmp/secret.yaml
将
destination-ns
替换为目标所在持久性卷声明的命名空间。输入以下命令在
vi
编辑器中打开 secret 文件:vi /tmp/secret.yaml
在目标集群的 open secret 文件中进行以下更改:
-
将命名空间更改为源集群的命名空间。本例中是
source-ns
。 -
删除所有者引用(
.metadata.ownerReferences
)。
-
将命名空间更改为源集群的命名空间。本例中是
在源集群中,在源集群中输入以下命令来创建 secret 文件:
oc create -f /tmp/secret.yaml
找到您要复制的源持久性卷声明。
注: 源持久性卷声明必须位于 CSI 存储类中。
创建
ReplicationSource
项。复制以下 YAML 内容,在源集群上创建一个名为
replication_source.yaml
的新文件:apiVersion: volsync.backube/v1alpha1 kind: ReplicationSource metadata: name: <source> namespace: <source-ns> spec: sourcePVC: <persistent_volume_claim> trigger: schedule: "*/3 * * * *" #/* rsync: sshKeys: <mysshkeys> address: <my.host.com> copyMethod: Snapshot storageClassName: gp2-csi volumeSnapshotClassName: csi-aws-vsc
将
source
替换为复制源自定义资源的名称。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。将
source-ns
替换为源所在持久性卷声明的命名空间。有关如何替换此功能的说明,请参阅此流程的第 3-vi 步。将
persistent_volume_claim
替换为源持久性卷声明的名称。使用您从
ReplicationDestination
的.status.rsync.sshKeys
字段复制的密钥替换mysshkeys
。将
my.host.com
替换为您在配置ReplicationDestination
的.status.rsync.address
字段复制的主机地址。如果您的存储驱动程序支持克隆,使用
Clone
作为copyMethod
的值,则可能是更精简的复制过程。storageClassName
和volumeSnapshotClassName
是可选参数。如果您使用与环境默认值不同的存储类和卷快照类名称,请指定这些值。现在,您可以设置持久性卷的同步方法。
在源集群中,输入以下命令替换
ReplicationSource
对象中的address
和sshKeys
的值来修改replication_source.yaml
文件:sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml sed -i "s/<mysshkeys>/$SSHKEYS/g" replication_source.yaml oc create -n <source> -f replication_source.yaml
将
my.host.com
替换为您在配置ReplicationDestination
的.status.rsync.address
字段复制的主机地址。使用您从
ReplicationDestination
的.status.rsync.sshKeys
字段复制的密钥替换mysshkeys
。使用源所在的持久性卷声明的名称替换
source
。注: 您必须在与要复制的持久性卷声明相同的命名空间中创建该文件。
在
ReplicationSource
对象中运行以下命令来验证复制是否完成:oc describe ReplicationSource -n <source-ns> <source>
将
source-ns
替换为源所在持久性卷声明的命名空间。将
source
替换为复制源自定义资源的名称。如果复制成功,输出应类似以下示例:
Status: Conditions: Last Transition Time: 2021-10-14T20:48:00Z Message: Synchronization in-progress Reason: SyncInProgress Status: True Type: Synchronizing Last Transition Time: 2021-10-14T20:41:41Z Message: Reconcile complete Reason: ReconcileComplete Status: True Type: Reconciled Last Sync Duration: 5m20.764642395s Last Sync Time: 2021-10-14T20:47:01Z Next Sync Time: 2021-10-14T20:48:00Z
如果
Last Sync Time
没有列出时间,则复制不会完成。
您有原始持久性卷声明的副本。
1.2.1.5. 配置剩余的备份
基于 restic 的备份将持久性卷的 restic 备份副本复制到在 restic-config.yaml
secret 文件中指定的位置。剩余的备份不会在集群之间同步数据,而是提供数据备份。
完成以下步骤以配置基于剩余的备份:
通过创建类似以下 YAML 内容的 secret 来指定存储备份镜像的存储库:
apiVersion: v1 kind: Secret metadata: name: restic-config type: Opaque stringData: RESTIC_REPOSITORY: <my-restic-repository> RESTIC_PASSWORD: <my-restic-password> AWS_ACCESS_KEY_ID: access AWS_SECRET_ACCESS_KEY: password
将
my-restic-repository
替换为您要存储备份文件的 S3 存储桶存储库的位置。将
my-restic-password
替换为访问存储库所需的加密密钥。如果需要,将
access
和password
替换为您的供应商凭证。如果您需要准备新存储库,请参阅为流程准备新存储库。如果使用这个步骤,请跳过运行
restic init
命令的步骤来初始化存储库。VolSync 在第一个备份过程中自动初始化存储库。重要:当将多个持久性卷声明备份到同一 S3 存储桶时,存储桶的路径对于每个持久性卷声明来说必须是唯一的。每个持久性卷声明都使用单独的
ReplicationSource
备份,每个声明都需要单独的 restic-config secret。通过共享相同的 S3 存储桶,每个
ReplicationSource
具有对整个 S3 存储桶的写入访问权限。通过创建类似以下 YAML 内容的
ReplicationSource
对象来配置备份策略:apiVersion: volsync.backube/v1alpha1 kind: ReplicationSource metadata: name: mydata-backup spec: sourcePVC: <source> trigger: schedule: "*/30 * * * *" #\* restic: pruneIntervalDays: 14 repository: <restic-config> retain: hourly: 6 daily: 5 weekly: 4 monthly: 2 yearly: 1 copyMethod: Clone # The StorageClass to use when creating the PiT copy (same as source PVC if omitted) #storageClassName: my-sc-name # The VSC to use if the copy method is Snapshot (default if omitted) #volumeSnapshotClassName: my-vsc-name
使用您要备份的持久性卷声明替换
source
。将
schedule
值替换为运行备份的频率。这个示例有每 30 分钟的调度。有关设置计划的更多信息,请参阅调度同步。将
PruneIntervalDays
值替换为重新打包数据实例之间经过的天数,以节省空间。修剪操作可在其运行时生成大量 I/O 流量。将
restic-config
替换为在第 1 步中创建的 secret 的名称。将
retain
的值设置为备份镜像的保留策略。最佳实践: 将
Clone
用于CopyMethod
的值,以确保保存点镜像。
注:默认情况下,Restic movers 在没有 root 权限的情况下运行。如果要以 root 用户身份运行 restic movers,请运行以下命令将升级的权限注解添加到您的命名空间。
oc annotate namespace <namespace> volsync.backube/privileged-movers=true
将 <namespace>
替换为您的命名空间的名称。
1.2.1.5.1. 恢复剩余的备份
您可以将复制的数据从其余备份恢复到新的持久性卷声明。最佳实践:仅将一个备份恢复到新的持久性卷声明中。要恢复剩余的备份,请完成以下步骤:
创建新的持久性卷声明,使其包含类似以下示例的新数据:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc-name> spec: accessModes: - ReadWriteOnce resources: requests: storage: 3Gi
将
pvc-name
替换为新持久性卷声明的名称。创建一个
ReplicationDestination
自定义资源,该资源类似以下示例来指定恢复数据的位置:apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: <destination> spec: trigger: manual: restore-once restic: repository: <restic-repo> destinationPVC: <pvc-name> copyMethod: Direct
将
destination
替换为复制目的地 CR 的名称。使用存储源的仓库的路径替换
restic-repo
。使用您要恢复数据的新持久性卷声明的名称替换
pvc-name
。使用现有的持久性卷声明,而不是置备一个新的持久性卷声明。
恢复过程只需要完成一次,本例恢复最新的备份。有关恢复选项的更多信息,请参阅 VolSync 文档中的恢复选项。
1.2.1.6. 配置 Rclone 复制
Rclone 备份通过中间对象存储位置(如 AWS S3)使用 Rclone 将单个持久性卷复制到多个位置。将数据分发到多个位置时非常有用。
完成以下步骤以配置 Rclone 复制:
创建一个类似以下示例的
ReplicationSource
自定义资源:apiVersion: volsync.backube/v1alpha1 kind: ReplicationSource metadata: name: <source> namespace: <source-ns> spec: sourcePVC: <source-pvc> trigger: schedule: "*/6 * * * *" #\* rclone: rcloneConfigSection: <intermediate-s3-bucket> rcloneDestPath: <destination-bucket> rcloneConfig: <rclone-secret> copyMethod: Snapshot storageClassName: <my-sc-name> volumeSnapshotClassName: <my-vsc>
将
source-pvc
替换为复制源自定义资源的名称。将
source-ns
替换为源所在持久性卷声明的命名空间。使用您要复制的持久性卷声明替换
source
。将
schedule
值替换为运行复制的频率。这个示例有每 6 分钟进行一次的调度。这个值必须包括在引号内。如需更多信息,请参阅调度同步。将
intermediate-s3-bucket
替换为 Rclone 配置文件配置部分的路径。将
destination-bucket
替换为您要复制文件的对象存储桶的路径。将
rclone-secret
替换为包含您的 Rclone 配置信息的 secret 名称。将
copyMethod
的值设置为Clone
、Direct
或Snapshot
。这个值指定是否生成点时复制,如果是,则使用什么方法生成它。将
my-sc-name
替换为您要用于点复制的存储类的名称。如果没有指定,则使用源卷的存储类。如果您将
my-vsc
指定为copyMethod
,则将my-vsc
替换为VolumeSnapshotClass
的名称。对于其他类型的copyMethod
,这并不是必需的。创建一个类似以下示例的
ReplicationDestination
自定义资源:apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: database-destination namespace: dest spec: trigger: schedule: "3,9,15,21,27,33,39,45,51,57 * * * *" #/* rclone: rcloneConfigSection: <intermediate-s3-bucket> rcloneDestPath: <destination-bucket> rcloneConfig: <rclone-secret> copyMethod: Snapshot accessModes: [ReadWriteOnce] capacity: 10Gi storageClassName: <my-sc> volumeSnapshotClassName: <my-vsc>
将
schedule
值替换为将复制移到目的地的频率。源和目标的调度必须是偏移的,以允许数据在从目的地拉取前完成复制。这个示例有每 6 分钟的调度,将偏移 3 分钟。这个值必须包括在引号内。有关调度的更多信息,请参阅调度同步。将
intermediate-s3-bucket
替换为 Rclone 配置文件配置部分的路径。将
destination-bucket
替换为您要复制文件的对象存储桶的路径。将
rclone-secret
替换为包含您的 Rclone 配置信息的 secret 名称。将
copyMethod
的值设置为Clone
、Direct
或Snapshot
。这个值指定是否生成点时复制,如果是,则使用什么方法生成它。accessModes
的值指定持久性卷声明的访问模式。有效值为ReadWriteOnce
或ReadWriteMany
。capacity
指定目标卷的大小,它必须足够大来包含传入的数据。将
my-sc
替换为您要用作点时副本的存储类的名称。如果没有指定,则使用系统存储类。如果您将
my-vsc
指定为copyMethod
,则将my-vsc
替换为VolumeSnapshotClass
的名称。对于其他类型的copyMethod
,这并不是必需的。如果没有包括,则使用系统默认VolumeSnapshotClass
。
注:默认情况下,Rclone movers 运行没有 root 权限。如果要以 root 用户身份运行 Rclone movers,请运行以下命令将升级的权限注解添加到您的命名空间。
oc annotate namespace <namespace> volsync.backube/privileged-movers=true
将 <namespace>
替换为您的命名空间的名称。
1.2.1.7. 其他资源
如需更多信息,请参阅以下内容:
- 请参阅为 Rsync-TLS 复制创建 secret,以了解如何为 Rsync-TLS 复制创建自己的 secret。
- 有关 Rsync 的更多信息,请参阅 VolSync 文档中的使用情况。
- 有关 restic 选项的更多信息,请参阅 VolSync 文档中的备份选项。
- 返回到在受管集群上安装 VolSync
1.2.2. 将复制镜像转换为可用的持久性卷声明
您可能需要将复制镜像转换为持久性卷声明来恢复数据。
当您使用 VolumeSnapshot
从 ReplicationDestination
位置复制或恢复 pesent 卷声明时,会创建一个 VolumeSnapshot
。VolumeSnapshot
包含最后一次成功同步的 latestImage
。镜像的副本必须转换为持久性卷声明,然后才能使用它。VolSync ReplicationDestination
卷填充器可用于将镜像副本转换为可用的持久性卷声明。
使用
dataSourceRef
创建一个持久性卷声明,指向要恢复持久性卷声明的ReplicationDestination
。此持久性卷声明填充了VolumeSnapshot
的内容,其内容在ReplicationDestination
自定义资源定义的status.latestImage
设置中指定。以下 YAML 内容显示了一个可能使用的持久性卷声明示例:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> namespace: <destination-ns> spec: accessModes: - ReadWriteOnce dataSourceRef: kind: ReplicationDestination apiGroup: volsync.backube name: <replicationdestination_to_replace> resources: requests: storage: 2Gi
将
pvc-name
替换为您的新持久性卷声明的名称。将
destination-ns
替换为持久性卷声明和ReplicationDestination
所在的命名空间。将
replicationdestination_to_replace
替换为ReplicationDestination
名称。最佳实践:当值至少与初始源持久性卷声明大小相同时,您可以使用不同的值更新
resources.requests.storage
。输入以下命令验证您的持久性卷声明是否在环境中运行:
$ kubectl get pvc -n <destination-ns>
备注:
如果没有 latestImage
,则持久性卷声明会一直处于待处理状态,直到 ReplicationDestination
完成并且快照可用。您可以创建一个 ReplicationDestination
,以及一个同时使用 ReplicationDestination
的持久性卷控制器。持久性卷声明仅在 ReplicationDestination
完成复制和快照可用后启动卷填充过程。您可以在 .status.latestImage
中找到快照。
另外,如果所使用的存储类的 volumeBindingMode
的值为 WaitForFirstConsumer
,则卷填充器会等待持久性卷声明的消费者被填充。当消费者需要访问权限时,如要挂载持久性卷声明的 pod,则卷会被填充。VolSync 卷填充器控制器使用 ReplicationDestination
中的 latestImage
。每次创建持久性卷控制后,每次复制完成后都会更新 latestImage
。
1.2.3. 调度同步
在确定如何启动复制时,从三个选项中选择:始终运行、按计划或手动运行。调度复制是一个经常选择的选项。
Schedule 选项在计划的时间运行复制。调度由 cronspec
定义,因此调度可配置为间隔或特定时间。调度值的顺序为:
"minute (0-59) hour (0-23) day-of-month (1-31) month (1-12) day-of-week (0-6)"
复制将在调度的时间发生时开始。您为此复制选项的设置可能类似以下内容:
spec: trigger: schedule: "*/6 * * * *"
启用其中一种方法后,同步调度会根据您配置的方法运行。
如需了解更多信息和选项,请参阅 VolSync 文档。
1.2.4. VolSync 高级配置
您可以在复制持久性卷时进一步配置 VolSync,如创建自己的 secret。
1.2.4.1. 为 Rsync-TLS 复制创建 secret
源和目标必须具有对 TLS 连接的共享密钥的访问权限。您可以在 keySecret
字段中找到密钥位置。如果您没有在 .spec.rsyncTLS.keySecret
中提供 secret 名称,secret 名称会被自动生成并添加到 .status.rsyncTLS.keySecret
中。
要创建自己的 secret,请完成以下步骤:
secret 使用以下格式:
<id>:<at_least_32_hex_digits>
请参见以下示例:
1:23b7395fafc3e842bd8ac0fe142e6ad1
请参阅以下与上例对应的
secret.yaml
示例:apiVersion: v1 data: # echo -n 1:23b7395fafc3e842bd8ac0fe142e6ad1 | base64 psk.txt: MToyM2I3Mzk1ZmFmYzNlODQyYmQ4YWMwZmUxNDJlNmFkMQ== kind: Secret metadata: name: tls-key-secret type: Opaque