包阅导读总结
1. 关键词:阿迪达斯、Kubernetes 集群、成本降低、平台团队、Kyverno
2. 总结:阿迪达斯平台团队在 AWS 上通过多措施降低 Kubernetes 集群成本,包括降低 EC2 实例成本、自动创建垂直 Pod 自动扩缩器、设置 VPA 默认值等,使开发和 staging 集群每月成本最多降低 50%,并分享了关键考量因素。
3. 主要内容:
– 阿迪达斯平台团队降低 Kubernetes 集群成本
– 措施一:引入 Karpenter 降低 EC2 实例成本
– 措施二:自动创建垂直 Pod 自动扩缩器(VPA)提高资源利用率,选择 Kyverno 生成默认 VPA
– 措施三:设置 VPA 默认值,控制资源请求
– 其他措施:非办公时间缩减资源,使用 kube-downscaler;解决节点利用率不足问题,实现 Kyverno 策略和清理策略
– 成本优化成果及考量
– 开发和 staging 集群成本降低 50%
– 认为成本优化是持续过程,分享关键考量因素
– 相关信息
– 其他企业降低云成本的例子
– 应用优化与云成本的关系及相关指导方案
思维导图:
文章地址:https://mp.weixin.qq.com/s/6eRiaj6ihDbGZ9FXcwXbhw
文章来源:mp.weixin.qq.com
作者:InfoQ 中文
发布时间:2024/8/26 6:28
语言:中文
总字数:2127字
预计阅读时间:9分钟
评分:82分
标签:Kubernetes,成本优化,AWS,资源管理,自动化
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com

在最近的一篇 Medium 博客文章中,平台工程师 Iya Lang 介绍了阿迪达斯如何将在 AWS 上运行的 Kubernetes 集群的成本最多降低 50% 的。
阿迪达斯团队采取的多管齐下方式对许多组织的平台工程团队都会很有助益,因为 CNCF 最近的一份报告指出,49% 的受访者由于引入 Kubernetes 带来了云成本的增加。
该团队引入的第一项措施主要关注降低 EC2 实例的成本。为了实现这一点,他们实施了 Karpenter,这是一个由 AWS 开发的集群自动扩缩器(autoscaler),它会根据应用程序的需求调整节点的数量。Karpenter 的特性包括:
Karpenter 目前仅支持 AWS,但是该项目有计划将其他云供应商也纳入进来。
阿迪达斯团队采取的第二项措施是自动创建垂直 Pod 自动扩缩器(Vertical Pod Autoscaler,VPA),以提高资源的利用率。具体来说,平台团队为开发和 staging 集群中的所有工作负载自动创建了垂直 Pod 自动扩缩器。阿迪达斯选择了通常用于应用程序安全的策略工具 Kyverno 来生成默认的 VPA。
Kyverno 是一个策略引擎,在 Kubernetes 集群中作为动态准入控制器来运行。它负责校验和变更来自 Kubernetes API 服务器的准入 webhook HTT 回调,应用相关的策略来执行或拒绝准入请求。Kyverno 策略可根据各种条件(包括资源种类、名称、标签选择器等)来选定资源。变更策略可以通过 overlays(类似于 Kustomize)或 JSON Patch 来声明。校验策略使用 overlay 语法,支持模式匹配和条件(if-then-else)逻辑。策略执行的结果会记录为 Kubernetes 事件。对于已允许的请求或执行 Kyverno 策略之前的请求,Kyverno 会生成策略报告。这些报告提供了与策略相匹配的资源运行列表、资源的状态和其他详细信息。
Kyverno 架构
阿迪达斯团队将 Kyverno 策略按照如下方式进行配置:
-
检查资源是否具有水平自动扩缩器(Horizontal Pod Autoscaler,HPA)或 VPA;
-
校验是否允许为资源及其命名空间创建 VPA。
团队引入的第三项措施是设置 VPA 的默认值。在事先不了解应用程序的情况下设置 VPA 是一项很具挑战性的事情。阿迪达斯团队决定只控制资源请求,以防止在使用高峰期出现应用程序的中断。他们将允许的最小值设置为非常低的水平(例如,CPU 为 10 millicore,内存为 32M),并根据原始请求或限制来设置最大值,以确保稳定性。对于有多个容器的应用程序,团队避免使用maxAllowed
以防止出现潜在的问题。
在实施默认 VPA 后,开发和 staging 集群的 CPU 和内存使用率降低了 30%。不过,这里也存在一些限制:
-
VPA 无法与使用资源度量指标的 HPA 协同工作;
-
由于堆大小固定,比较老的 Java 应用程序可能无法从中获益;
-
某些应用程序需要不间断运行,因此必须为它们提供不参与其中的方案。
CPU and memory usage after the VPA creation on a big cluster
阿迪达斯团队还希望通过在非办公时间缩减资源以减少二氧化碳的排放量并节省开支。他们使用了kube-downscaler
。该工具可根据预定义的时间表调整副本数量,并允许针对特定应用进行定制。
在实施了这些措施后,团队面临着节点利用率不足的问题。为了解决这个问题,他们实现了一些 Kyverno 策略,以防止有问题的 Pod Disruption Budget(PDB)配置阻碍节点的移除。他们还制定了一项清理策略,定期清除无效的 PDB。
阿迪达斯团队针对非生产集群实施了上述成本优化措施,并在所有环境中采用了 PDB 策略。这一措施使开发和 staging 集群的每月成本降低了 50%。他们对生产集群采用了选择性(opt-in)模式,允许应用团队选择自己的工具和配置。
阿迪达斯团队分享了成功优化成本的一些关键考量因素:
该团队认为,成本优化是一个需要不断调整的持续过程。
在 Reddit 上可以找到更多企业尝试降低云成本的例子,例如“将 Kubernetes Dev Envs 的云成本降低 95% 以上”以及“如何降低 AWS 的成本?”。
应用的优化也可以降低云成本,提高可持续性。Erik Peterson 在 QCon SF 上介绍了相关的指导方案,并为 InfoQ 撰写了一篇相关的文章,即“一行代码价值百万美元:从工程技术角度看云成本优化”。
查看英文原文:
How the Adidas Platform Team Reduced the Cost of Running Kubernetes Clusters (https://www.infoq.com/news/2024/07/adidas-kubernetes-cost-reduction/)
声明:本文由 InfoQ 翻译,未经许可禁止转载。