$ oc api-resources
本文档提供有关 OpenShift API for Data Protection (OADP) 的高级功能和功能的信息。
源集群可能会提供 API 的多个版本,其中一个版本是首选 API 版本。例如,名为 Example
的 API 的源集群可能在 example.com/v1
和 example.com/v1beta2
API 分组中可用。
如果使用 Velero 来备份和恢复此类源集群,则 Velero 仅备份使用其 Kubernetes API 的首选版本的资源版本。
回到上面的示例,如果 example.com/v1
是首选 API,则 Velero 只备份使用 example.com/v1
的资源版本。此外,目标集群需要在其可用 API 资源集中注册 example.com/v1
,以便 Velero 才能在目标集群上恢复资源。
因此,需要生成目标集群上 Kubernetes API 分组版本的列表,以确保首选 API 版本在其可用 API 资源集中注册。
输入以下命令
$ oc api-resources
默认情况下,Velero 仅备份使用 Kubernetes API 首选版本的资源。但是,Velero 还包含一项功能,启用 API 分组版本,可以克服此限制。在源集群上启用后,此功能会导致 Velero 备份集群支持的所有 Kubernetes API 分组版本,而不仅仅是首选版本。版本存储在备份 .tar 文件中后,就可以在目标集群上进行恢复。
例如,名为 Example
的 API 的源集群可能在 example.com/v1
和 example.com/v1beta2
API 分组中可用,其中 example.com/v1
是首选 API。
在未启用“启用 API 分组版本”功能的情况下,Velero 仅备份 Example
的首选 API 分组版本,即 example.com/v1
。启用此功能后,Velero 还将备份 example.com/v1beta2
。
在目标集群上启用“启用 API 分组版本”功能后,Velero 将根据 API 分组版本的优先级顺序选择要恢复的版本。
启用 API 分组版本仍处于测试阶段。 |
Velero 使用以下算法为 API 版本分配优先级,其中 1
为最高优先级
目标集群的首选版本
源集群的首选版本
具有最高 Kubernetes 版本优先级的常用非首选支持版本
OpenShift API for Data Protection (OADP) 旨在备份和恢复同一 OpenShift Container Platform 集群中的应用程序数据。容器迁移工具包 (MTC) 旨在将容器(包括应用程序数据)从一个 OpenShift Container Platform 集群迁移到另一个集群。
您可以使用 OADP 将应用程序数据从一个 OpenShift Container Platform 集群备份到另一个集群并进行恢复。但是,这样做比使用 MTC 或使用 OADP 在同一集群上进行备份和恢复要复杂。
为了成功使用 OADP 将数据从一个集群备份到另一个集群并进行恢复,除了适用于在同一集群上使用 OADP 备份和恢复数据的先决条件和步骤外,您还必须考虑以下因素。
Operators
Velero 的使用
UID 和 GID 范围
OADP 基于 Velero,而 Velero 本身并不支持跨云提供商迁移持久卷快照。要在云平台之间迁移卷快照数据,您必须或者启用 Velero Restic 文件系统备份选项(该选项在文件系统级别备份卷内容),或者使用 OADP 数据移动器进行 CSI 快照。
在 OADP 1.1 及更早版本中,Velero Restic 文件系统备份选项称为 |
您还必须使用 Velero 的文件系统备份在 AWS 区域之间或 Microsoft Azure 区域之间迁移数据。
Velero 不支持将数据恢复到 Kubernetes 版本比源集群更早的集群。
理论上可以将工作负载迁移到 Kubernetes 版本比源集群更晚的目标集群,但是您必须考虑每个自定义资源的集群之间 API 组的兼容性。如果 Kubernetes 版本升级破坏了核心或原生 API 组的兼容性,则必须首先更新受影响的自定义资源。
在使用文件系统备份 (FSB) 开始备份操作之前,您必须指定哪些 Pod 包含要备份的卷。Velero 将此过程称为“发现”相应的 Pod 卷。
Velero 支持两种确定 Pod 卷的方法。使用选择加入或选择退出方法允许 Velero 在 FSB、卷快照或数据移动器备份之间进行选择。
选择加入方法:使用选择加入方法时,默认情况下使用快照或数据移动器备份卷。FSB 用于通过注释选择加入的特定卷。
选择退出方法:使用选择退出方法时,默认情况下使用 FSB 备份卷。快照或数据移动器用于通过注释选择退出的特定卷。
FSB 不支持备份和恢复hostpath
卷。但是,FSB 支持备份和恢复本地卷。
Velero 对其创建的所有备份存储库使用静态的公共加密密钥。此静态密钥意味着任何可以访问您的备份存储的人也可以解密您的备份数据。限制对备份存储的访问至关重要。
对于 PVC,每个增量备份链都在 Pod 调度期间保持。
对于不是 PVC 的 Pod 卷,例如emptyDir
卷,如果 Pod 被删除或重新创建(例如,由ReplicaSet
或部署),则这些卷的下一个备份将是完整备份,而不是增量备份。假定 Pod 卷的生命周期由其 Pod 定义。
即使可以增量保留备份数据,但备份大型文件(例如数据库)也可能需要很长时间。这是因为 FSB 使用重复数据删除来查找需要备份的差异。
FSB 通过访问 Pod 所在节点的文件系统来读取和写入卷中的数据。因此,FSB 只能备份从 Pod 挂载的卷,而不能直接从 PVC 挂载。一些 Velero 用户通过运行一个暂存 Pod(例如带有无限睡眠的 BusyBox 或 Alpine 容器)来挂载这些 PVC 和 PV 对,然后执行 Velero 备份来克服此限制。
FSB 期望卷挂载在<hostPath>/<pod UID>
下,其中<hostPath>
是可配置的。某些 Kubernetes 系统(例如 vCluster)不会在<pod UID>
子目录下挂载卷,而 VFSB 无法按预期与它们一起工作。
您可以使用选择加入方法指定哪些卷需要由文件系统备份 (FSB) 备份。您可以使用backup.velero.io/backup-volumes
命令来执行此操作。
在包含一个或多个要备份的卷的每个 Pod 上,输入以下命令
$ oc -n <your_pod_namespace> annotate pod/<your_pod_name> \
backup.velero.io/backup-volumes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>
其中
<your_volume_name_x>
指定 Pod 规范中第 x 个卷的名称。
使用选择退出方法时,所有 Pod 卷都将使用文件系统备份 (FSB) 进行备份,尽管有一些例外情况。
挂载默认服务帐户令牌、密钥和配置映射的卷。
hostPath
卷
您可以使用选择退出方法指定哪些卷不要备份。您可以使用backup.velero.io/backup-volumes-excludes
命令来执行此操作。
在包含一个或多个不希望备份的卷的每个 Pod 上,运行以下命令
$ oc -n <your_pod_namespace> annotate pod/<your_pod_name> \
backup.velero.io/backup-volumes-excludes=<your_volume_name_1>, \ <your_volume_name_2>>,...,<your_volume_name_n>
其中
<your_volume_name_x>
指定 Pod 规范中第 x 个卷的名称。
您可以通过使用 |
如果您将数据从一个集群备份到另一个集群,则可能会出现 UID(用户 ID)和 GID(组 ID)范围的问题。以下部分解释了这些潜在问题和缓解措施。
命名空间 UID 和 GID 范围可能会根据目标集群而变化。OADP 不会备份和恢复 OpenShift UID 范围元数据。如果备份的应用程序需要特定的 UID,请确保在恢复时可用该范围。有关 OpenShift 的 UID 和 GID 范围的更多信息,请参见OpenShift 和 UID 指南。
当您使用 shell 命令oc create namespace
在 OpenShift Container Platform 中创建命名空间时,OpenShift Container Platform 会从其可用的 UID 池中为命名空间分配一个唯一的用户 ID (UID) 范围、一个补充组 (GID) 范围和唯一的 SELinux MCS 标签。此信息存储在集群的metadata.annotations
字段中。此信息是安全上下文约束 (SCC) 注释的一部分,这些注释包含以下组件:
openshift.io/sa.scc.mcs
openshift.io/sa.scc.supplemental-groups
openshift.io/sa.scc.uid-range
使用 OADP 还原命名空间时,它会自动使用 `metadata.annotations` 中的信息,而不会重置目标集群中的信息。因此,如果出现以下任何情况,工作负载可能无法访问备份数据。
存在具有其他 SCC 注释的现有命名空间,例如在另一个集群上。在这种情况下,OADP 在备份过程中使用现有命名空间,而不是您要还原的命名空间。
在备份过程中使用了标签选择器,但执行工作负载的命名空间不具有该标签。在这种情况下,OADP 不会备份命名空间,而是在还原过程中创建一个新的命名空间,该命名空间不包含已备份命名空间的注释。这会导致为命名空间分配新的 UID 范围。
如果 OpenShift Container Platform 根据自持久卷数据备份以来已更改的命名空间注释为 pod 分配 `securityContext` UID,这可能会成为客户工作负载的问题。
容器的 UID 不再与文件所有者的 UID 匹配。
发生错误,因为 OpenShift Container Platform 未将目标集群的 UID 范围更改为与备份集群数据匹配。结果,备份集群的 UID 与目标集群不同,这意味着应用程序无法在目标集群上读取或写入数据。
您可以使用以下一种或多种缓解措施来解决 UID 和 GID 范围问题
简单的缓解措施
如果您在 `Backup` CR 中使用标签选择器来筛选要包含在备份中的对象,请确保将此标签选择器添加到包含工作区的命名空间。
在尝试还原具有相同名称的命名空间之前,请删除目标集群上任何预先存在的命名空间版本。
高级缓解措施
通过 迁移后解决 OpenShift 命名空间中重叠的 UID 范围 来修复迁移后的 UID 范围。步骤 1 可选。
有关 OpenShift Container Platform 中 UID 和 GID 范围的深入讨论,重点是如何克服在一个集群上备份数据并在另一个集群上还原数据的相关问题,请参阅 OpenShift 和 UID 指南。
通常,您备份一个 OpenShift Container Platform 集群中的数据并在另一个 OpenShift Container Platform 集群上还原数据的方式与您在同一集群上备份和还原数据的方式相同。但是,在一个 OpenShift Container Platform 集群中备份数据并在另一个集群上还原数据时,过程中有一些额外的先决条件和差异。
本指南的相关部分描述了在您的平台(例如 AWS、Microsoft Azure、GCP 等)上备份和还原的所有相关先决条件,尤其是数据保护应用程序 (DPA) 的先决条件。
对您的平台给出的程序进行以下补充
确保备份存储位置 (BSL) 和卷快照位置具有相同的名称和路径,以便将资源还原到另一个集群。
在集群之间共享相同的对象存储位置凭据。
为了获得最佳结果,请使用 OADP 在目标集群上创建命名空间。
如果您使用 Velero `file-system-backup` 选项,请通过运行以下命令启用 `--default-volumes-to-fs-backup` 标志以便在备份期间使用。
$ velero backup create <backup_name> --default-volumes-to-fs-backup <any_other_options>
在 OADP 1.2 及更高版本中,Velero Restic 选项称为 `file-system-backup`。 |
在还原 CSI 备份之前,请编辑 `VolumeSnapshotClass` 自定义资源 (CR),并将 `snapshot.storage.kubernetes.io/is-default-class` 参数设置为 false。否则,由于目标集群中相同驱动器的 `VolumeSnapshotClass` 中的值相同,还原将部分失败。 |
存储类映射允许您定义规则或策略,指定应将哪个存储类应用于不同类型的数据。此功能可根据访问频率、数据重要性和成本考虑因素自动确定存储类。它通过确保数据存储在其特性和使用模式最合适的存储类中来优化存储效率和成本效益。
您可以使用 `change-storage-class-config` 字段更改数据对象的存储类,这使您可以根据您的需求和访问模式在不同的存储层之间移动数据(例如,从标准存储移动到归档存储),从而优化成本和性能。
您可以使用容器迁移工具包 (MTC) 将容器(包括应用程序数据)从一个 OpenShift Container Platform 集群迁移到另一个集群,并进行存储类映射和转换。您可以通过在同一集群内迁移持久卷 (PV) 来转换其存储类。为此,您必须在 MTC Web 控制台中创建并运行迁移计划。
您可以将 OpenShift API for Data Protection (OADP) 与 Velero 插件 v1.1.0 及更高版本一起使用,通过在 Velero 命名空间中的 ConfigMap 中配置存储类映射,在还原过程中更改持久卷 (PV) 的存储类。
要使用 OADP 部署 ConfigMap,请使用 `change-storage-class-config` 字段。您必须根据您的云提供商更改存储类映射。
运行以下命令来更改存储类映射
$ cat change-storageclass.yaml
在 Velero 命名空间中创建 ConfigMap,如下例所示
apiVersion: v1
kind: ConfigMap
metadata:
name: change-storage-class-config
namespace: openshift-adp
labels:
velero.io/plugin-config: ""
velero.io/change-storage-class: RestoreItemAction
data:
standard-csi: ssd-csi
运行以下命令保存您的存储类映射首选项
$ oc create -f change-storage-class-config