# AWS - Karpenter
# Karpenter
AWS Karpenter 是一個 開源、自動化、高效率的 Kubernetes 節點調整器 (node autoscaler),會根據 Pod 的即時需求,自動在 EC2 上啟動、擴容或終止節點,讓 Kubernetes Cluster 更快、更便宜、更智慧地運行。
# Karpenter 解決了什麼問題
在傳統 EKS 叢集裡,你會用:
- Managed Node Group
- Cluster Autoscaler (CA)
但這些機制有幾個痛點
| 問題 | 原因 |
|---|---|
| 擴容慢 | Cluster Autoscaler 要等 metrics 更新,且依賴 ASG |
| 彈性低 | 實例型別固定在 ASG 裡 |
| 成本高 | 無法充分利用 Spot、不同 instance family |
| 複雜 | 需要手動建立多組 Node Group 與 scaling policy |
Karpenter 解法
- 不再依賴 Auto Scaling Group
- 直接向 EC2 API 要節點
- 根據 Pod 的 CPU / Memory 需求,自動選最適實例型別(on-demand 或 spot)
- 秒級反應,極速啟動節點
# Karpenter 的架構
1 | +------------------------------+ |
- Pod 因無節點可執行而 Pending
- Karpenter 監聽到事件
- 根據 Provisioner 設定,動態選 EC2 類型與數量
- 呼叫 EC2 API 建立節點(非 ASG)
- 節點啟動後自動加入 EKS
- 無使用中的節點則自動移除以節省成本
# 主要元件
| 元件 | 功能 |
|---|---|
| Karpenter Controller | 在 Kubernetes Cluster 中運行,監控 Pod 狀態 |
| Provisioner | YAML 設定檔,定義擴容策略(支援 instance type、AZ、Spot…) |
| Node Template | 定義 EC2 參數,如 AMI、Security Group、Subnet |
| Consolidation | 自動合併低利用率節點以降低成本 |
| TTL Seconds After Empty | 節點閒置多久後自動移除 |
# Karpenter vs Cluster Autoscaler
| 比較項目 | Karpenter | Cluster Autoscaler (CA) |
|---|---|---|
| 節點來源 | 直接呼叫 EC2 API | 綁定 Auto Scaling Group |
| 反應速度 | 秒級 | 幾分鐘級 |
| 支援 Spot | ✅ 原生支援 | ⚙️ 複雜設定 |
| 實例選擇 | 智慧選擇最佳 instance type | 固定於 ASG |
| 節點合併 | ✅ 自動壓縮空閒節點 | ❌ 無此功能 |
| 成本效率 | 高 | 中 |
| 維運複雜度 | 低 | 高 |
| 管理介面 | YAML Provisioner | ASG 設定 |
# Reference
- AWS - Karpenter