集群架构

yldm 是一个自托管的 K3s 高可用集群,跑在 4 台 Proxmox VE 主机上的 7 台虚拟机里(3 master + 4 worker)。所有运行配置以 GitOps 方式由 ArgoCD 从 yldm-tech/k8s-config 仓库的 main 分支持续同步。

四个层次

从下往上理解这套系统:

  • 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 反向回写到仓库。

GitOps 流程图

流量入口

外部流量经 MetalLB(L2 模式)分配的 LoadBalancer IP 进入 Traefik ingress,再路由到各服务。游戏服务器则通过 Oracle VPS 上的 frp 隧道暴露公网。

流量入口图

数据层

有状态的数据库(Postgres、MongoDB 等)以 StatefulSet 钉在 node-role=database 的 worker3 本地盘上;共享数据用 NFS Provisioner(PVE3 的 1TB NVMe)。

数据层图

评论