在算力租用的 Mac mini M4 上跑輕量 Kubernetes(K3s/k0s),隱性成本往往落在跨區映像拉取、解壓寫碟與統一記憶體下的CPU 請求與並發 Pod取捨。下文整理區域與節點如何影響 RTT 與出口、兩種發行版對照與決策矩陣,以及可複製的kubelet/命名空間配額參數起點。延伸:《Kind/minikube 映像矩陣》、《Docker/Podman 拉取與快取》、《區域延遲與批次租購》。方案/定價、購買/選節點、說明中心皆公開免登入。
區域節點選擇
K3s vs k0s 對照
兩者皆可在單機或少量節點上快速落地;差異主要在打包模型、組態路徑與維運習慣。下表用於決策,而非性能排名。
| 面向 | K3s | k0s | 建議情境 |
|---|---|---|---|
| 發行模型 | 單一二進位;內嵌 containerd、Flannel 等預設組合可關。 | 模組化控制面;常用 k0sctl 或自管生命週期。 | 要最短路徑邊緣/IoT常選 K3s;要可插拔控制面與團隊已有 k0s 經驗時選 k0s。 |
| Registry 鏡像 | /etc/rancher/k3s/registries.yaml(宿主/節點) |
依部署方式寫入 containerd 或 k0s 附帶路徑(參考當版文件)。 | 兩者皆應同區鏡像或 pull-through,並釘 digest。 |
| kubelet 調參 | /etc/rancher/k3s/config.yaml 內 kubelet-arg 等 |
k0s 設定中 spec.k0s.kubelet.extraArgs(欄位名依版本) |
先調並行拉取與拉取逾時,再抬 Job 並行。 |
| 維運心智負擔 | 社群素材多、與 Rancher 生態銜接成熟。 | 控制面拆分清楚,利於自訂 HA 與升級節奏。 | 團隊已標準化其一即可;混用前統一 runbook。 |
映像並發與資源配額範例
口訣:先限映像並行與拉取逾時,再抬並發 Pod。下列為可貼入組態或參考的起點(請依叢集版本調整鍵名)。
| 工作負載形態 | 映像並發 | CPU/Pod 上限(參考) | 逾時分層 |
|---|---|---|---|
| 跨區、高 RTT | max-parallel-image-pulls 二至三;必要時同區鏡像。 |
16GB:requests.cpu 合計預留約一至二核給系統/監控後再配工作負載。 |
kubelet 拉取逾時十分至十五分;Job 另設 activeDeadlineSeconds。 |
| 同區、批次 Job | 快取命中後再抬 Job 並行;digest 釘版。 | 24GB:命名空間 ResourceQuota 約束 requests.cpu 與 pods。 |
拉取逾時與業務截止時間分開,便於歸因 IO 或網路。 |
| 單節點全棧 | 寧可低並行換穩定;避免與建置暫存同卷競爭。 | LimitRange 預設 defaultRequest,防零請求 Pod。 |
升級/重啟窗與映像冷拉錯峰。 |
K3s kubelet 片段(/etc/rancher/k3s/config.yaml,鍵名依小版本為準):
kubelet-arg:
- "max-parallel-image-pulls=3"
- "image-pull-progress-deadline=10m"
k0s:在 k0s 設定中將同等參數放入 kubelet extraArgs(示例):
spec:
k0s:
kubelet:
extraArgs:
max-parallel-image-pulls: "3"
image-pull-progress-deadline: "10m"
命名空間配額(約束CPU requests 總和與Pod 數,避免批次一擁而上):
apiVersion: v1
kind: ResourceQuota
metadata:
name: batch-quota
namespace: batch
spec:
hard:
requests.cpu: "6"
requests.memory: 10Gi
pods: "12"
LimitRange(預設容器請求,避免「零 request」Pod 占滿排程):
apiVersion: v1
kind: LimitRange
metadata:
name: batch-limits
namespace: batch
spec:
limits:
- type: Container
defaultRequest:
cpu: 250m
memory: 256Mi
default:
cpu: "1"
memory: 1Gi
若Job 同時建立大量 Pod,請同步檢視活動監視器的記憶體壓力與磁碟佇列;activeDeadlineSeconds 與 kubelet 拉取逾時應分層,便於歸因。更多宿主層拉取見《容器部署加固與排錯》。