Skip to content

赛博堡垒的数据心脏:CloudNativePG 高可用集群部署 (GitOps 版)

🌱 创建: 2026/05/01 ⏱️ 更新: 2026/05/22

This content is not available in your language yet.

📖 认识数据心脏:云原生时代的“活体”数据库

Section titled “📖 认识数据心脏:云原生时代的“活体”数据库”

在 HomeLab 的演进过程中,应用可以随时销毁重建,但数据永远是核心资产。传统的 Docker 挂载或手写 StatefulSet 的方式,在面临节点宕机时往往显得极为脆弱。

今天,我们要为赛博堡垒安装一颗真正的“心脏”——CloudNativePG (CNPG)。它不仅仅是一个数据库,它是一个原生 Kubernetes Operator(数据库管家)。它能感知 Master/Replica 状态,实现秒级切主,并原生支持声明式的账号分配。

我们将采用一库多用 (Shared Cluster) 的极简架构,并通过 ArgoCD 的多源混合部署,实现基础设施配置的绝对 GitOps 化。

👉 情报中心:besthomelab/k3s-homelab-gitops 图纸库


🎬 施工演示录像 (Video Walk-through)

Section titled “🎬 施工演示录像 (Video Walk-through)”
正在嗅探浏览器语言并加载赛博录像...

🔨 赛博流水线施工 (GitOps Workflow)

Section titled “🔨 赛博流水线施工 (GitOps Workflow)”

在 CNPG 的世界里,施工必须分为两个严格的阶段:先聘请管家(Operator),再下发图纸(Cluster)。

步骤 1:入驻大管家 (Deploy CNPG Operator)

Section titled “步骤 1:入驻大管家 (Deploy CNPG Operator)”

管家不存储任何业务数据,它只负责监听 K8s 里的集群定义指令。为了安全与隔离,我们将官方推荐的 cnpg-system 命名空间作为它的办公室,并严格限制了它的内存占用(最高 512Mi),防止它抢占 K3s 核心组件的资源。

👉 获取管家雇佣合同 (Application):infrastructure/cnpg-operator-app.yaml

👉 获取管家资源限制 (Values):infrastructure/cloudnativepg/values.yaml

⚠️ 包工头警告:施工顺序! 必须先将 Operator 的 Application 推送到 Git,等待 ArgoCD 同步变绿,确保管家已经就位,才能进行下一步!

步骤 2:下发数据中心图纸 (Deploy Database Cluster)

Section titled “步骤 2:下发数据中心图纸 (Deploy Database Cluster)”

管家就位后,我们终于可以建立真正的数据库实例了。我们将它部署在专属的 database 命名空间。这份图纸调用了 Longhorn 分布式存储,配置了“一主一从”的高可用架构。

我们利用官方 Helm Chart 的特性,在 YAML 中直接声明了 test_usertest_db

👉 获取实例拉起指令 (Application):infrastructure/homelab-db-cluster-app.yaml

👉 获取核心数据库参数 (Values):infrastructure/cloudnativepg/db-values.yaml


🗺️ 数据中心中枢:架构调度全解析 (Architecture Flow)

Section titled “🗺️ 数据中心中枢:架构调度全解析 (Architecture Flow)”

在这套架构下,你的 Git 提交指令是如何转化为物理磁盘上的数据的?让我们透视这套“自愈系统”的底层运作:

💡 深度原理解析:CNPG 为何强大?

Section titled “💡 深度原理解析:CNPG 为何强大?”
  1. 原生的灾备分离:如拓扑图所示,你的主从节点分别挂载了独立的 Longhorn PVC。这意味着不仅数据库应用层实现了高可用,底层的物理数据也做到了完全隔离与冗余。
  2. 声明式密码流转:CNPG 自动截获了我们在 values.yaml 中配置的 test_user,在内部执行完建库建号后,立刻将密码加密成 K8s Secret 存储。全程没有任何明文密码硬编码在你的代码仓库中。

📋 架构师的日常巡检:如何提取最高权限?

Section titled “📋 架构师的日常巡检:如何提取最高权限?”

当 ArgoCD 状态全绿后,你需要拿到数据库的“保险箱钥匙”,以便后续接入 pgAdmin 进行图形化管理。

1. 查看集群健康度:

Terminal window
# 预期看到 2 个实例 (1 primary, 1 standby),状态为 Cluster in healthy state
kubectl get cluster -n database homelab-db-cluster -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,INSTANCES:.status.instances,READY:.status.readyInstances

2. 提取超级管理员 (postgres) 密码:

Terminal window
# 解密并输出 postgres 用户的超级管理员密码
kubectl get secret -n database homelab-db-cluster-superuser -o jsonpath='{.data.password}' | base64 --decode && echo

3. 提取测试用户 (test_user) 密码:

Terminal window
# 验证我们的声明式创建是否成功
kubectl get secret -n database homelab-db-test_user -o jsonpath='{.data.password}' | base64 --decode && echo

拿着这把钥匙,在下一期的工程中,我们将部署图形化面板 pgAdmin,接管这座庞大的数据堡垒!

Last updated: