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
2
3
4
5
6
7
8
9
10
11
12
+------------------------------+
| Kubernetes Cluster |
|------------------------------|
| Scheduler → Karpenter | ←→ EC2 Fleet API
| (Pods Pending) |
+------------------------------+

|
Provisioner (YAML)
|
Node Template (Instance type, AMI, AZ, Spot/On-Demand)

  1. Pod 因無節點可執行而 Pending
  2. Karpenter 監聽到事件
  3. 根據 Provisioner 設定,動態選 EC2 類型與數量
  4. 呼叫 EC2 API 建立節點(非 ASG)
  5. 節點啟動後自動加入 EKS
  6. 無使用中的節點則自動移除以節省成本

主要元件

元件功能
Karpenter Controller在 Kubernetes Cluster 中運行,監控 Pod 狀態
ProvisionerYAML 設定檔,定義擴容策略(支援 instance type、AZ、Spot…)
Node Template定義 EC2 參數,如 AMI、Security Group、Subnet
Consolidation自動合併低利用率節點以降低成本
TTL Seconds After Empty節點閒置多久後自動移除

Karpenter vs Cluster Autoscaler

比較項目KarpenterCluster Autoscaler (CA)
節點來源直接呼叫 EC2 API綁定 Auto Scaling Group
反應速度秒級幾分鐘級
支援 Spot✅ 原生支援⚙️ 複雜設定
實例選擇智慧選擇最佳 instance type固定於 ASG
節點合併✅ 自動壓縮空閒節點❌ 無此功能
成本效率
維運複雜度
管理介面YAML ProvisionerASG 設定

Reference

  • AWS - Karpenter