Karpenter 开源地址:
https://github.com/kubernetes-sigs/karpenter
引言
在云计算领域,尤其是在像 QA(Quality Assurance)这样并非生产环境的场景中,基础设施的成本管理始终是一个挑战。
我们的 QA 环境对测试的稳定性要求较高,但我们注意到,大量基础设施成本都花在了 EC2 按需实例上。
经过深入调研,我们决定在 QA 环境中引入 Karpenter,并结合 Spot 实例与中断处理器进行优化。
本文将介绍我们在保证应用可靠性的前提下,从最初的架构出发、一路成功实现云支出大幅缩减的实践过程。
现有架构:引入 Karpenter 之前
在最初的设置中,我们为 QA 工作负载主要混合使用 EC2 按需实例。
这些工作负载经常需要扩缩容,以满足性能测试、集成测试和压力测试的需求,从而导致实例数量不断增加。
问题在于:按需实例的成本相当高。
-
• 实例类型: m5.large和c5.xlarge -
• 平均实例数量:50 个按需实例( m5.large与c5.xlarge混合) -
• 单个实例成本: m5.large约为 $0.096/小时,c5.xlarge约为 $0.192/小时 -
• 每日运行时间:每天 12 小时(QA 工作负载并非 7x24 小时) -
• 每月总成本:约 $4,500(两个实例类型合计)
这一设置虽然具备良好的稳定性,但成本较高。
通过进一步分析资源利用率,我们发现 QA 环境实际上能够容忍一定程度的中断,而不会对整体测试流程造成实质性影响。
挑战:成本与可靠性的平衡
虽然 Spot 实例相比按需实例最多可以节省约 90% 的成本,但当 AWS 需要回收容量时,只需提前2分钟通知,就可以终止这些实例。
对于生产环境而言,这种不确定性可能会带来不可接受的风险;但在 QA 环境中,只要系统能够平稳恢复,我们是可以接受一定程度的中断的。
我们的目标是将 QA 实例切换为 Spot 实例的同时,确保:
-
• 关键测试任务不中断 -
• 当 Spot 实例被回收时,系统能够平滑切换,保障测试流程连续性
解决方案:借助 Karpenter 实现对 Spot 实例的智能调度
我们选择了 Karpenter 作为解决方案。
Karpenter 是一款开源的 Kubernetes 集群自动扩缩容工具,能够根据实时的工作负载需求动态地即时调度和创建节点。
它与 AWS Spot 实例高度兼容,旨在以灵活、高性能和简洁的方式实现节点的弹性扩展,可以在 Spot 实例被终止后自动替换节点,从而确保集群的健康性和服务的连续性。
实施步骤
1. 配置 Karpenter:
-
• 设定规则优先为 QA 工作负载分配 Spot 实例 -
• 根据应用特性限制 Spot 实例类型(如 m5.large、c5.xlarge)
2. 中断处理机制:
-
• 在集群中配置了 AWS Node Termination Handler(提前2分钟通知中断) -
• 当 Spot 实例被回收时,优雅排空 Pod,避免短时测试任务意外中断
3. 按需实例回退机制:
-
• 若 Spot 实例容量不足,Karpenter 自动切换至按需实例 -
• 确保关键测试阶段的高可用性
引入 Karpenter 前后对比
为了验证 Karpenter + Spot 实例方案的成效,我们对部署前后的成本进行了为期 30 天的对比分析。
引入 Karpenter 之前(全部使用按需实例):
m5.large:30 台 × $0.096/小时 × 12 小时 = $34.56/天
c5.xlarge:20 台 × $0.192/小时 × 12 小时 = $46.08/天
Karpenter 实施后(Spot 实例 + 按需回退):
在切换至 Spot 实例后,我们实现了 90% 的 Spot 实例使用率,仅在 Spot 实例被 AWS 回收时才使用按需实例。
以下是优化后的成本详情:
Spot 实例:
m5.large:$0.0288/小时
c5.xlarge:$0.0576/小时
m5.large:25 台 × $0.0288 × 12 小时 = $8.64/天
c5.xlarge:20 台 × $0.0576 × 12 小时 = $13.82/天
总计: $22.46/天
按需实例使用情况:
-
• 占比: 10%(约 5 台/天) -
• 每日按需成本:$8.06/天 -
• 月度按需成本:$8.06 × 30 = $241.80/月
最终月度总成本(Spot + 按需):$673.80 + $241.80 = $915.60
成果:显著降本,测试零中断
成本对比
-
• Karpenter 实施前成本:$2,419.20 / 月 -
• Karpenter 实施后成本:$915.60 / 月 -
• 成本降低幅度:约 62% 节省(每月节省 $1,503.60)
更重要的是,在整个降本过程中,我们的测试流程未受到任何中断。
得益于 Karpenter 的智能节点配备机制以及 AWS Node Termination Handler 对 Pod 优雅排空处理,即使 Spot 实例频繁被回收,我们的 QA 应用依然保持稳定运行,顺利完成了各类测试任务。
关键结论
1.💰显著降低成本:
通过在 QA 环境中大规模使用 Spot 实例,我们成功将云基础设施成本降低了 60% 以上。
2.✅业务零宕机:
结合使用 Karpenter 与 AWS Node Termination Handler,我们的系统对 Spot 实例的中断具备了良好的容错能力,保证了关键测试任务的连续性与可靠性。
3.📈弹性伸缩能力:
Karpenter 能根据工作负载的实时变化进行动态扩缩容,实现按需付费。
4.🔄自动回退策略:
当 Spot 容量不足时,系统自动回退使用按需实例,确保在关键测试阶段的高可用性与连续交付能力。
推荐阅读
Karpenter生态持续扩展:TKE Provider发布,多云支持再升级
打卡是免费的,AWS可不是:多邻国如何靠“抠”省下20%成本?
项目介绍
Karpenter 于2021年11月推出并开源,是一款开源的Kubernetes集群自动扩缩容工具,专为优化 Kubernetes 集群的工作负载设计,旨在以灵活、高性能和简洁的方式实现节点的弹性扩展。今年9月已发布1.0版本。目前,Karpenter 已为全球超500家知名企业在生产环境中提供服务,包括阿迪达斯、Anthropic、Slack、Figma等。
Karpenter项目地址:
https://github.com/kubernetes-sigs/karpenter

