睡个好觉,Cluster 正确:凌晨3点别再烧钱

发布: (2025年12月20日 GMT+8 23:28)
3 min read
原文: Dev.to

Source: Dev.to

问题:始终在线的集群

大多数 Kubernetes 集群即使在用户不活跃时也会 24/7 运行。基于 CPU 的 HPA 试图提供帮助,但很快就会失效,尤其是在加入 VPA 时更是如此。没有更智能的伸缩方式,HPA 与 VPA 互相冲突,导致空闲 pod 和资源浪费。

使用 KEDA 的事件驱动伸缩

KEDA 让我们能够基于真实事件而不是猜测进行伸缩:

  • Prometheus scaler – 当相关指标显示有工作时触发伸缩。
  • Cron scaler – 定义明确的时间窗口(例如下班时间)来缩减工作负载。

在高峰时段,指标触发器驱动快速扩容;在低流量时段,cron 触发器执行可预测的缩容。通过组合两者,工作负载仅在有任务时运行。请求一到达,pod 就会快速扩容;较长的缩容周期处理剩余流量后,再次收缩集群。

使用 Karpenter 的节点级自动伸缩

即使 pod 伸缩完美,空闲节点仍然会产生费用。Karpenter 与 KEDA 互补:

  • 在工作负载消失后立即合并并终止空节点。
  • 仅在需要时提供更大、更“强壮”的节点。
  • 使用 cron 触发器在早晨预热节点,确保开发者零等待就绪。

如果夜间有早鸟流量,指标驱动的伸缩会在 cron 窗口结束后接管,保持 pod 在需要时可用。

综合实现步骤

  1. 定义 KEDA 触发器

    • 用于请求速率或延迟指标的 Prometheus scaler。
    • 用于已知非高峰时段的 Cron scaler。
  2. 配置 VPA,在不与 HPA 冲突的情况下调整 pod 资源(KEDA 替代 HPA)。

  3. 启用 Karpenter,并设置合适的 provisioner 参数(实例类型、限制、合并策略)。

  4. 添加预热 cron 触发器,让节点在第一个开发者登录前就准备好。

好处

  • 成本节约 – 不再为闲置计算或待机节点付费。
  • 可预测的性能 – 工作负载仅在需要时伸缩。
  • 降低运维工作量 – 自动节点供应与终止。
  • 资源高效利用 – pod 和节点仅在活跃期间存在。

停止为闲置时间付费。让 KEDA 的事件驱动触发器和 Karpenter 的节点管理为你的基础设施工作。

Back to Blog

相关文章

阅读更多 »