第十七章 PostgreSQL + Kubernetes 实战 - 第二节:自动备份、恢复、扩缩容
文章目录
第二节 自动备份、恢复、扩缩容
目标:学习如何利用 PostgreSQL Operator (PGO) 的声明式 API,轻松地执行备份、恢复和集群扩缩容等高级运维操作,体验云原生数据库管理的便捷性。
PGO 的强大之处不仅在于简化了初始部署,更在于它将复杂的 Day-2 运维操作(即部署后期的日常管理)也变成了简单的 YAML 修改。
一、备份 (Backups)
PGO 内部集成了业界领先的 PostgreSQL 备份和恢复工具——pgBackRest。它支持全量备份(Full)、增量备份(Incremental)、差异备份(Differential)以及时间点恢复(Point-in-Time Recovery, PITR)。
1. 配置备份策略
在上一节的 PostgresCluster 定义中,我们已经包含了 backups.pgbackrest 部分。我们可以对其进行扩展,来定义备份计划。
| |
只需 kubectl apply 这个更新后的 YAML,PGO 就会自动创建相应的 CronJob 来执行定时备份。
2. 执行手动备份
有时我们需要在重大变更前执行一次手动备份。只需修改 manual.repoName 并 apply 即可触发。但更直接的方式是创建一个一次性的 Job。
或者,PGO v5.4+ 引入了更简单的注解方式:
| |
这个命令会立即触发一次全量备份。
二、恢复 (Restore)
恢复数据是 DBA 的核心职责,PGO 让这个过程也变得非常简单。
1. 克隆一个新集群 (Clone)
最安全的恢复方式是克隆。即从一个现有集群的备份中,创建一个全新的、独立的集群。这对于搭建测试环境或验证备份有效性非常有用。
只需创建一个新的 PostgresCluster YAML,并在 dataSource 部分指定源集群和备份。
| |
kubectl apply 这个文件后,PGO 就会自动创建一个名为 hippo-restored 的新集群,其数据与 hippo 集群的最近一次备份完全一致。
2. 时间点恢复 (Point-in-Time Recovery, PITR)
如果你需要将数据恢复到某个特定的时间点(例如,在误删数据之前),可以在 dataSource 中指定 pitr 选项。
| |
三、扩缩容 (Scaling)
随着业务量的变化,我们可能需要增加或减少数据库实例。
1. 扩容副本 (Scaling Out Replicas)
这是最常见的操作,用于增强集群的读性能和高可用性。只需修改 PostgresCluster YAML 中的 replicas 字段即可。
将副本从 2 个增加到 4 个:
| |
kubectl apply 后,PGO 会自动创建两个新的 Pod,配置流复制,并将其加入到只读副本服务中。整个过程对应用透明。
2. 扩容存储 (Scaling Up Storage)
如果数据量增长导致磁盘空间不足,可以直接修改 dataVolumeClaimSpec 中的 storage 请求大小。
将存储从 5Gi 增加到 10Gi:
| |
kubectl apply 后,PGO 会安全地扩展每个实例的 PersistentVolume。注意:这需要你的 K8s 存储类(StorageClass)支持在线扩容。
📌 小结
PostgreSQL Operator 将传统数据库运维中那些复杂、高风险、需要DBA手动执行的脚本化流程,转变成了声明式的、自动化的、可版本控制的云原生工作流。
- 备份:通过
pgbackrest的集成和CronJob的自动化,实现了可靠、定时的备份。 - 恢复:通过
dataSource声明,可以安全地将数据克隆到新集群或执行精准的时间点恢复。 - 扩缩容:无论是增加副本实例还是扩展存储空间,都只需简单地修改 YAML 文件并应用,PGO 会处理好所有底层的复杂逻辑。
这种将运维操作“代码化”的能力,是 DevOps 和 GitOps 理念在数据库管理领域的完美实践,它极大地提升了团队的敏捷性、可靠性和运维效率。
