找回密码
 立即注册
首页 业界区 安全 逐层优化!网安独角兽如何在 AWS 上削减 60% 的 K8s 成 ...

逐层优化!网安独角兽如何在 AWS 上削减 60% 的 K8s 成本

费卿月 7 天前
本文由网络安全独角兽 Orca Security 的 FinOps 工程师 Ilay Simon 撰写,介绍了他们如何一步一步通过减少闲置资源来削减 Kubernetes 成本。
背景

Kubernetes 是一个强大的工作负载编排平台,但成本管理往往是一大挑战。当我们首次分析 AWS Kubernetes 运行环境时,发现了一个重大的低效问题:
EC2 计算资源的闲置率 vs. 实际计算利用率比值接近 50:50
换句话说,我们一半的资源处于闲置状态,造成了大量的浪费。
1. 节点级闲置(Node-Level Idle)

节点级闲置指的是节点内未分配的资源——即 CPU 和内存虽然已被配置,但 Pod 并未真正使用。
这种情况通常是由于 Kubernetes 在调度工作负载时受到约束条件优先级的影响,可能会导致某些资源没有被充分利用(例如,当工作负载未完全使用节点的容量时)。
这种资源配置不均会导致节点上存在大量未被使用的容量,但企业仍然需要为整个实例支付费用,从而造成成本浪费。
2. Pod 级闲置(Pod-Level Idle)

Pod 级闲置指的是 Pod 请求的 CPU 或内存超过其实际消耗。这可能是由于过度配置或资源请求和限制设置过于保守。
为了避免资源不足,Pod 可能会请求比所需更多的 CPU 和内存。这些未被实际使用的资源仍然被 Pod 占用,无法被其他工作负载使用,从而导致计算资源的浪费。
这些“闲置”资源仍然被保留以备 Pod 的潜在需求,它们虽然未被使用过,实际上仍然浪费了算力。
我们采取的技术措施

1.png

闲置成本降低

为了应对这些问题,我们利用了 Finout 和 Grafana 监控并可视化资源使用情况。
经过深入分析,我们制定了一套多层优化策略,以更有效地降低资源浪费。具体如下:
1. Pod 级闲置优化:

采用自动化资源调整工具,动态优化 Pod 的 CPU 和内存请求,使其仅请求实际需要的资源,从而在减少资源浪费的同时提高利用率。
2. 节点级闲置优化:

我们利用 Karpenter 来动态优化节点选择,Karpenter 是一款开源的 Kubernetes 集群自动扩缩容工具,专为优化 Kubernetes 集群的工作负载设计,旨在以灵活、高性能和简洁的方式实现节点的弹性扩展。

  • 通过自定义配置,我们调整了实例系列,使其符合工作负载的 CPU:内存比(1:8)。
  • 在此基础上,我们选择了 R 系列实例,因为它们在计算能力和内存需求之间提供了最佳平衡。
这套策略使我们能够使用更少但更匹配的节点,大幅减少未配置的资源,并最大限度地减少闲置节点数量。
CloudPilot AI (www.cloudpilot.ai) 对节点选择功能进行智能化升级。在选取实例的过程中,除了价格因素外,还将网络带宽、磁盘 I/O、芯片类型等因素纳入考虑范围内,通过智能算法选出兼顾成本和性能的实例类型,以减少资源浪费,增强应用稳定性。
目前,CloudPilot AI (www.cloudpilot.ai) 提供30天免费试用,欢迎点击官网进行尝鲜!
2.png

3.png

R 系列实例 CPU :内存比

3. Graviton 实例

我们评估并迁移了部分工作负载至基于 AWS Graviton 的实例。
Graviton 实例具有更高的性价比,在不影响吞吐量的情况下,帮助我们成功节省了 40% 的 EC2 计算成本。
4.png

按物理处理器分类的 EC2 实例

4. 应用层优化(Application-Level Optimization)

到目前为止,你可能已经熟悉了优化工作负载的常见方法,这些方法在某些情况下确实有效,但对于我们最具挑战性的系统来说,它们远远不够。
当然,我们在部分工作负载上成功节省了成本,但对于那些更棘手的场景,我们需要额外的优化手段。
这时,跳出传统思维模式就变得至关重要:
先回顾一下,我们为了优化工作负载做了些什么。首先,我们使用了自动化工具,它可以基于我们的资源使用模式动态调整 CPU 和内存请求。另外,我们采用了 Karpenter,并将部分工作负载迁移至 Graviton 实例。至此,Pod 层级的优化工作已经完成,现在,开始进行应用层级的优化。
为了解决这个问题,我们自主开发了一套定制化解决方案,专门针对应用层(Application Layer) 进行优化。
我们引入了一种分层管理系统(Tiered System),采用 “T-shirt Sizing”模型,将工作负载划分为不同的资源等级:

  • workload_x-small(超小型)
  • workload_x-medium(中型)
  • workload_x-large(大型)
这一策略确保每个工作负载都能获得刚好匹配的资源,避免过度配置和资源浪费,从而实现更高效的计算成本管理。
这个方法虽然简单却非常高效,带来了巨大的改变。每个应用现在都能精准获取所需的资源——不多,也不少。
没有资源浪费,也没有过度配置,而是更智能、更高效的资源分配方式。对我们而言,这是一种颠覆性的改变。


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册