Files
42_38/PVECluster_Architecture.md

16 KiB
Raw Blame History

PVECluster 叢集架構文件

最後更新2026-04-18CT100 升級為 NetBird Subnet Router廣播 192.168.42.0/24

一、叢集概覽

項目
叢集名稱 PVECluster
PVE 版本 8.4.14Kernel 6.8.12-16-pve
節點數 3
Quorum 正常corosync_votequorum
VM/容器總數 22含 1 個 template
HA 未啟用

二、節點硬體規格

三台節點規格完全相同:

項目 規格
CPU Intel Core i3-6100 @ 3.70GHz2C/4T
記憶體 16 GB DDR4
系統碟 ~68 GBLVM含 local + local-lvm
網卡 Realtek RTL8111 GbE
顯示 Intel HD Graphics 530內顯
SATA Intel Q170 Chipset AHCI

節點清單

節點 IP 用途 上線時間
pve 192.168.42.38 主節點 ~9.2 天
pve-02 192.168.42.39 工作節點 ~9.2 天
pve-03 192.168.42.40 工作節點 ~9.2 天

節點資源使用(即時快照)

節點 CPU 使用率 記憶體使用 系統碟使用
pve ~7% 6.7 GB / 16 GB (43%) 12.2 GB / 68 GB
pve-02 ~12% 10.9 GB / 16 GB (70%) 12.1 GB / 68 GB
pve-03 ~15% 10.1 GB / 16 GB (64%) 11.0 GB / 68 GB

三、網路架構

網際網路
    │
    ▼
[192.168.42.10]  GatewayOpenWRT VM 110 的 GW
    │
    ├── vmbr0 (Linux Bridge)
    │   ├── pve    (enp1s0) — 192.168.42.38/24
    │   ├── pve-02 (enp1s0) — 192.168.42.39/24
    │   └── pve-03 (enp1s0) — 192.168.42.40/24
    │
    ├── VM 110 OpenWRT — 進階路由/防火牆
    │
    └── 所有 VM/CT 皆掛在 vmbr0
        IP 範圍192.168.42.100 ~ 192.168.42.126
  • Bridge: vmbr0每節點各一bridge port 為 enp1s0
  • Gateway: 192.168.42.10
  • SDN Zone: localnetwork(三節點皆啟用,狀態正常)
  • 所有 VM/CT 靜態 IP,格式為 192.168.42.<VMID>

NetBird Subnet Router遠端存取內網

  • Router 節點: CT100192.168.42.100NetBird IP 100.71.236.202
  • 廣播網段: 192.168.42.0/24Network Route home-lanmetric 9999masquerade=true
  • 分發群組: personalMac、iPhone 等個人裝置)
  • Access Control: personalservers
  • 效果: personal 群組成員路由表自動新增 192.168.42.0/24 → CT100 NetBird IP,可透過 CT100 存取整個 LAN 上的任何裝置OpenWrt .10、PVE 節點 .38/.39/.40、NAS .20 等,即使該裝置未安裝 NetBird
  • 主機端設定: CT100 上 /etc/sysctl.d/99-netbird-route.confnet.ipv4.ip_forward=1(持久化)
  • 為何不選 CT124: CT124 的 Tailscale 是 kernel-modeiptables-legacy ts-forward chain 的 100.64.0.0/10 → !tailscale0 DROP 規則會與 NetBird 的 forwarding/masquerade chain 衝突CT100 的 Tailscale 為 userspace無此問題

四、儲存架構

儲存池一覽

儲存名稱 類型 共享 容量 已用 用途
local dir 68 GB/節點 ~12 GB ISO、備份、模板
local-lvm lvmthin ~160 GB/節點 變動 VM 磁碟、CT rootfs
syno-lvm LVM (iSCSI) 1 TB ~642 GB VM 磁碟、CT rootfs主要儲存
syno-iscsi iSCSI syno-lvm 的底層 target
synology-backup CIFS 2.75 TB ~2.37 TB 備份、ISO、模板、snippets
pbs PBS 78 GB ~16 GB Proxmox Backup Server 備份

儲存拓撲

