Kubernetes 自動擴容可以概括為 “三層六類”:
層級 | 類型 | 觸發維度 | 官方/社區方案 | 一句話說明 |
---|---|---|---|---|
Pod 級 | HPA | CPU / 內存 / 自定義 / 外部指標 | 內置 | 副本數橫向擴縮,最常用 |
VPA | CPU / 內存 | 社區組件 | 單 Pod 資源豎向擴縮,不改副本數 | |
KEDA | 任意事件(隊列、Kafka、Prometheus…) | CNCF 畢業 | 事件驅動自動擴縮,支持 Cron 計劃 | |
節點級 | Cluster Autoscaler | Pod 調度失敗 / 節點資源空閑 | 社區 | 自動增刪節點,云廠商集成最成熟 |
Cluster Proportional Autoscaler | 節點數 / CPU 核數 | 社區 | 系統組件隨集群規模線性擴容 | |
混合級 | CPA + VPA | 節點數 → 副本或資源 | 社區 | 按集群規模同步調整副本?或?資源 |
1 HPA(Horizontal Pod Autoscaler)
能力:根據實時指標自動增減 Deployment / StatefulSet 副本數。
指標類型:
Resource(CPU / Memory)
Pods(自定義 Pod 級指標)
External(集群外指標,如云監控)
關鍵字段:
minReplicas
、maxReplicas
behavior.scaleUp/scaleDown
限制速率、穩定窗口
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: web-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: webminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 60
2 VPA(Vertical Pod Autoscaler)
作用:在 不重啟 Pod 或 重啟 Pod 的情況下,自動調整容器的
requests/limits
。模式:
Auto
:重啟 Pod 以生效Recreate
:立即重啟Off
:僅推薦值
使用場景:數據庫、緩存等 有狀態 或 單實例 服務。
3 KEDA(Kubernetes Event-Driven Autoscaler)
特點:支持 50+ 事件源(Kafka、SQS、Prometheus、Cron…)。
架構:KEDA Operator + Scaler → 生成 HPA 對象。
示例(Kafka 隊列長度 > 1000 時擴容):
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:name: kafka-consumer
spec:scaleTargetRef:name: consumer-deploytriggers:- type: kafkametadata:topic: orderslagThreshold: "1000"
4 Cluster Autoscaler(節點自動擴縮)
觸發條件:
擴容:Pod 因資源不足 Pending。
縮容:節點 CPU/內存利用率 <
--scale-down-utilization-threshold
(默認 50%)且持續--scale-down-delay
(默認 10 min)。
云廠商集成:AWS、阿里云、GCP 均提供托管版本;自建時需:
部署 CA Pod(帶云憑證)
配置伸縮組 ID / 標簽 / 安全組
5 Cluster Proportional Autoscaler(CPA)
作用:讓系統組件(如 DNS、Ingress Controller)的副本數 隨節點數或 CPU 核數線性變化。
示例(每 20 節點 1 個 CoreDNS):
apiVersion: apps/v1
kind: Deployment
metadata:name: coredns
spec:replicas: 1
---
apiVersion: autoscaling/v1
kind: ClusterProportionalAutoscaler
metadata:name: coredns-cpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: corednscoresPerReplica: 20
6 混合場景:Cron + HPA
KEDA 的 Cron Scaler:在固定時間段(如 9:00–18:00)自動抬高
minReplicas
,高峰后回落。無代碼改動,只需在 ScaledObject 里加
trigger.type: cron
。
一句話總結
Pod 層用 HPA/VPA/KEDA,節點層用 Cluster Autoscaler,系統組件用 CPA;三層聯動即可實現從“Pod”到“節點”的完整自動彈性。