Karpenter Consolidation & Disruption Budget
說明 Karpenter 的 consolidationPolicy 與 disruption budgets 的作用、搭配方式,以及保守到激進三種設定範例。
Karpenter 運作原理

Karpenter 是 AWS 開源的 Kubernetes 自動擴縮容器排程器,除了能根據工作負載自動啟動/關閉節點之外,還提供了 Disruption Budget 與 Consolidation Policy,讓使用者能更細緻地控制節點調整的「節奏」與「策略」。這兩者是省成本與穩定性的核心平衡器。
先來看範例:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: general
spec:
disruption:
budgets:
- nodes: 50%
- duration: 9h
nodes: 5%
schedule: 0 9 * * mon-fri
consolidateAfter: 15m
consolidationPolicy: WhenEmptyOrUnderutilized
...
翻譯成白話文:
- 每週一到週五、9:00-18:00,只能砍 5% nodes,除此之外的時間可以砍到 50% 的節點。
- 觀察 15m 後就進行動作
- consolidationPolicy 意指壓縮會發生在「機器為空、或利用率不足時」
以下是 GPT 幫我整理的理解文件:
一、Consolidation Policy
1. 定義
consolidationPolicy 控制 Karpenter 何時、以什麼標準來收斂節點。簡單說,它回答了問題:「這台機器要不要收掉?」
2. 可選值
- Never
- 永不進行 consolidation。
- 適用情境:
- 想完全避免因為節點移動造成干擾。
- 特殊環境(例如金融法遵測試環境)需要長時間穩定。
- WhenEmpty
- 只有在節點完全沒有 Pod 時,才會移除節點。
- 適用情境:
- 保守策略,不影響業務。
- 適合剛上線或對穩定性要求高,但仍想避免空跑機器的場景。
- WhenEmptyOrUnderutilized
- 節點完全空,或是「利用率不足」時,就會考慮收掉。
- 判斷標準依據 Pod requests 與節點可用資源。
- 適用情境:
- 追求成本最佳化。
- 批次性工作、流量起伏大的平台。
- 已對關鍵服務設置好 PodDisruptionBudget (PDB),能抵禦 Pod 遷移帶來的影響。
二、Disruption Budget
1. 定義
disruption.budgets 用來限制「在同一時間允許多少節點被中斷」。它回答了問題:「一次可以動多少台?」
2. 基本欄位
- nodes
- 表示允許同時被中斷的節點比例或數量。
- 支援:
- 百分比(例如
20%) - 數字字串(例如
'1'表示最多一台)
- 百分比(例如
- duration
- 該規則生效的持續時間。
- schedule
- 使用 cron expression 指定觸發時間點。
- 與
duration搭配,能形成「時間區間」的限制。
3. 常見設計模式
- 全域預設
→ 平常最多 20% 的節點同時被中斷。- nodes: 20% - 上班時間禁止
→ 每週一到五早上 9 點開始,9 小時內不允許整併。- duration: 9h nodes: "0" schedule: 0 9 * * mon-fri - 低峰時段加強
→ 晚上流量低,允許一次動掉一半節點,加速節省成本。- duration: 12h nodes: 50% schedule: 0 20 * * * # 晚上 8 點開始
三、如何搭配使用
保守型(穩定優先)
consolidationPolicy: WhenEmpty
budgets:
- nodes: 10%
- 只清空機器,不動低利用節點。
- 適合金融、醫療、政府等高 SLA 場景。
平衡型(一般業務)
consolidationPolicy: WhenEmptyOrUnderutilized
budgets:
- nodes: 20%
- duration: 9h
nodes: 0
schedule: 0 9 * * mon-fri
- 平常最多動 20%,但上班時段完全靜止。
- 適合 SaaS / 電商業務,避免上班時間造成干擾。
激進型(成本優先)
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 15m
budgets:
- nodes: 60%
- 幾乎即時收斂,且一次可移除大部分節點。
- 適合批次工作集群、ML/CI/CD 測試環境。
- 前提是:有設定好 PDB、ReplicaSet/HPA,能自我修復。
四、實務建議
- 結合 PDB 與 HPA
- 讓應用本身具備彈性,才不怕 Pod 被遷移。
- 漸進式調整
- 從
WhenEmpty開始,再進階到WhenEmptyOrUnderutilized。 - Budget 先保守(10~20%),再逐漸放寬。
- 從
- 利用 schedule
- 上班時間保守,夜間/假日激進。
- 配合業務流量型態,成本最佳化。
- 監控與回饋
- 觀察 Node 數量、Cluster Cost、Pod Restart 次數,評估策略效果。
- 適度調整
consolidateAfter(例如 1h → 15m)。
五、總結
- Consolidation Policy 決定「什麼情況下」移除節點。
- Disruption Budget 決定「同一時間可以動**(刪除)**多少節點」。
- 兩者合用,就像一個「油門」與「剎車」,讓 Karpenter 在 成本 與 穩定性 之間找到平衡點。
- 選擇策略的關鍵在於:
- 工作負載是否能承受 Pod 遷移
- 流量曲線是否有明顯高低峰
- 成本壓力 vs 穩定性優先度