Synology NAS (192.168.42.20)
├── iSCSI Target ──► syno-iscsi ──► syno-lvm (LVM, 1TB, 共享)
│   └── 大部分 VM/CT 磁碟存放於此
└── CIFS Share (Backup) ──► synology-backup (2.75TB, 共享)
    └── 備份、ISO、模板

Proxmox Backup Server (192.168.42.30, VM 111)
└── PBS datastore "data-store" ──► pbs (294GB, 共享)
    └── VM/CT 快照備份

各節點本地
├── /var/lib/vz ──► local (68GB)
│   └── ISO、vztmpl、備份
└── LVM thin pool ──► local-lvm (~160GB)
    └── 部分 VM/CT 磁碟CT112, CT113, CT123

五、VM / 容器清單

QEMU 虛擬機

VMID 名稱 節點 狀態 CPU 記憶體 磁碟 Tags 用途
110 OpenWRT pve running 2C 512 MB 8 GB (syno-lvm) openwrt OpenWRT 24.10.4 路由器/防火牆/PPPoE/WireGuard
111 PBS pve-02 running 2C 2 GB 32G + 80G (syno-lvm) backup;pbs PBS (192.168.42.30:8007) 78GB, 41 筆備份
120 K3s Server pve-02 running 2C 8 GB 83 GB (syno-lvm) k3s K3s control-planeServer
121 K3s Agent pve running 2C 8 GB 82 GB (syno-lvm) k3s K3s worker node
122 K3s Agent pve-03 running 2C 8 GB 82 GB (syno-lvm) k3s K3s worker node
9000 ubuntu-2404-cloud-template pve template 2C 2 GB 3.5 GB (syno-lvm) cloud-init;template UEFI/q35 Cloud-init VM 模板 (user=ubuntu, DHCP)

LXC 容器

VMID 名稱 節點 狀態 CPU 記憶體 磁碟 IP Tags / 用途
100 CT100 pve-02 running 1C 256 MB 8G (syno-lvm) .42.100 SSH Jump Box + Bore Server (:7835) + Tailscale + NetBird (100.71.236.202, ct100.netbird.selfhosted) + NetBird Subnet Router (192.168.42.0/24, masquerade) + Watchtower
101 CT101 pve-02 running 1C 128 MB 8G (syno-lvm) .42.101 RustDesk Server (21115-21119) + Headscale (備用) + NetBird (100.71.200.94, ct101.netbird.selfhosted) + Watchtower
102 CT102 pve running 1C 512 MB 8G (syno-lvm) .42.102 Tailscale + Proxy Pool + Cloudflare Tunnel + Watchtower
104 CT104 pve running 1C 96 MB 8G (syno-lvm) .42.104 Caddy 靜態檔案/反向代理 (:80) + Tailscale
105 CT105 pve running 1C 128 MB 8G (syno-lvm) .42.105 EchoIP (mpolden/echoip:8080) + Watchtower
107 CT107 pve-02 running 1C 64 MB 8G (syno-lvm) .42.107 MailPit (axllent/mailpit, Web:8025 SMTP:1025)
108 CT108 pve-03 running 4C 2 GB 16G (syno-lvm) .42.108 Python 微服務環境 (12 服務, supervisord+uv)
109 CT109 pve running 1C 512 MB 16G (local-lvm) .42.109 Hermes Agent v0.9.0 (NousResearch, Python 3.11 + Node.js)
112 CT112 pve-03 running 1C 2 GB 32G (local-lvm) .42.112 OpenClaw Gateway v2026.3.13 (Node.js)
114 CT114 pve-03 running 1C 128 MB 8G (syno-lvm) .42.114 Podman 測試 + Nginx Quadlet (:8080)
115 CT115 pve-02 running 2C 2 GB 40G (syno-lvm) .42.115 Lydia Prod — Python + Caddy + MSSQL Express
116 CT116 pve running 1C 128 MB 8G (syno-lvm) .42.116 Bark 推播通知 (finab/bark-server:8080) + Watchtower
117 CT117 pve-02 running 2C 2 GB 60G (syno-lvm) .42.117 Lydia Test — Python (:5000) + MSSQL Express
118 CT118 pve-03 running 1C 1 GB 8G (syno-lvm) DHCP PostgreSQL 16 + Redis + Proxy Pool (10x Tor) + Podman
124 CT124 pve-03 running 2C 8 GB 80G (syno-lvm) .42.124 Docker 服務集中台 (20+ 服務: NPM, Gitea, Karakeep, Vaultwarden, Jellyfin 等) + Tailscale (kernel-mode) + NetBird (100.71.40.35, ct124.netbird.selfhosted)
126 CT126 pve running 1C 256 MB 8G (syno-lvm) .42.126 Headscale v0.28.0 控制伺服器 (17 節點) + Tailscale + Watchtower

