【K8s】如何有效降低 AWS EKS 成本
文摘
科技
2024-10-09 21:00
北京
下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
Amazon Web Services(AWS)是全球应用最广泛的云之一,其全球数据中心可提供超过 200 项功能齐全的服务。Amazon EKS 是运行在 AWS 上托管的 Kubernetes 服务,EKS 服务简化了 Kubernetes 集群的部署和管理,为企业带来便利和灵活性。但是与此同时,企业也面临着云资源成本管理的挑战。因此,如何在确保服务质量的前提下有效降低 Amazon EKS 的成本,成为企业及运维人员关注的焦点。本文就此问题总结了几种思路。
- 首先,可以借助 AWS 的弹性能力,为工作负载动态提供与之相匹配的资源,提高资源利用率
- 其次,可以利用 AWS 提供的多种购买选项和实例类型来降低 EC2 的使用成本,比如:Spot 实例、Savings Plans、预留实例等
- 最后,需要借助可观测性能力,持续监控 EKS 的成本和用量指标,为工作负载选择最佳的资源配置,避免浪费
Amazon EKS 支持多种弹性伸缩方案:
CA(Cluster Autoscaler)是一个自动扩展和收缩 Kubernetes 集群节点规模的工具,其主要的目标是在不浪费资源的前提下确保集群中有足够的 Node 节点来运行 Pod。当满足以下条件时自动触发扩缩动作:- 当集群因为资源不足,无法调度新的 Pod 时,CA 会主动增加集群的 Node 数量
- 当集群里存在资源长时间(默认 10 分钟,可定制)未被充分利用的 Node (已请求的资源低于 Node 可分配资源的 50%,可定制),并且这个 Node 节点上的 Pod 可以被移动到其他 Node 节点时,CA 会主动尝试减少集群的 Node 节点数量
Karpenter 是一个开源的弹性伸缩方案,它提高了 Kubernetes 集群的可用性,为应用程序提供类型和大小最适合的计算资源。其工作流程如下图所示:- 监视被 Kubernetes 标记为 Unschedulable 的 Pod(Pending Pod)
- 评估 Pod 请求的调度约束(资源请求、节点选择器、Affinity 和 Toleration 等)
- kube-scheduler 调度 Pod 在新节点上运行
HPA(Horizontal Pod Autoscaler)的工作对象是 Pod,其工作原理如下:- 通过在 kube-control-manager 注册一个 control-loop,每隔 15s 去扫描 kube-apiserver(metric server),获取并计算某一个预设指标的平均资源使用率,HPA 会对比平均资源使用率和预设的目标使用率,生成一个扩缩建议,来自动调整 Pod 的数量,以此来提高资源利用率,使成本支出更合理
VPA(Vertical Pod Autoscaler)根据容器资源使用情况自动设置 CPU 和内存的 requests 及 limits,从而允许在节点上进行适当的调度,以便为每个 Pod 提供大小合适的资源。它既可以缩小过度请求资源的容器,也可以根据其使用情况随时提升资源不足的容量。使用 VPA 时,用户无需为 Pod 中的容器设置资源请求。配置后,它将根据资源(CPU 与内存)使用情况自动设置 requests。在对 Pod 的调度过程中,使得每个 Pod 都可以使用适当的资源量从而分配到适合的节点上。它既可以缩小资源请求过多的 Pod,也可以根据一段时间内的使用情况扩大资源请求不足的 Pod。与 Amazon EC2 按需实例的价格相比,使用 EC2 Spot 实例最高可以节省 90%,可以在保证业务稳定运行的前提下获得最高的成本节省。
Spot 实例的优势如下:
物美价廉:Spot 实例的底层物理设施与按需实例完全一致,但是成本更低,且 Spot 实例的价格是由 EC2 实例的长期供需趋势决定的,波动幅度小
立即生效:Spot 实例一旦申请成功立刻就能运行工作负载,使用方式与按需实例相同
简单易用:Spot 实例可以单独使用,也可以与其他 AWS 服务无缝集成(比如:EKS,ECS,EMR 等等),同样也支持与第三方解决方案集成
2、利用 Savings Plans 降低 EC2 成本在 AWS 上承诺一定的用量即可享受相应的折扣,购买折扣计划可以在不改变当前云环境,保持服务稳定的前提下立竿见影的节省成本。对于计算资源,目前 AWS 支持的折扣计划是 Savings Plans(SP)和预留实例(Reserved Instances,RI)。SP 与 RI 相比,为客户提供了更多的灵活性和更少的管理成本,客户通过承诺固定的每小时计算资源使用量(以 USD/小时为单位衡量)来节省最多 72% 的计算资源成本,该计划包含 1 年期和 3 年期两种选择。考虑到 EKS 中工作节点动态特性以及实例类型的多样化,推荐采用 Compute Savings Plans(CSP)进一步降低成本。CSP 是 SP 的一种,可提供更高的灵活性,最高可降低 66% 的成本。这些计划会自动应用于 EC2 实例使用量、Amazon Fargate 和 Amazon Lambda 服务使用量,而不受实例系列、大小、可用区、区域、操作系统或租期的限制。Amazon Graviton 处理器是 AWS 自研的,旨在为云上工作负载提供最高性价比。与基于 x86 的 EC2 实例相比,有 40% 的性价比提升。搭有 Graviton 处理器的 EC2 实例可适用于应用服务器、微服务、基于 CPU 的机器学习推理、视频编码、游戏、MySQL 和缓存数据库等负载,适用场景如下:
思路三:使用成本分析工具
Kubecost 是一个开源的成本管理和优化的工具,可以为 Kubernetes 环境提供成本的可视化和深度分析,帮助用户持续不断地降低云成本。Amazon Cost Explorer 是 AWS 提供的免费的成本可视化工具,用来帮助用户了解和管理过去一年的云成本和使用情况。它还提供了筛选器供用户在不同维度分析成本和用量。Amazon Trusted Advisor(TA)是一款在线工具,它可以分析 AWS 环境,并为用户提供实时指导,以帮助用户基于 AWS 架构完善的框架,进而更加经济高效地预置自己的资源。TA 不仅仅可以用来提供成本优化建议,还支持对 AWS 环境的安全性、容错能力、性能和服务配额进行审查和评估,并给出改进和修改意见。对于成本优化,Amazon Trusted Advisor 可通过分析用量、配置和支出,提出可行的建议以帮助用户节省成本。比如:识别空闲 RDS 数据库实例、未充分利用的 EBS 卷、无关联的弹性 IP 地址、低利用率的 EC2 等。Trusted Advisor 还可以提供 Savings Plans 和 Reserved Instances 的购买建议来帮助用户通过承诺用量进行成本节省(请注意这些建议是针对所有的 EC2 资源,并不是只针对 EKS 所使用的 EC2 资源)。4、CloudWatch Container InsightsCloudWatch Container Insights 能够帮助用户从 Amazon ECS、Fargate、EKS 中收集、聚合并汇总多种指标与查询日志,借此监控容器环境中各项关键资源的运行情况。这些指标包括 CPU、内存、磁盘和网络等等。CloudWatch Container Insights 支持在集群、节点、Pod、任务和服务维度创建 CloudWatch 聚合指标,用户还可以根据 CloudWatch Container Insights 收集到的指标设置 CloudWatch 警报。
书籍推荐
最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。