4.2 KiB
运维与故障处理
| 项目 | 内容 |
|---|---|
| 状态 | Review;命令待实现后演练 |
| 最后更新 | 2026-09-10 |
日常检查
先看 API 合同,而不是从日志猜状态:
kubectl get postgresqlinstances
kubectl get postgresqltenants -A
kubectl get postgresqltenant -n <namespace> <name> -o yaml
kubectl describe postgresqltenant -n <namespace> <name>
随后检查 controller 日志、ExternalSecret/Secret、OpenBao metadata、registry 和
PostgreSQL catalog。排障时不得把 Secret data 或带 Token 的请求粘贴到 issue/日志。
status.phase 是 controller 状态机 checkpoint,也用于定位当前步骤;Ready
Condition/Reason 用于判断对外结果。phase 不能替代外部事实,清空或不一致时应由
controller 自动重建/纠正。
常见 Reason
| Reason | 首要检查 |
|---|---|
InvalidSpec / ImmutableField |
API 字段、identifier、不可变/只追加约束 |
DependencyUnavailable |
网络、DNS、服务状态和超时 |
AuthenticationFailed |
管理凭据、CA、DNS/IP SAN、OpenBao auth |
InsufficientPrivileges |
PostgreSQL grants、OpenBao policy、Kubernetes RBAC |
InstanceNotReady |
先恢复所引用 Instance |
Conflict |
registry UID、同名 DB/role、OpenBao metadata;禁止直接覆盖 |
CredentialProjectionFailed |
ClusterSecretStore、ExternalSecret Condition、目标 Secret |
ProvisioningFailed |
status.phase 及对应外部资源的回读结果 |
修复依赖后让正常 reconcile 自动重试。不要通过删除/重建 CR 规避 Conflict;新 UID 只会 使已有保留资源继续冲突。
Instance 管理凭据在首次装配连接时读取并缓存在进程内;连接故障重试不会重新读取 Bao 或自动更换密码。Bao 暂时不可用不会影响已经装配的 PostgreSQL 连接,但会阻止新 Instance 或新凭据引用的装配。手工更换 Bao 同一路径下的管理密码后,需要重启 controller, 或将 Instance 改为引用新的凭据路径。修改 endpoint/凭据引用会关闭旧连接并重新装配; 只修改 allowlist 不会刷新凭据。
Retain 后的资源
Retain 删除完成后,database、role、OpenBao record 和 registry 所有权记录仍存在但标记
unmanaged。v1alpha1 不支持重新关联。需要恢复管理时,使用 migration.md
把数据迁移到一个全新受管名称;不要手工把 registry UID 改成新 CR UID。
Delete 卡住
- 暂停应用写入并记录 Tenant UID、Instance UID、database、role 和 Bao path。
- 从 registry 和 OpenBao metadata 独立确认所有权。
- 检查删除阶段,修复 PostgreSQL/OpenBao/ESO 依赖,让 controller 继续。
- 若依赖永久丢失,列出每个可能残留的 database、role、KV metadata 和 Secret。
- 只有确认接受这些残留后,才人工移除 finalizer。
最终 finalizer 名称由 API 实现固定后补入命令。人工移除 finalizer不会执行剩余清理, 也不会把外部资源变成可由新 CR 接管的资源。
备份与恢复
- PostgreSQL VM/磁盘备份必须与数据库一致性策略配套;仅复制在线磁盘不自动等于有效 PostgreSQL 备份。
- PostgreSQL 备份必须包含管理 database 中的 controller registry。
- OpenBao 使用独立的受支持备份/快照流程,且恢复点应与 PostgreSQL 尽量接近。
- Kubernetes 侧备份 CR、controller 配置、ClusterSecretStore 和公开 CA bundle,不备份 明文 Secret 作为凭据事实来源。
- 定期在隔离环境执行恢复演练,验证 registry、KV metadata、应用登录及 Retain/Delete。
恢复后先停止 controller,核对 PostgreSQL/OpenBao 时间点与 UID 映射,再启动单副本 controller 观察;出现一侧存在、一侧缺失时不得手工生成新密码或改 registry,应先按 Conflict 处理并决定恢复哪一侧。
升级与紧急停止
有疑似越权删除或凭据泄漏时,先把 controller Deployment scale 到 0,保留 CR、registry 和日志证据,再撤销 OpenBao token/role 并限制 PostgreSQL 管理 role。恢复前在隔离环境 复现并确认不会扩大破坏。一般依赖故障无需 scale down,最终一致性会自动重试。