docs: 同步共享 etcd 与 PostgreSQL 部署验收及 IaC 来源
docs / check (push) Successful in 2m14s

This commit is contained in:
2026-09-25 19:36:30 +00:00
parent 409e350c83
commit 217a56f683
5 changed files with 150 additions and 2 deletions
+62 -1
View File
@@ -2,7 +2,7 @@
title: 共享 PostgreSQL 使用指南
lifecycle: active
evidence: documented
last_reviewed: 2026-09-16
last_reviewed: 2026-09-25
last_verified: null
---
@@ -80,3 +80,64 @@ AI 接续任务时先确认操作范围,再执行现场查询;不能因为
服务依赖 Kubernetes、CNPG、集群 DNS 与持久存储;Tailscale 入口另依赖对应网络及授权。
来源文件的固定版本与工作区差异见[来源追溯](../sources.md#shared-postgresql)。
## 共享 etcd 设计边界
2026-09-25 维护者确定:为计划中的 k3s 外 PostgreSQL 引入的 etcd,应作为全 homelab
共享基础设施建设,PostgreSQL 是首个消费者。该共享定位已实现并完成首期部署验收;既有应用尚未迁移,
不改变本页现有 CNPG 入口。原研究将 etcd 列入数据库部署角色,新边界将其生命周期独立,
以便多个服务共用,减少重复部署与维护。
首期三成员已跨 laptop 与两台 PVE 部署,可与其他服务物理共置;
独立 IaC 管成员、认证、维护和快照,消费者只取得自己的账号与 key prefix 权限。
数据库卸载不能删除共享 etcd,全集群快照恢复也不能用作单个数据库的回滚。
现有 k3s 内部 datastore 不包含在本次迁移范围;其他消费者按实际需要接入。
维护者同时确定 etcd mTLS 证书由 OpenBao 中央 CA 签发,复用现有信任根,不引入
Pigsty 自建 CA。签发角色、peer 身份限制及消费者认证已部署;自动续签身份和 timer 已启用;
证书本地保存,正常启动不要求实时访问 Bao,Bao 本身不依赖此共享 etcd。
Patroni 的 etcd3 gateway 路径不支持证书 CN 对应的 RBAC 登录;维护者确定其独立随机密码
存入 Bao,由 Ansible 执行时读取,重复部署复用,轮换显式执行。该 secret 已在共享 etcd 部署阶段创建并验证 gateway 登录;Patroni 已部署。
PVE 改为裸机目前仅为后续倾向,没有迁移决定。
来源为本轮维护者设计指令及 homelab-infra
`infrastructure/shared-postgresql/RESEARCH.md`;文档来源为 [文档 acd4b55](https://git.ddupan.top/panxiao81/homelab-infra/commit/acd4b55),实现由 [IaC PR #159](https://git.ddupan.top/panxiao81/homelab-infra/pulls/159) 跟踪。
本节记录数据库设计边界;共享 etcd 的现场部署与验证见独立服务页,本页 CNPG 的 `last_verified` 不因此更新。
共享 etcd 的首轮 IaC、隔离验证与部署前置条件见[共享 etcd](shared-etcd.md)。
### k3s 外实例的实现与验收边界(2026-09-25)
新 PostgreSQL 18.6 生产主从与独立开发实例已上线,现有 CNPG 应用数据尚未迁移。
生产稳定入口 `pg-prod.ad.ddupan.top:5432` 指向 VyOS `192.168.10.2` 上独立 HAProxy;
正常 primary 为 laptop SSD ZFS,PVE LXC150 为 standby。开发入口为
`pg-dev.ad.ddupan.top:5433`,同机独立用户/数据集。客户端要求中央 CA 与 verify-full TLS。
LXC151 的专属 HDD 卷存放 pgBackRest 仓库,真实 SSH/WAL 归档、首个 full 和每日 timer 已验收;
保留 3 个 full、本地连续 WAL,尚无异地备份,开发实例当前不备份。
真实备份已恢复到临时目录的隔离实例,SQL 可写与管理角色属性验证通过,未覆盖生产 PGDATA。
低负载停止 laptop 主库服务后,完整通过的一次演练约 9.2 秒恢复经稳定入口写入;旧主重新作为
replica 加入、计划回切 laptop 后复制与探针清理全部通过。这不是 SLA,也不覆盖冻结/网络分区等全部故障。
Bao PKI 与专用 `homelab-postgresql` SPIFFE 身份已通过 OIDC 管理会话首次创建;之后受限身份
完成签发、KV 读取与独立管理凭据交付。原始实例秘密不交给 Ayatori,控制面只读
`kv/infra/postgresql/ayatori/{prod,dev}` 中的 username/password。
生产与开发管理账号实际 TLS 登录和非 superuser CREATEDB/CREATEROLE 属性已验证。
配置、备份传输、代理与凭据重跑 `changed=0`;PG 每日续签已启用,实际 systemd 运行成功,
证书窗口检查与 SQL 验收无变更。只在续签后重载证书,不重启实例;尚未强制演练临期轮换。
数据库日常运行独立于 k3s;机器身份续签依赖现有 SPIRE 与 Bao,不等于运行时依赖。
生产 Patroni 原生指标已接入现有监控,两目标 up=1、五条 HA 规则 health=ok 且 inactive。
SQL 级 exporter、开发实例、备份年龄和证书到期告警尚未补齐。存储事故与持续观察边界见
[共享 etcd](shared-etcd.md#依赖维护与恢复),不以短期验收证明底层长期稳定。
维护者明确 Ayatori 沿用独立控制面规划:本轮只准备 Instance、ExternalSecret、公开 CA、
Kustomize 与专用 ESO 只读 policy,没有向现有 k3s 安装 controller/CRD 或应用这些声明。
独立控制面还需创建实际 SecretStore/认证绑定并验收 Instance Ready;完整 Database/Tenant
供应能力以 Ayatori 自身实施为准。不能把现有 SQL 验证当作 Ayatori 已接管。
源码为 homelab-infra `infrastructure/shared-postgresql/README.md` 与
`ayatori/README.md`;部署、切换、恢复、续签及凭据引用的具体入口在那里维护,文档已发布 main;IaC 见 [IaC PR #159](https://git.ddupan.top/panxiao81/homelab-infra/pulls/159),合并及 GitOps 接管仍待完成。
Terraform backend 已复用 `kv/k8s/seaweedfs-s3` 中受限 AK/SK;此前阻塞是 Bao 管理权限,已由
维护者重新 OIDC 登录解决,不是 S3 凭据缺失。旧 Ansible Vault 迁移仍后置。