ApeCloud
博客开源社区关于我们
首页

/

KubeBlocks开源版

/

PostgreSQL Operator

关系型数据库
开源

在 Kubernetes 上运行高可用 PostgreSQL 集群

KubeBlocks PostgreSQL Operator 基于 Patroni 实现自动选主与故障转移,支持流复制、同步复制与 pgBouncer 连接池,提供完整的 PITR 恢复能力,适合对数据一致性要求极高的业务场景。

访问 GitHub

0

故障切换数据丢失(同步模式)

99.99%

高可用目标

11+

内置扩展

100%

开源免费

2 步部署生产级 PostgreSQL Operator

1

安装 KubeBlocks

# 添加 Helm 仓库
helm repo add kubeblocks https://apecloud.github.io/helm-charts
helm repo update

# 安装 KubeBlocks
helm install kubeblocks kubeblocks/kubeblocks \
  --namespace kb-system --create-namespace
2

创建 PostgreSQL Operator 集群

apiVersion: apps.kubeblocks.io/v1
kind: Cluster
metadata:
  name: pg-cluster
  namespace: demo
spec:
  terminationPolicy: Delete
  clusterDef: postgresql
  topology: replication
  componentSpecs:
    - name: postgresql
      replicas: 3

核心能力

Patroni 自动故障转移

基于 Patroni 的分布式 Leader 选举,通过 Kubernetes API 实现,节点故障时自动完成主从切换,RTO 通常低于 30 秒。

流复制与同步复制

支持异步流复制与同步复制两种模式,同步复制模式下主库提交必须等待至少一个从库确认,RPO = 0。

pgBouncer 连接池

内置 pgBouncer(:6432)提供连接池管理,降低主库连接压力,自动将只读请求路由到从库。

PITR 精细化恢复

基于 WAL 归档实现按时间点恢复,支持恢复到任意历史时刻,满足合规审计需求。


部署拓扑

Patroni HA 高可用

一主多从流复制架构,由 Patroni 通过 Kubernetes API 实现分布式 Leader 选举。主库故障时自动完成主从切换,RTO 通常低于 30 秒;同步复制模式下 RPO = 0。

RTO < 30s
RPO = 0(同步)
pgBouncer 连接池
Patroni
关键特性

Patroni 通过 Kubernetes API 实现分布式 Leader 选举,无需外部 etcd

支持同步与异步流复制,同步模式下主库提交必须等待至少一个从库确认

内置 pgBouncer 连接池(:6432),降低主库连接压力

主库切换后 Service Endpoint 自动更新,应用无感知

内置 pg-exporter sidecar,自动暴露 Prometheus 指标(:9187)

应用 / 客户端
读写  pg-cluster-postgresql-postgresql:5432
连接池  pg-cluster-postgresql-postgresql:6432 (pgbouncer)
读写流量 → roleSelector: primary
Kubernetes 服务
pg-cluster-postgresql-postgresql
ClusterIP · :5432 / :6432
selector: kubeblocks.io/role=primary
Endpoints 随主节点自动切换
读写
→ 仅主节点 Pod
postgresql-0主节点
postgresql (Patroni)
:5432 pg · :8008 patroni API
主节点
pgbouncer
:6432 连接池
dbctl (角色探测)
:5001 /v1.0/getrole
pg-exporter
:9187 监控指标
PVCdata-0 · 20Gi
postgresql-1从节点
postgresql (Patroni)
:5432 pg · :8008 patroni API
从节点
pgbouncer
:6432 连接池
dbctl (角色探测)
:5001 /v1.0/getrole
pg-exporter
:9187 监控指标
PVCdata-1 · 20Gi
postgresql-2从节点
postgresql (Patroni)
:5432 pg · :8008 patroni API
从节点
pgbouncer
:6432 连接池
dbctl (角色探测)
:5001 /v1.0/getrole
pg-exporter
:9187 监控指标
PVCdata-2 · 20Gi
流式复制(WAL)主节点-0 → 从节点-1 · 从节点-2  |  同步 / 异步可配置
无头服务 — 内部稳定 Pod DNS(复制、HA 心跳、Operator 探针);非客户端入口
每个 Patroni Agent 通过 :8008 读写 K8s API
ConfigMap {scope}-config集群配置 · TTL 30 秒
ConfigMap {scope}Leader 租约 · 心跳
Secret account-*系统账户密码
每 10 秒轮询 · TTL 30 秒
基于 K8s 锁的 Leader 选举
故障转移 → 服务自动重路由
主节点 / 读写流量
从节点
Patroni DCS(K8s API)
持久化存储

常见问题

KubeBlocks PostgreSQL Operator 支持哪些 PostgreSQL 版本?

KubeBlocks PostgreSQL Operator 提供 PostgreSQL 12、14、15、16、17、18 等版本,可通过自定义镜像运行其他兼容版本。

Patroni 故障切换需要多长时间(RTO)?

在默认配置下,Patroni 主从切换 RTO 通常低于 30 秒。切换过程包括健康检查超时、Leader 选举和 Service Endpoint 更新,整个流程由 KubeBlocks 自动完成。

KubeBlocks PostgreSQL 如何进行备份?

KubeBlocks 支持基于 pg_basebackup 的全量备份和基于 WAL 归档的增量备份(PITR),备份文件可上传至 S3、MinIO 等对象存储,支持按任意时间点恢复,RPO 接近零。

KubeBlocks PostgreSQL Operator 是否免费?

KubeBlocks开源版完全开源免费,涵盖所有核心 HA 功能、备份恢复与运维操作。KubeBlocks企业版 提供图形化控制台、多集群管理与商业支持等增值功能。

如何将现有 PostgreSQL 迁移到 KubeBlocks 管理?

推荐使用开源工具 ape-dts 进行在线迁移,支持全量 + 增量同步,迁移完成后切换流量,业务中断时间极短。也可使用 pg_dump/pg_restore 或 pglogical 逻辑复制方式迁移。