1.3. 备份和恢复 Operator 架构
Operator 定义 BackupSchedule.cluster.open-cluster-management.io
资源,用于设置 Red Hat Advanced Cluster Management 备份计划,以及 restore.cluster.open-cluster-management.io
资源,该资源用于处理和恢复这些备份。Operator 会创建对应的 Velero 资源,并定义备份远程集群和需要恢复的任何其他 hub 集群资源所需的选项。查看以下示意图:
1.3.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"
1.3.2. 在受管集群激活时恢复的资源
当您将 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.3.3. 资源请求和限值自定义
最初安装 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
-
请参阅 Red Hat OpenShift Container Platform 文档中的 默认 Velero 云供应商插件 部分,以了解更多有关
DataProtectionApplication
参数的信息。 - 如需有关备份和恢复 CPU 和内存要求的更多详情,请参阅 OpenShift Container Platform 文档中的配置主题的 CPU 和内存要求。