Mac Mini K8s 三節點建置流程

建立日期:2026-04-11
更新日期:2026-05-17 (修正靜態 IP、CNI 參數與全文件步驟對齊)
分類:flowchart
前置條件:已安裝 Multipass 1.15+、Mac 連接至 192.168.50.x/24 網段

總覽流程圖

flowchart TD
    A([開始]) --> B[Step.0\n建立 VM 與靜態 IP 設定]
    B --> C[Step.1\n所有節點環境預備]
    C --> D[Step.2\nMaster 初始化與 Cilium 安裝]
    D --> E[Step.3\nWorker 加入叢集]
    E --> F[Step.4\n節點標記與 Taint]
    F --> G[Step.5\n基礎設施服務部署]
    G --> H[Step.6\n應用部署與最終驗證]
    H --> I([Cluster Ready ✅])

Step.0:建立 Multipass VM 與網路設定

flowchart TD
    S([開始]) --> V1[multipass launch --network en0]
    V1 --> V2[進入 VM 修改 Netplan\n設定靜態 IP 192.168.50.201-203]
    V2 --> CHK{三台 VM 都能\n互相 Ping 通靜態 IP?}
    CHK -- Yes --> OK([Step.0 完成])
    CHK -- No --> FIX[檢查 Netplan 設定與 en0 網路]
    FIX --> V2

Step.1:所有節點環境預備

flowchart TD
    S([進入每台 VM]) --> HOSTS[設定 /etc/hosts\n寫入三台靜態 IP]
    HOSTS --> SW[關閉 swap]
    SW --> CON[安裝 conntrack socat\nUbuntu 24.04 必裝]
    CON --> MOD[載入核心模組 + sysctl\noverlay + br_netfilter]
    MOD --> CRI[安裝 CRI-O v1.31]
    CRI --> K8S[安裝 kubeadm/kubelet/kubectl]
    K8S --> DONE([Step.1 完成])

Step.2:Master 初始化與 Cilium 安裝

flowchart TD
    S([進入 k8s-master]) --> INIT["kubeadm init\n--apiserver-advertise-address=192.168.50.201\n--skip-phases=addon/kube-proxy"]
    INIT --> CILIUM["安裝 Cilium CLI 與 Helm\n指定 k8sServiceHost=192.168.50.201"]
    CILIUM --> DONE([Step.2 完成])

Step.3:Worker 加入叢集

flowchart LR
    S([取得 join command]) --> J1["在 k8s-infra 執行\nkubeadm join ..."]
    J1 --> J2["在 k8s-worker 執行\nkubeadm join ..."]
    J2 --> CHK{"kubectl get nodes\n顯示 3 個節點?"}
    CHK -- Yes --> DONE([Step.3 完成])

Step.5:基礎設施服務部署

flowchart TD
    S([在 Master 執行]) --> H1[部署 ingress-nginx]
    H1 --> H2[部署 metrics-server]
    H2 --> H3[部署 kube-prometheus-stack\non Infra Node]
    H3 --> H4[部署 OpenSearch + Fluent-bit]
    H4 --> DONE([Step.5 完成])

Step.6:應用部署與驗證

flowchart TD
    S([驗證]) --> APP[部署 Simple Web App\non Worker Node]
    APP --> CHK{透過 NodePort\n存取網頁正常?}
    CHK -- Yes --> DONE([🎉 Cluster 完整建置完成])
    CHK -- No --> DBG[檢查 Service 與 Pod 狀態]

驗證 Checklist

  • 所有節點狀態為 Ready (kubectl get nodes)
  • Cilium 狀態為 OK (cilium status)
  • 所有系統 Pod 狀態為 Running
  • 可從 Mac Mini 存取 Web App NodePort
  • Grafana 儀表板可正常開啟