本文介绍在 Kubernetes 集群中进行备份与还原的完整思路与实现要点,适用于公有云、本地私有云等多种环境场景。以下内容保留原始意图与核心信息,并对表达与结构进行了重构,便于在 WordPress 上直接发布。
VeleRo 提供对 Kubernetes 集群资源与持久卷的备份与还原能力,支持在公有云或私有云环境部署。以下是它能够帮助你的场景概览:
1) 备份集群数据并在故障时进行还原;2) 将集群资源迁移到其他集群;3) 将生产集群复制到开发/测试集群。
VeleRo 包含一个在集群内运行的服务端与一个本地运行的命令行客户端,统一通过 CRD(自定义资源)进行管理。
原理
VeleRo 的操作,如按需备份、计划备份、还原,都是通过 CRD 实现的。它可以备份或还原集群中的全部对象,亦可按类型、命名空间或标签进行过滤。作为灾难恢复解决方案,VeleRo 也可在执行系统升级前对应用状态进行快照。
按需/计划备份
按需备份会将复制的 Kubernetes 对象和卷快照上传到对象存储,或通过云提供的 API 创建持久卷磁盘快照。备份过程中可指定备份钩子,在快照前将数据库等应用内存中的数据刷新到磁盘。
需要注意,备份并非严格原子性;在备份过程中创建或修改的对象可能不会被包含在当前备份中。
定时备份
通过定时任务可以周期性地执行备份,初次创建计划时会执行一次备份,之后按 Cron 表达式设定的间隔进行。备份的命名通常带有时间戳,格式为 YYYYMMDDhHMMSS。
备份还原
通过还原操作可从历史备份中还原所有对象与持久卷,亦可仅还原子集对象和卷,并支持跨命名空间重新映射。默认的还原名称同样带有时间戳,亦可自定义名称,恢复的对象还带有特定标签以便追踪。
还原过程中的存储策略:默认情况下,备份存储位置以读写模式创建;在还原期间可将其配置为只读,以避免意外创建或删除备份。此外,还可以设置还原钩子,在资源恢复前后执行自定义操作。
备份流程
执行命令 veleRo backup create test-backup 时,系统会执行以下步骤:VeleRo 客户端通过 Kubernetes APIServer 创建 backup CRD 对象;备份控制器检测新对象并开始执行,收集资源数据进行备份;最后通过对象存储服务上传备份文件。
默认情况下,veleRo backup create 支持对任意持久卷执行磁盘快照,并可通过参数调整快照行为,例如可以使用 –snapshot-volumes=false 来禁用快照。
设置备份过期时间
在创建备份时,可以通过 –ttl 指定 TTL。若未设置,默认 TTL 为 30 天。当备份资源过期时,系统将删除对应的云对象存储备份文件、持久卷快照以及关联的还原对象等。
关于备份数据的同步与一致性,系统会持续把对象存储作为数据源与目标之间的一致性中心,确保在跨集群迁移场景下仍能正确还原。若对象存储中存在格式正确的备份文件,但在 Kubernetes APIServer 中没有相应的备份对象,系统会将信息从对象存储同步到 Kubernetes,以支持还原功能。
备份存储位置与卷快照位置
定义备份存储与快照位置的自定义资源包含 backupStorageLocation 与 VolumeSnapshotLocation,前者用于配置备份数据的存储前缀与提供程序特定字段,后者则是卷快照的目标位置(由提供程序定义)。
用户可以预设一个或多个 backupStorageLocation 与 VolumeSnapshotLocation,并在创建备份时选择具体的存储和快照位置。这种设计支持多种用例,如在单个 VeleRo 备份中对不同卷创建快照、在不同地区备份数据、将部分快照保留在本地集群等。
安装与运行说明(简要要点)
在 GitHub Release 下载相应的 veleRo 客户端安装包后,将根目录下的 veleRo 二进制文件拷贝至 PATH 目录,并验证版本信息。
测试环境准备通常包含一个 MinIO 作为对象存储的演示实例,提供 S3 兼容的 API。可以通过将 MinIO 部署到 Kubernetes 集群中来快速测试,或在外部节点安装二进制客户端并指向外部对象存储进行集成测试。
部署 MinIO 的要点包括:创建命名空间、部署 Deployment、Service(NodePort/ClusterIP)、以及一个初始化的 Batch Job,用于初始化快照存储与配置。完成后即可通过浏览器访问 MinIO 控制台并上传/管理备份数据。
继续后续工作与注意事项
如果需要在不同的 Kubernetes 集群或存储池间进行备份与恢复,应将 MinIO 服务部署在可访问的网络位置,以确保在灾难发生时备份数据不受影响,必要时可通过二进制方式在目标环境中继续部署 veleRo 服务端。
在后续的安装过程中,可能需要配置密钥、凭证、以及 Restic 等备份组件。使用 Restic 可以实现对持久卷数据的高效备份与恢复,且与 AWS S3 兼容插件等无缝对接。
测试用例与示例应用
一个常见的测试场景是部署一个 MySQL 应用及其持久化存储,随后执行备份与恢复验证。示例清单包括命名空间、密钥、部署与服务等 YAML,按照实际环境的命名规范进行调整即可直接应用到集群中。
通过以上步骤,可以在 Kubernetes 环境中完成从备份、快照、还原到跨集群迁移的完整过程,帮助确保业务数据的安全与可恢复性。若需要深入的参数说明与进一步的操作示例,请参考官方文档与社区示例。
