从 Zalando postgres-operator 迁移

本节适用于将 PostgreSQL 集群从 Zalando postgres-operator(acid.zalan.do/v1 postgresql,即此前随 Alauda Container Platform 提供的基于 Spilo/Patroni 的栈)迁移到 CloudNativePG(postgresql.cnpg.io/v1)的用户。

  • 清单映射 — 每个 Zalando CR 字段及其对应的 CloudNativePG 字段,以及自动转换工具。
  • 数据迁移 — 数据迁移方式:dump/restore、逻辑复制或物理克隆。

为什么要迁移,以及预期结果

  • 不会出现性能回退。 CNPG v1.29.1 的发布资格验证包含了与 Zalando 栈在相同硬件上的 A/B 对比(相同的 sysbench OLTP 工作负载,并按场景匹配 shared_buffersmax_connections):CloudNativePG 在 全部八个场景 中都与 Zalando 栈持平或更优(TPS 和 P95 延迟)。

  • 扩展功能等价。 所有捆绑扩展都随 PostgreSQL operand 镜像一起提供:

    PG majorpgvectorpgauditPostGIS 3.6zhparser 2.4TimescaleDB 2.27 (Apache-2 OSS)
    14✗ 不可用
    15–18

    Debian trixie 的 TimescaleDB 软件包从 PG 15 开始提供——如果 Zalando 用户在 PG 14 上使用 TimescaleDB,应在迁移期间升级到 PG 15+(PG 14 已接近生命周期结束)。TimescaleDB 构建版本为 Apache-2 OSS 版本,与 Spilo 的 APACHE_ONLY=true 等效——与 Zalando 相比不会损失能力。

  • 架构简化:不再需要 Patroni 或外部 DCS,不再需要 Spilo 超大镜像,提供 Kubernetes 原生故障切换,以及声明式配置——参见架构

概念映射

Zalando 概念CloudNativePG 对应项
一个 postgresql CR = cluster + users + DBs + pooler + backup拆分为Cluster(+ PoolerDatabaseScheduledBackup
Spilo 镜像(PostgreSQL + Patroni 打包)纯 PostgreSQL operand 镜像;由 operator 注入 instance manager
Patroni / DCS leader electionoperator 驱动的故障切换,Kubernetes 原生
主节点服务 <cluster> / repl 服务 <cluster>-repl<cluster>-rw / <cluster>-ro(仅副本;-r = 任意 instance)
secret <user>.<cluster>.credentials.postgresql.acid.zalan.do (Opaque)用于引导所有者的 <cluster>-app;受管角色使用你提供的 kubernetes.io/basic-auth secret
postgres superuser secret(始终创建)默认禁用 superuser 访问(enableSuperuserAccess: true 会创建 <cluster>-superuser
逻辑备份 CronJob(pg_dumpall 到 S3)物理备份(barman-cloud 插件或 CSI 快照,并支持 PITR);逻辑 dump = 需要你自行提供 CronJob
WAL-E / WAL-G archive(Spilo 布局)barman-cloud archive — 格式不兼容;备份历史不会继承

迁移检查清单

  1. 转换清单(清单映射 — 查看转换工具输出的每一条警告)。
  2. 选择数据迁移路径(数据迁移)。
  3. 如果应用必须保留密码,则重新创建凭证 secret(kubernetes.io/basic-auth)。
  4. 部署后,等待 Cluster in healthy state,执行第一次备份,并接入监控 (Grafana dashboards 指南的 How To 部分)。
  5. 切换应用引用(服务名称会变化),然后在回滚窗口结束后下线 Zalando 集群。