Mac Mini M4 三節點 K8s 架構(Multipass + Bridge 網路)

建立日期:2026-04-11
分類:architecture
硬體:Apple M4 · 10C / 24GB RAM · macOS 15
工具:Multipass 1.15 · Ubuntu 24.04 LTS (ARM64) · Kubernetes 1.31

概述

使用 Mac Mini M4 本機,透過 Multipass 建立三台 Ubuntu 24.04 VM,橋接至 en0(192.168.50.x/24),搭建純 K8s 三節點 Lab 環境。不包含 KubeVirt(Apple Silicon 無 nested virtualization 支援),專注於 K8s 核心元件與基礎設施服務的學習。


架構圖

graph TB
    subgraph Host["Mac Mini M4 · 10C / 24GB · macOS 15"]
        subgraph Bridge["en0 Bridge · 192.168.50.x/24"]
            subgraph Master["k8s-master · 2C / 2.5GB · 192.168.50.201"]
                direction TB
                subgraph CP["K8s Control Plane"]
                    API[kube-apiserver]
                    ETCD[(etcd)]
                    SCH[kube-scheduler]
                    CM[kube-controller-manager]
                    API <--> ETCD
                    API <--> SCH
                    API <--> CM
                end
                KBM[kubelet]
                CRM[cri-o]
            end

            subgraph Infra["k8s-infra · 2C / 2.5GB · 192.168.50.202"]
                DNS[CoreDNS]
                ING[Ingress Controller]
                MS[Metrics Server]
                PROM[Prometheus]
                GRAF[Grafana]
                KBI[kubelet]
                CRI[cri-o]
            end

            subgraph Worker["k8s-worker · 2C / 2GB · 192.168.50.203"]
                WL1[App Pod 1]
                WL2[App Pod 2]
                WL3[App Pod 3]
                KBW[kubelet]
                CRW[cri-o]
            end
        end

        MP[Multipass Daemon]
        MP -- "manages VM lifecycle" --> Master
        MP -- "manages VM lifecycle" --> Infra
        MP -- "manages VM lifecycle" --> Worker
    end

    Infra -- "kubelet registers" --> API
    Worker -- "kubelet registers" --> API
    ING -- "routes traffic" --> Worker
    DNS -- "service discovery" --> Worker

    User((User)) -- HTTPS --> ING
    Admin((Admin)) -- kubectl --> API

節點規格

節點 VM 名稱 vCPU RAM Disk IP 角色
Master k8s-master 2 3GB 30GB 192.168.50.201 K8s Control Plane
Infra k8s-infra 2 3GB 30GB 192.168.50.202 基礎設施服務
Worker k8s-worker 2 3GB 40GB 192.168.50.203 App Workload
Mac Mini Host 保留 ~15GB macOS 系統
合計   6C 9GB + 15GB host 100GB    

✅ 最低可用規格:kubeadm 強制要求 Master ≥ 2 CPU,Infra/Worker 各 2C 足以跑 Lab 工作負載。
⚠️ Prometheus 記憶體需求較大(~500MB),Infra 2.5GB 為最低建議值,若 OOM 可先將 Prometheus retention 調低。


元件分配

Master Node — K8s 控制面

元件 功能 備註
kube-apiserver Cluster 唯一 API 入口 所有操作必經此處
etcd 儲存全部 Cluster 狀態 對延遲敏感,需穩定 CPU
kube-scheduler 決定 Pod 排程到哪個 Node  
kube-controller-manager 維護期望狀態 RS / Node / ServiceAccount
kubelet + cri-o Node agent + 容器執行環境 ARM64

Infra Node — Cluster 基礎設施

元件 功能 部署方式
CoreDNS Cluster 內部 DNS 隨 kubeadm 自動安裝
Ingress Controller 管理外部流量 Helm (ingress-nginx)
Metrics Server HPA/VPA metrics kubectl apply
Prometheus Cluster 監控 kube-prometheus-stack
Grafana 監控視覺化 含於 kube-prometheus-stack
OpenSearch 日誌聚合與搜尋 Helm (opensearch-project/opensearch)
Node Exporter 節點指標收集 DaemonSet
Fluent-bit Pod 日誌收集 DaemonSet

Node label: node-role=infra,以 nodeSelector 限制服務只排到此節點

Worker Node — App Workload

元件 說明
kubelet + cri-o ARM64 容器執行環境
App Pods 使用者部署的應用程式

⚠️ 所有容器映像需支援 arm64/aarch64 架構


網路說明

類型 說明
VM 網卡 Multipass bridge → en0 → 192.168.50.x/24
Pod Network (CNI) Cilium (172.46.0.0/16)
Service Network 10.96.0.0/12
NodePort 存取 直接用 VM IP + NodePort
Ingress 存取 透過 Infra Node IP + 80/443

與 KubeVirt 版本差異

項目 KubeVirt 版(Azure x86) 本版(Mac Mini ARM)
硬體 Azure VM x86_64 Mac Mini M4 ARM64
K8s 版本 v1.31 v1.31
容器執行時 cri-o cri-o
CNI Cilium Cilium
VM 管理 KubeVirt + QEMU/KVM ❌ 不支援(無 nested virt)
容器工作負載
成本 ~$350/月 一次性硬體成本
適合場景 VM workload 學習 K8s 核心 + 微服務學習

參考資料