Kubernetes自动扩容方案

发布于:2025-07-30 ⋅ 阅读:(18) ⋅ 点赞:(0)

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(集群外指标,如云监控)

  • 关键字段

    • minReplicasmaxReplicas

    • behavior.scaleUp/scaleDown 限制速率、稳定窗口

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 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-deploy
  triggers:
  - type: kafka
    metadata:
      topic: orders
      lagThreshold: "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/v1
    kind: Deployment
    name: coredns
  coresPerReplica: 20

6 混合场景:Cron + HPA

  • KEDA 的 Cron Scaler:在固定时间段(如 9:00–18:00)自动抬高 minReplicas,高峰后回落。

  • 无代码改动,只需在 ScaledObject 里加 trigger.type: cron


一句话总结

Pod 层用 HPA/VPA/KEDA,节点层用 Cluster Autoscaler,系统组件用 CPA;三层联动即可实现从“Pod”到“节点”的完整自动弹性。


网站公告

今日签到

点亮在社区的每一天
去签到