Kubernetes自动扩容方案
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”到“节点”的完整自动弹性。