狀態統計

狀態 數量
Running 19
Stopped 0
Template 1VM 9000

各節點負載分佈

節點 VM LXC (running) LXC (stopped) 分配 CPU 分配記憶體
pve 2 (110, 121) 6 (102,104,105,109,116,126) 0 10C ~11.5 GB
pve-02 2 (111, 120) 5 (100,101,107,115,117) 0 11C ~15 GB
pve-03 1 (122) 5 (108,112,114,118,124) 0 8C ~22 GB

六、備份策略

Proxmox Backup Server

  • 位置: VM 111pve-02IP 192.168.42.30:8007
  • Datastore: data-store78 GB已用 ~16 GB
  • 保留策略: keep-all=1

備份排程(目前皆已停用 enabled=0

排程 目標 儲存 保留 壓縮
每日 03:00 CT115, CT117Lydia prod/test pbs keep-daily=7
02:30, 22:30 CT103, CT106, CT108, CT124 pbs keep-daily=7 zstd
每日 02:00 VM 110OpenWRT pbs keep-daily=3

Synology NAS 備份

  • 位置: 192.168.42.20CIFS share Backup
  • 容量: 2.75 TB已用 ~2.37 TB
  • CT124 有掛載 /mnt/ds1515-backup 指向此 share

七、關鍵服務架構圖

┌─────────────────────────────────────────────────────────────────┐
│                        PVECluster                                │
│                  192.168.42.38/39/40                              │
├──────────────┬──────────────────┬────────────────────────────────┤
│   pve (.38)  │   pve-02 (.39)   │   pve-03 (.40)                │
├──────────────┴──────────────────┴────────────────────────────────┤
│                                                                   │
│  【網路層】                                                       │
│   VM110 OpenWRT 24.10.4 ── GW: 192.168.42.10                    │
│     PPPoE HiNet / WireGuard VPN (10.0.0.1)                      │
│     DNAT: SSH Jump, Bore, NPM, RustDesk, Headscale, SQL         │
│   CT104 Caddy ───── 反向代理80/443                           │
│   CT124 ─────────── NPM + Gitea + 20 服務集中台 + Tailscale + NetBird │
│                                                                   │
│  【認證/安全】                                                    │
│   CT124 Vaultwarden ── 密碼管理                                  │
│   CT100 ─────────── SSH Jump Box + Bore Server + Tailscale + NetBird + NetBird Subnet Router (192.168.42.0/24) │
│   CT101 ─────────── RustDesk Server + Headscale 備用 + NetBird遠端存取 │
│   CT102 ─────────── Tailscale + Cloudflare Tunnel + Proxy Pool    │
│   CT126 ─────────── Headscale 控制伺服器 (17 節點, 8080/9090/50443) │
│                                                                   │
│  【AI / Agent】                                                   │
│   CT109 ─────────── Hermes Agent v0.9.0 (NousResearch)           │
│                                                                   │
│  【應用服務】                                                     │
│   CT115 Lydia ───── Prod (Python + Caddy + MSSQL, SSH:30022)     │
│   CT117 Lydia ───── Test (Python:5000 + MSSQL, SSH:50022)        │
│   CT108 ─────────── Python 微服務 x12 (supervisord+uv, 4C/4GB)  │
│   CT112 ─────────── OpenClaw Gateway v2026.3.13 (Node.js)        │
│   CT124 Karakeep ── 書籤/知識管理 + Jellyfin 媒體               │
│                                                                   │
│  【Kubernetes (K3s v1.33.6 + Longhorn)】                          │
│   VM120 K3s ─────── Server/control-plane (pve-02, 8GB)           │
│   VM121 K3s ─────── Agent/worker (pve, 8GB)                      │
│   VM122 K3s ─────── Agent/worker (pve-03, 8GB)                   │
│   服務: Traefik, CodiMD, Adminer, HTTPbin,                       │
│         OpenGist, PostgreSQL, Vaultwarden                         │
│                                                                   │
│  【工具/通知】                                                    │
│   CT107 ─────────── MailPit郵件測試                          │
│   CT116 ─────────── Bark推播通知                             │
│   CT105 ─────────── EchoIPIP 查詢port 8080                 │
│                                                                   │
│  【資料庫】                                                       │
│   CT118 ─────────── PostgreSQL 16 + Redis + Proxy Pool (10x Tor) │
│                                                                   │
│  【備份】                                                         │
│   VM111 PBS ─────── Proxmox Backup Server (192.168.42.30)        │
│   Synology NAS ──── iSCSI (syno-lvm) + CIFS (backup)            │
│                      192.168.42.20                                │
│                                                                   │
│  【模板】                                                         │
│   VM9000 ────────── Ubuntu 24.04 Cloud-init Template             │
└──────────────────────────────────────────────────────────────────┘

八、已知問題與注意事項

Tailscale kernel-mode + NetBird 共存iptables-legacy 封包丟棄

適用場景:同一台容器/主機上 Tailscale 以 kernel mode 運行(非 userspace又要加掛 NetBird client。目前 CT124 是此情境CT100/CT101 的 Tailscale 是 userspace不受影響

症狀NetBird tunnel wt0 建立成功、peer 狀態 Connected但從其他 NetBird peer ping CT124 的 100.71.40.35 完全不通CT124 本地也收不到任何 NetBird 流量。

成因Tailscale kernel mode 會在 iptables-legacyts-inputts-forward chain預設把 100.64.0.0/10CGNAT範圍內、且 不是tailscale0 進來的封包全部 DROP。NetBird 的 100.71.0.0/16 剛好落在這個 CGNAT 區段內,於是 wt0 收到的 NetBird 封包會被 Tailscale 的 rule 靜默丟掉。

修復:在 iptables-legacy 裡針對 wt0 介面放行,並放在 chain 最前面(-I ... 1)以搶在 Tailscale rule 之前:

iptables-legacy -I INPUT   1 -i wt0 -j ACCEPT
iptables-legacy -I FORWARD 1 -i wt0 -j ACCEPT
iptables-legacy -I FORWARD 1 -o wt0 -j ACCEPT

開機持久化CT124 上已部署):

  • /usr/local/sbin/netbird-iptables-legacy-fix.sh — 執行上述三條規則的腳本
  • /etc/systemd/system/netbird-iptables-fix.service — 開機時呼叫該腳本的 oneshot unit

未來若有其他 CT 同時跑 Tailscale kernel mode + NetBird需套用相同 workaround。

Ubuntu 25.04 LXC 容器 Console 無法登入

Ubuntu 25.04 的 systemd 新增了 ImportCredential 指令,在 LXC 容器中不支援,導致 console-getty.service 啟動失敗exit 243/CREDENTIALSWeb Console 看不到登入提示。

修復方式(建立容器後立即執行):

pct exec <vmid> -- bash -c 'mkdir -p /etc/systemd/system/console-getty.service.d && cat > /etc/systemd/system/console-getty.service.d/override.conf << EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o "-- \\\\u" --noreset --noclear --keep-baud 115200,57600,38400,9600 - \$TERM
ImportCredential=
EOF
systemctl daemon-reload && systemctl reset-failed console-getty && systemctl restart console-getty'

建議同時加上 features: nesting=1tty: 2

pct set <vmid> -features nesting=1 -tty 2

九、Corosync 叢集通訊

totem:
  cluster_name: PVECluster
  version: 2
  secauth: on
  link_mode: passive
  ip_version: ipv4-6

nodelist:
  pve     (nodeid=1, ring0=192.168.42.38, votes=1)
  pve-02  (nodeid=2, ring0=192.168.42.39, votes=1)
  pve-03  (nodeid=3, ring0=192.168.42.40, votes=1)

quorum:
  provider: corosync_votequorum
  需要 2/3 節點在線才能維持 quorum