01/引言
在云计算领域,尤其是在像 QA(Quality Assurance)这样并非生产环境的场景中,基础设施的成本管理始终是一个挑战。
我们的 QA 环境对测试的稳定性要求较高,但我们注意到,大量基础设施成本都花在了 EC2 按需实例上。经过深入调研,我们决定在 QA 环境中引入 Karpenter,并结合 Spot 实例与中断处理器进行优化。
本文将介绍我们在保证应用可靠性的前提下,从最初的架构出发、一路成功实现云支出大幅缩减的实践过程。
02/现有架构:引入 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 环境实际上能够容忍一定程度的中断,而不会对整体测试流程造成实质性影响。
03/挑战:成本与可靠性的平衡
虽然 Spot 实例相比按需实例最多可以节省约 90% 的成本,但当 AWS 需要回收容量时,只需提前2分钟通知,就可以终止这些实例。
PS:CloudPilot AI可提前 120 分钟发出中断通知
对于生产环境而言,这种不确定性可能会带来不可接受的风险;但在 QA 环境中,只要系统能够平稳恢复,我们是可以接受一定程度的中断的。
我们的目标是将 QA 实例切换为 Spot 实例的同时,确保:
-
关键测试任务不中断
-
当 Spot 实例被回收时,系统能够平滑切换,保障测试流程连续性
04/解决方案:借助 Karpenter 实现对 Spot 实例的智能调度
我们选择了 Karpenter 作为解决方案。
Karpenter 是一款开源的 Kubernetes 集群自动扩缩容工具,能够根据实时的工作负载需求动态地即时调度和创建节点。
它与 AWS Spot 实例高度兼容,旨在以灵活、高性能和简洁的方式实现节点的弹性扩展,可以在 Spot 实例被终止后自动替换节点,从而确保集群的健康性和服务的连续性。
05/实施步骤
- 配置 Karpenter:
-
设定规则优先为 QA 工作负载分配 Spot 实例
-
根据应用特性限制 Spot 实例类型(如
m5.large
、c5.xlarge
)
- 中断处理机制:
- 在集群中配置了 AWS Node Termination Handler(提前2分钟通知中断)
- 当 Spot 实例被回收时,优雅排空 Pod,避免短时测试任务意外中断
- 按需实例回退机制:
- 若 Spot 实例容量不足,Karpenter 自动切换至按需实例(On-Demand)
- 确保关键测试阶段的高可用性
不过,值得注意的是,Karpenter 无法预测 Spot 实例的中断事件。
最近,CloudPilot AI 上线了新一代「Spot中断预测引擎」,通过主动驱逐高中断率实例以及选择低中断率实例,将 Spot 中断事件降低了90%!
目前该功能只面向客户开放,后台回复关键词【演示】,即可预约1对1技术交流。
06/引入 Karpenter 前后对比
为了验证 Karpenter + Spot 实例方案的成效,我们对部署前后的成本进行了为期 30 天的对比分析。
引入 Karpenter 之前(全部使用按需实例):
- 每日成本:
m5.large:30 台 × $0.096/小时 × 12 小时 = $34.56/天
c5.xlarge:20 台 × $0.192/小时 × 12 小时 = $46.08/天
- 每日总计: $80.64
- 月度成本估算(按 30 天计):$80.64 × 30 = $2,419.20/月
Karpenter 实施后(Spot 实例 + 按需回退):
在切换至 Spot 实例后,我们实现了 90% 的 Spot 实例使用率,仅在 Spot 实例被 AWS 回收时才使用按需实例。
以下是优化后的成本详情:
Spot 实例:
- Spot 占比: 90%(每日约 45 台)
- Spot 单价(平均便宜约 70%):m5.large:$0.0288/小时;c5.xlarge:$0.0576/小时
- 每日 Spot 成本:
m5.large:25 台 × $0.0288 × 12 小时 = $8.64/天
c5.xlarge:20 台 × $0.0576 × 12 小时 = $13.82/天
总计: $22.46/天
- 月度 Spot 成本: $22.46 × 30 = $673.80/月
按需实例使用情况:
- 占比: 10%(约 5 台/天)
- 每日按需成本:$8.06/天
- 月度按需成本: $8.06 × 30 = $241.80/月
最终月度总成本(Spot + 按需):$673.80 + $241.80 = $915.60
如果您需要一键查询 Spot 实例的实时价格、各AZ的中断率以及相较于按需实例的折扣比例,欢迎访问 Spot Insights(spot.cloudpilot.ai)。
07/成果:显著降本,测试零中断
成本对比
- Karpenter 实施前成本:$2,419.20 / 月
- Karpenter 实施后成本:$915.60 / 月
- 成本降低幅度:约 62% 节省(每月节省 $1,503.60)
更重要的是,在整个降本过程中,我们的测试流程未受到任何中断。
得益于 Karpenter 的智能节点配备机制以及 AWS Node Termination Handler 对 Pod 优雅排空处理,即使 Spot 实例频繁被回收,我们的 QA 应用依然保持稳定运行,顺利完成了各类测试任务。
关键结论
-
💰 显著降低成本: 通过在 QA 环境中大规模使用 Spot 实例,我们成功将云基础设施成本降低了 60% 以上。
-
✅ 业务零宕机: 结合使用 Karpenter 与 AWS Node Termination Handler,我们的系统对 Spot 实例的中断具备了良好的容错能力,保证了关键测试任务的连续性与可靠性。
-
📈 弹性伸缩能力: Karpenter 能根据工作负载的实时变化进行动态扩缩容,实现按需付费。
-
🔄 自动回退策略: 当 Spot 容量不足时,系统自动回退使用按需实例,确保在关键测试阶段的高可用性与连续交付能力。