架构

参考文档:Zalando Postgres Operator Official Documentation PostgreSQL Operator 架构

PostgreSQL Operator 使用 Kubernetes Operator 模式管理 PostgreSQL 集群,主要由以下核心组件组成:

核心组件

  1. Operator Controller

    • 监听 PostgreSQL Custom Resource Definitions (CRD) 的变更
    • 负责集群创建、扩缩容、配置更新以及其他操作
    • 管理集群生命周期
  2. Patroni

    • 提供高可用保障
    • 处理主备切换和故障转移
    • 管理集群拓扑和成员状态
  3. Spilo

    • 提供 PostgreSQL 容器镜像
    • 集成 Patroni 和 PostgreSQL
    • 处理初始化配置和启动
  4. 监控组件

    • 集成 Prometheus 进行指标采集
    • 提供 Grafana 仪表板
    • 支持告警规则配置

数据流

  1. 用户通过 Kubernetes API 创建 PostgreSQL Custom Resource
  2. Operator Controller 监听资源变更并创建相关 Kubernetes 资源
  3. Patroni 负责集群初始化和高可用管理
  4. Spilo 启动 PostgreSQL 实例并应用配置
  5. 监控组件采集指标并进行展示

RBAC 架构

PostgreSQL Operator 实现了最小权限 RBAC 模型,并通过职责分离满足企业安全合规要求。

Operator 权限

operator 遵循最小权限原则。它仅拥有管理 PostgreSQL 集群所需的最小权限:

ResourcePermissionsNotes
CustomResourceDefinitionsget, list, watch只读(CRD 由 OLM 管理)
PersistentVolumesget, list, watch只读(PV 由 provisioner 管理)
Rolesget, list, watch只读
RoleBindingsget, create, update作用域限定为 namespace
ServiceAccountsget, create不允许 delete

operator 具备集群级 RBAC 管理权限(ClusterRole、ClusterRoleBinding)。

运行时 RBAC

当在某个 namespace 中创建 PostgreSQL CR 时,operator 会自动创建:

ResourceScopePurpose
ServiceAccount每个 namespace用于 PostgreSQL pods
RoleBinding每个 namespace绑定到 operator ClusterRole

这是标准的 Kubernetes operator 模式,其中 ClusterRole 权限由 OLM/admin 控制。

面向用户的角色

operator 提供用于职责分离的角色模板:

RolePermissionsUse Case
admin对 postgresqls、backups、restores 具有完整 CRUD 权限DBA、Platform Admin
edit创建/更新 postgresqls(不允许 delete)开发人员
view只读访问审计员、Support
backup仅创建/管理 PostgresBackupBackup Operator
restore仅创建/管理 PostgresRestoreRestore Operator

角色聚合

面向用户的角色会聚合到平台角色:

  • admin:聚合 admin-base + backup + restore 角色
  • edit/view:聚合到 rbac.cpaas.io/aggregate-to-namespace-developer
  • 所有角色:聚合到 rbac.cpaas.io/aggregate-to-scope-business-ns

部署模式

PostgreSQL Operator 支持以下部署模式:

  • Single Cluster Mode:运行在单个 Kubernetes 集群中
  • Multi-Cluster Mode:跨多个 Kubernetes 集群管理 PostgreSQL 实例
  • High Availability Mode:通过 Patroni 实现自动故障转移