熱門分類
 載入中…
目錄

☸️ Proxmox VE 實戰:從零開始構建高可用性 Kubernetes (K8s) 叢集完整指南

    ☸️ Proxmox VE 實戰:從零開始構建高可用性 Kubernetes (K8s) 叢集完整指南

    目標:用 Proxmox VE 打底,建立可演練、可維運、可擴充的地端 K8s HA 叢集(含控制平面 VIP、LoadBalancer、備份與故障演練)。

    你會得到什麼

    • 一套「底層 VM 層 HA + 上層 K8s 控制平面 HA」的可落地架構
    • 可直接套用的 IP 規劃、Bridge/VLAN 分層、Gateway/DNS 佈局方式
    • kubeadm 建叢集 + kube-vip 控制平面 VIP + MetalLB 對外服務 IP
    • 備份/還原策略與故障演練清單(用來驗證不是「看起來很 HA」)

    適用情境

    • Homelab / PoC / 內網地端平台
    • 想用穩定底座(Proxmox)承載 K8s,而非全裸機手刻
    • 希望維運可控:模板、遷移、快照、備份、監控、升級都有路徑

    提醒:HA 的核心不是「裝了什麼」,而是「壞掉時會怎樣、多久恢復、資料一致性如何保證」。


    📌 目錄(點我展開)
    1. 架構設計:雙層 HA 與故障域
    2. 前置規劃:硬體、IP、Gateway、DNS
    3. Proxmox VE 叢集:Cluster + HA Manager
    4. K8s 節點 VM:模板化、Cloud-Init、自動化
    5. Kubernetes:kubeadm + kube-vip + CNI
    6. 對外服務:MetalLB + Ingress
    7. 儲存與備份:PBS / etcd / 工作負載備份
    8. 故障演練:你必須做的 6 個測試
    9. 維運清單:升級、監控、資安與日常 SOP

    1) 架構設計:雙層 HA 與故障域

    先定義一句話:Proxmox VE HA 解決「VM/節點故障」;K8s HA 解決「控制平面/工作負載故障」。兩者疊加,才是地端最常見、也最可維運的 HA 路線。

    參考拓撲(建議起手式)

    Proxmox VE Cluster(3 Nodes)
    ├─ 網路:Mgmt / K8s-Node / Storage(選用)(可用 VLAN 分段)
    ├─ 儲存:ZFS / Ceph(依你的維運能力選一套先穩住)
    └─ HA Manager:管理 K8s VM(控制平面/工作節點)
    
    Kubernetes Cluster(至少 3 Control Plane + N Worker)
    ├─ API VIP:kube-vip(對外入口固定,支援故障切換)
    ├─ CNI:Calico / Cilium(二選一)
    ├─ Service LB:MetalLB(提供 LoadBalancer IP)
    └─ Ingress:ingress-nginx(或你偏好的 Ingress Controller)

    如果你只有 2 台實體主機:仍可做,但要補上 QDevice / Witness;故障域與維運難度會提升。本文以 3 節點為主,落地最穩。


    2) 前置規劃:硬體、IP、Gateway、DNS

    硬體建議(保守但好活)

    • Proxmox 節點:至少 3 台;每台 8C/64GB 起跳較舒適(更少也能做,但升級/重建會更辛苦)
    • 儲存:若做 Ceph,保留專用磁碟與網路;若做 ZFS,建議鏡像/RAIDZ 並規劃備份
    • 網路:至少 2 張 NIC(Mgmt 與 K8s/Storage 分流更穩),或以 VLAN/Trunk 落實分段

    IP 規劃(範例,可直接套用)

    用途網段說明
    Mgmt(PVE 管理)10.10.10.0/24Proxmox Web/SSH、叢集管理流量
    K8s Node(VM 節點)10.10.20.0/24kubelet/Pod 通訊、API VIP 所在 L2(建議)
    Storage(選用)10.10.30.0/24Ceph Replication / iSCSI / NFS 等,建議獨立
    Service LB Pool10.10.20.200-10.10.20.230MetalLB 發放給 LoadBalancer Service 的 IP
    API VIP10.10.20.10kube-vip 對外固定入口(6443)

    Gateway 原則:Mgmt 與 K8s Node 網段建議各自有清楚的 Gateway(或由防火牆/核心交換器統一路由),避免「管理平面」與「服務平面」互相干擾。


    3) Proxmox VE 叢集:Cluster + HA Manager

    3.1 建立 Cluster(示意流程)

    1. 三台節點完成 Proxmox VE 安裝與基本網路(主機名、DNS、NTP)
    2. 選一台建立叢集,再將其他節點加入
    3. 確認 quorum 正常、時間同步正常(叢集最怕「時間飄」)
    # 在 pve1 建立 cluster(示意)
    pvecm create pve-cluster
    
    # 在 pve2/pve3 加入(示意)
    pvecm add 10.10.10.11
    
    # 檢查叢集狀態
    pvecm status
    pvecm nodes

    3.2 啟用 HA Manager(先抓一個明確原則)

    • 先把「K8s 控制平面 VM」加入 HA(優先保命)
    • 再把「K8s 工作節點 VM」加入 HA(依資源與故障策略決定)
    • 若底層儲存是共享/分散式(如 Ceph),HA 遷移更順;若是本機 ZFS,請先規劃複寫與復原方式
    # 建立 HA 群組(示意)
    ha-manager groupadd k8s-cp --nodes pve1,pve2,pve3 --nofailback 1
    
    # 把控制平面 VM 加入 HA(示意:vmid 201/202/203)
    ha-manager add vm:201 --group k8s-cp
    ha-manager add vm:202 --group k8s-cp
    ha-manager add vm:203 --group k8s-cp
    
    # 檢查 HA 狀態
    ha-manager status

    重點:HA 設定完不代表完成;你要做「斷電/斷網/關機」演練,確認 VM 真的會在可接受時間內恢復。


    4) K8s 節點 VM:模板化、Cloud-Init、自動化

    4.1 建議配置(起手式)

    角色數量CPU/Memory說明
    Control Plane34 vCPU / 8–16GB維持 etcd 與 API 穩定,避免與工作負載混住
    Worker3+4–8 vCPU / 16–32GB承載 Pod,依服務量水平擴充

    4.2 OS 與模板策略

    • 建議使用 Ubuntu LTS / Rocky Linux 等主流發行版,並以 Cloud-Init 建模板,後續擴節點只要複製模板即可。
    • VM 內建議安裝 qemu-guest-agent(讓 Proxmox 能看到真實 IP/狀態)。

    5) Kubernetes:kubeadm + kube-vip + CNI

    5.1 所有節點共通前置(示意)

    # 關閉 swap(K8s 常見必要條件)
    swapoff -a
    sed -i.bak '/ swap / s/^/#/' /etc/fstab
    
    # 常見核心參數(示意)
    cat <<EOF | tee /etc/sysctl.d/99-kubernetes.conf
    net.ipv4.ip_forward = 1
    EOF
    sysctl --system
    
    # 安裝 container runtime(示意:containerd)
    # 各發行版安裝方式不同,請依你使用的版本與官方文件進行。

    5.2 控制平面 VIP:kube-vip(建議放在 K8s Node 網段 L2)

    目標是讓 K8s API 對外只暴露一個入口:10.10.20.10:6443。當任一控制平面節點故障,VIP 會漂移到存活節點。

    # 先決條件:三台 control plane 在同一 L2(同網段/同 VLAN)
    API_VIP="10.10.20.10"
    API_PORT="6443"

    5.3 kubeadm init(第一台控制平面)

    # 在 cp1(例如 10.10.20.21)上初始化(示意)
    kubeadm init \
      --control-plane-endpoint "10.10.20.10:6443" \
      --upload-certs
    
    # 設定 kubectl
    mkdir -p $HOME/.kube
    cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    chown $(id -u):$(id -g) $HOME/.kube/config

    5.4 加入其他控制平面與工作節點

    # 依 kubeadm init 輸出內容,在 cp2/cp3 執行(示意)
    kubeadm join 10.10.20.10:6443 --token <token> \
      --discovery-token-ca-cert-hash sha256:<hash> \
      --control-plane --certificate-key <cert-key>
    
    # Worker 節點加入(示意)
    kubeadm join 10.10.20.10:6443 --token <token> \
      --discovery-token-ca-cert-hash sha256:<hash>

    5.5 安裝 CNI(Calico / Cilium 二選一)

    CNI 是 K8s 網路的核心元件;請依你的環境(是否需要 eBPF、是否要 NetworkPolicy)選擇。安裝後請先驗證 kubectl get nodes 全部 Ready。


    6) 對外服務:MetalLB + Ingress

    6.1 安裝 MetalLB(示意)

    在地端沒有雲端 Load Balancer 時,MetalLB 是最常用的補位方案:讓 Service type=LoadBalancer 也能分配外部 IP。

    # 安裝(示意;你可用 manifests 或 Helm)
    # kubectl apply -f ...
    
    # 配置 IP Pool(示意:10.10.20.200-10.10.20.230)
    cat <<EOF | kubectl apply -f -
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: lb-pool
      namespace: metallb-system
    spec:
      addresses:
      - 10.10.20.200-10.10.20.230
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: l2adv
      namespace: metallb-system
    spec: {}
    EOF

    6.2 Ingress Controller(示意)

    • Ingress-NGINX:最常見起手式
    • 對外入口建議配合 DNS(內網可用 split-horizon),並落實 TLS

    7) 儲存與備份:PBS / etcd / 工作負載備份

    7.1 VM 層(Proxmox / PBS)

    • VM 層備份能快速做整機復原(含 OS / 設定 / 版本狀態),是地端維運的「救命繩」。
    • 建議搭配 Proxmox Backup Server(PBS)做增量/去重,並規劃異地同步。

    7.2 K8s 層(etcd 與工作負載)

    • etcd snapshot:控制平面資料保命(建議排程 + 異地保存)
    • 工作負載備份:可評估 Velero(搭配 S3/NFS 目的地)
    • 資料庫類:優先用原生備份機制(PostgreSQL/MySQL),再談 Volume snapshot

    8) 故障演練:你必須做的 6 個測試

    沒有演練的 HA,等同沒有 HA。以下 6 個測試,建議你在 PoC 就做完並留下紀錄:

    1. 關掉一台 Proxmox 節點:控制平面 VM 是否自動在其他節點拉起?
    2. 關掉一台 Control Plane VM:API VIP 是否漂移?kubectl 是否可連?
    3. 關掉一台 Worker VM:Deployment 是否自動重排?服務是否維持可用?
    4. MetalLB 測試:LoadBalancer IP 是否可用?ARP 是否正常?
    5. 備份還原:VM 層還原一台 worker,能否重新加入叢集並恢復服務?
    6. 升級演練:先在測試叢集演練小版本升級與回滾路徑,再推正式

    9) 維運清單:升級、監控、資安與日常 SOP

    9.1 日常巡檢(建議每週)

    ✅ Proxmox:叢集 quorum、HA 狀態、儲存健康度(Ceph/ZFS)、備份任務成功率
    ✅ Kubernetes:節點 Ready、核心系統 Pod、憑證到期日、etcd snapshot、告警檢視
    ✅ 網路:VIP 漂移測試(小流量時段)、MetalLB IP 池餘額、Gateway 路由變更紀錄

    9.2 資安要點(最低限度)

    • 限制管理面(Proxmox Web/SSH、K8s 管理口)來源 IP;不要把管理口暴露到不受控網段
    • K8s 落實 RBAC、最小權限;必要時導入 NetworkPolicy
    • 備份目的地務必隔離權限;至少一份異地且不可任意刪除(勒索情境)

    結語

    用 Proxmox VE 建 K8s HA 的優勢在於「可視化、可模板化、可快速重建」,但真正的價值在於:你能把故障域分層、把備援演練制度化、把維運 SOP 固化。做到這三件事,你的叢集才會從「能跑」走向「能長期跑」。


    💬 留言互動:把你的環境與踩雷點留下來

    你目前的 Proxmox 節點數、網段(含 Gateway)、儲存(Ceph/ZFS)、以及你選的 CNI/Ingress,會直接影響 HA 的落地方式。 若你願意,把下列資訊貼在留言,我可以用「可維運」角度幫你檢視:

    • 節點數與硬體規格(CPU/RAM/磁碟)
    • 網路分段(Mgmt/K8s/Storage)與 Gateway 走向
    • 控制平面 VIP 方案(kube-vip / keepalived+haproxy)
    • MetalLB IP Pool 範圍與對外 DNS 規劃
    • 備份策略(PBS / etcd / 工作負載)與還原演練結果

    延伸閱讀

    — WWFandy Blog

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    張貼留言

    字級