集群架构
yldm 是一个自托管的 K3s 高可用集群,跑在 4 台 Proxmox VE 主机上的 7 台虚拟机里(3 master + 4 worker)。所有运行配置以 GitOps 方式由 ArgoCD 从 yldm-tech/k8s-config 仓库的 main 分支持续同步。
这个仓库里没有应用源码,全是 Kubernetes 配置。合并到
main 几分钟后改动就会被 ArgoCD 自动同步进集群,没有手动 kubectl apply 这一步 —— 合错了的配置会自己部署上去,所以合并前一定要先验证。四个层次
从下往上理解这套系统:
- Name
- ① 物理层 — Proxmox VE
- Description
- 4 台 PVE 主机组成 Proxmox 集群,外加 NAS 上的 QDevice 仲裁(共 5 票,可容忍任意 2 节点同时离线)。承载集群的虚拟机由独立仓库
pve-infra用 Terraform 管理 —— ArgoCD 够不到 hypervisor,改 VM 的 CPU/内存要去那个仓库。
- Name
- ② 集群层 — K3s HA
- Description
- 3 个 master 跑嵌入式 etcd 组成高可用控制面,4 个 worker 承载工作负载。API 通过 kube-vip 的 ARP 模式暴露在 VIP
192.168.88.99:6443。
- Name
- ③ 编排层 — ArgoCD
- Description
- App-of-apps 根应用 + 微服务 ApplicationSet 两层结构,把仓库目录变成集群里运行的 Application。详见 GitOps 工作流。
- Name
- ④ 应用层 — 业务与基础设施
- Description
- 业务服务(app / platform / game)、数据与消息中间件、可观测性、网络与安全、CI/CD 等。按 节点与调度 约定分布到不同 worker。
物理拓扑
3 master + 4 worker 分布在 4 台 PVE 主机上,NAS 提供 QDevice 第 5 票仲裁。worker3 是配置最高的节点(12c/48GB/500GB),同时承担数据库层和全部基础设施组件。
GitOps 流
开发者改 k8s-config 仓库 → 合并到 main → ArgoCD 检测到变更 → 自动同步进集群。镜像 tag 则由 argocd-image-updater 反向回写到仓库。
流量入口
外部流量经 MetalLB(L2 模式)分配的 LoadBalancer IP 进入 Traefik ingress,再路由到各服务。游戏服务器则通过 Oracle VPS 上的 frp 隧道暴露公网。
数据层
有状态的数据库(Postgres、MongoDB 等)以 StatefulSet 钉在 node-role=database 的 worker3 本地盘上;共享数据用 NFS Provisioner(PVE3 的 1TB NVMe)。
以上架构图源文件(D2 格式)位于仓库
docs/architecture/,用 docs/architecture/render.sh 重新渲染。