# 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 狀態
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