OpenShift 4.x HOL教程汇总

说明:

Velero 和 OADP 包含的功能和模块

Velero 核心功能是备份 Kubernetes 对象,同时可通过扩展模块对 PV 中的数据进行备份或对整个 PV 进行快照。Velero 包含的组件有:

  • Kopia 或 Restic:用来备份挂载到 Pod 的 PV 里的文件到对象存储中。它们还可以作为 Data Mover 结合 CSI plug-in 使用,将 CSI 生成的 Volume Snapshot 搬移到指定的对象存储中。Kopia 和 Restic 是以守护进程的方式在代理节点代理上运行的。
  • CSI plug-in:使用基于 CSI 的 Volume SnapShot 对 PV 进行快照。
  • 云供应商 plug-in:由 AWS、GCP、Azure 提供插件,可实现 Native volume snapshot 和对象备份。
  • OADP 除了以上 Velero 功能外外,还可提供了 OpenShift plug-in 以支持镜像内部的容器镜像进行备份。

Velero 可使用 CSI 或云供应商的原生快照 API 创建快照来备份持久卷 (PV)在这里插入图片描述

备份功能实现过程

  1. Velero 客户端调用 Kubernetes API 服务器创建备份对象。
  2. BackupController 会注意到新的备份对象并进行验证。
  3. BackupController 开始备份流程。它通过向 API 服务器查询资源来收集要备份的数据。
  4. BackupController 会调用对象存储服务(例如 AWS S3)来上传备份文件。
  5. BackupController 会为 PV 制作磁盘快照。
    在这里插入图片描述

实现 PV 数据备份的主要方法

Velero 可通过以下几种方法实现对 PV 数据进行备份。

  • FSB 文件系统备份 - 将挂载到 Pod 上的 PV 中的文件备份到对象存储中。这一过程需要在运行 Pod 的节点中以 Daemon 的方式运行 node agent 环境,在环境中使用 Kopia 或 Restic 完成文件的备份过程。该方法的优势是适应性强,但性能不突出;且在备份过程中文件内容可能会被随时更改,因此多个文件之间可能出现会前后不一致的情况。​为防止出现这种情况,​在备份过程中必须使应用处于静默状态以防执行写入操作。​
  • CSI 快照 - 用符合 CSI 的 VolumeSnapshotClass、VolumeSnapshot、VolumeSnapshotContent 等实现 PV 数据快照。该方法的优势是性能突出,且所有备份数据都是快照时间点的状态,因此备份数据具有较好的一致性;此外快照能同时支持文件系统和块存储的备份。
  • 云供应商插件的快照 - 使用 AWS、GCP、Azure 等云厂商的原生插件实现 PV 数据快照。只有该方法才会用到 Velero 的 VolumeSnapshotLocation 对象。
  • 另外,Velero 的 CSI 数据搬移可以看成是 CSI 快照的增强方法,它可以看成 CSI 快照 + FSB 的组合。这种方法的好处是可以将占用空间较多的快照从高成本的存储转移到低成本的存储保存,以便长期保存。另外还可将备份数据和 OCP 集群分开,更好的数据持久性可以提升应对数据中心灾难。

备份方法支持的存储类型

对于容器和虚拟机负载,OADP 不同的备份方法可支持不同类型的存储卷。
在这里插入图片描述
S: Backup supported
I: Incremental backup supported
N: Not supported

崩溃一致 vs 应用一致

在备份数据的时候需注意是要使用应用一致的副本还是崩溃一致的副本

  • 崩溃一致性副本 - 类似于硬件崩溃或断电时的数据状态,此时只能备份磁盘中的数据,不会符合内存中的数据。
  • 应用一致的副本:在确保已将内存中的数据写到到磁盘后才进行数据备份。

Velero 的 CSI Snapshot 崩溃一致的,不过可以在执行备份操作前使用钩子实现应用一致。​在备份前使用钩子可以让应用(如事务型数据库)处于静默状态,​将待处理的 I/O 操作刷新到存储后端并暂停之后的应用写入操作,​从而避免备份过程中出现数据丢失或损坏的情况。​备份完成后,​使用备份后钩子恢复应用的操作。​

Velero 核心 CR 和 OADP 扩展 CR

OpenShift API Data Protection(OADP) 基于 Velero 开源项目。除了支持 Velero 的 Backup、Restore、BackupStorageLocaltion、VolumeSnapshotLocation 和 Schedule 外这些 Velero 标准 CR 外还提扩展了一些 CR。其中 DataProtectionApplication 是用来定义 Velero 的运行环境和 BackupStorageLocaltion、VolumeSnapshotLocation 等。

区分 BackupStorageLocation 和 VolumeSnapshotLocation

BackupStorageLocation - BSL 和 VolumeSnapshotLocation - VSL 是 Velero 中的两个 CR,用来定义备份数据保存的位置。其中:
1)BackupStorageLocation 指定一个对象存储,用来保存被备份的 Kubernetes 对象、以及通过 FSB 或 Data Mover 搬移的备份文件。
2)VolumeSnapshotLocation 只在使用特定云供应厂商的原生快照时用到,即:

  • 如果使用云供应商的原生快照 API 备份持久卷,则必须用 VolumeSnapshotLocation 指定云供应商。
  • 如果使用 CSI 快照,则无需指定 VolumeSnapshotLocation,因为会使用 CSI 的 VolumeSnapshotClass 创建 PV 的快照,且快照内容就放在集群本地。
  • 如果使用 FSB,则无需指定 VolumeSnapshotLocation,因为 FSB 会在对象存储上备份文件系统。

跨集群恢复

为了将数据备份还原到另一个不同的群集,请确保在两个群集的 DataProtectionApplication 配置中做到以下几点:

  • 备份存储位置 (BSL) 和卷快照位置 (VSL) 具有相同的名称和路径,以便将资源还原到另一个群集。
  • 必须在群集间共享相同的对象存储位置凭证。
  • 允许 OADP 在目标群集上创建命名空间。
  • 将 PVC 还原到卷已经存在的命名空间时,在还原之前应首先删除任何需要更新的 PVC。
  • 对于 Restic 用例,还必须删除挂载 pod 的部署(或 DC 等),前提是该部署也在还原的备份中。

参考

https://access.redhat.com/articles/5456281
https://github.com/migtools/labs/blob/master/oadp/bookbag/workshop/content/Intro.adoc
https://velero.io/docs/main/examples/
https://access.redhat.com/support/policy/updates/openshift_operators

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