6个优化策略,助你降低K8S成本
Kubernetes 早已成为容器编排引擎的事实标准,而随着 Kubernetes 环境的复杂性持续增长,成本也在不断攀升。CNCF 发布的调查报告《Kubernetes 的 FinOps》显示,68%的受访者表示 Kubernetes 开销正在上涨,并且一半的人所在的组织经历了每年超过20%的开销增长。
因此,Kubernetes 成本管理和优化亟需得到系统管理员的重视。本文我们将了解6个优化 Kubernetes 成本的策略和方法。
1、合理调整 Pod 和节点
降低成本最简单的方式之一是管理 Pod 和节点使用的资源。尽管通常的建议是留有足够的机动空间,但过度配置或允许应用程序无限制地使用资源会带来灾难性的后果。例如,假设一个Pod由于应用程序的错误而消耗了节点的所有可用内存,不必要地利用了资源,这会导致其他 Pod 完全没有资源可用。
为避免这一情况的发生,用户可以在命名空间级别用 Kubernetes 资源配额和限制区间来限制资源利用率。此外,还可以在容器层面上指定资源请求和限制,强制执行容器可以请求多少资源以及资源的最大限制。
节点的大小取决于 Pod 所使用的资源。如果你的工作负载只利用了节点中50%的资源,并且短期内资源使用量不会激增,那么用户可以适当缩小节点的规模以降低成本。
另一个考虑因素是调整在单个节点上可以运行的 Pod 数量。即便在没有硬性限制的情况下,在单个节点上运行大量的 Pod 也会导致资源利用效率低下。鉴于这类情况,一部分K8S的托管服务提供商已经限制了单个节点上可以运行 Pod 的数量。
2、监控集群和基础设施
合理监控集群环境,包括底层或依赖项资源,有助于管理成本。无论你是使用托管的 Kubernetes 集群还是自建的集群,监控资源利用率和总体成本都是降低成本的第一步,这能够让用户一目了然地了解计算、存储、网络利用率等情况,以及成本在它们之间的分布情况。
云厂商通常能够提供内置工具和基本的监控功能。而利用 Prometheus、Kubecost 等工具可以让用户获得更为全面的洞察。近日发布的应用统一部署与管理平台 Seal AppManager 中也内置了成本管理视图,提供 Kubernetes 的资源开销、共享费用(如空闲费用、管理费用)的成本汇算和分摊,并内置多维度成本分析视图为用户提供成本洞察。另外,用户也可以依据集群、项目、应用等维度自定义成本视图。

3、配置弹性伸缩
Kubernetes 支持3类弹性伸缩:
- HPA:自动水平伸缩
- VPA:垂直自动伸缩
- 集群自动伸缩
自动充分利用 Kubernetes 弹性伸缩的特性可以帮助用户以一种简单、高效的方式降低整体 Kubernetes 成本。
HPA 可以监控 Pod 的使用情况,自动调整大小,以保持预期的使用水平。VPA 则可以调整集群中的资源请求和容器限制。自动伸缩会根据需求自动从 Kubernetes 集群中添加或删除节点,它有助于确保工作负载总是有足够的基础设施资源来完成它们的工作,但又不至于让用户最终为闲置的基础设施付费。
现阶段而言,并非所有的 Kubernetes 服务或发行版都支持自动伸缩。但是,如果你所采用的服务支持,那么它可以帮助你大幅降低 Kubernetes 成本。
4、为 K8s 工作负载选择不同的购买策略
对于 AWS 或者 GCP 来说,按需实例是最昂贵的选项。因此,我们应该充分利用预留的实例甚至是 Spot instances(竞价型实例)。
相较于按需价格,Spot instances 最高可获得90%的折扣(即1折)。它们是短期工作或无状态服务的最佳选择,可以快速重新调度,同时不会丢失数据。为避免中断,用户可以使用工作负载管理工具,将 Spot 实例保留在某个固定时段内。
为每个节点都规划购买策略,并在可能的情况下优先使用 Spot 实例,以充分利用购买折扣。如果 Spot 实例不适合你的工作负载,比如你的容器正在运行数据库,那么可以购买具备稳定可用性的节点。在任何情况下,尽量减少使用按需资源。
5、Kubernetes 调度
调整 Pod 和节点的大小和规模后,需要确保 pod 被调度到了正确的节点上。K8s 调度流程将 Pod 与节点相匹配,并且调度器的默认行为可以自定义。假设你想把具有关键业务功能的容器放在一个高性能的节点上,而把其他不太关键的组件放在相对较低性能的节点上。默认情况下,即便在不同性能层上配置节点,K8s 也无法匹配正确的节点。
如果一个非关键的pod被安排在一个高性能的节点上,会导致性能浪费并最终提高成本。Kubernetes 提供诸如 nodeSelector、亲和性以及污点和容忍等特性以解决此类问题并优化调度。它们可以用来完全配置Kubernetes的调度过程,以满足用户的需求,从而使用户能够有效地使用整个节点的可用资源。
6、简化开发
尽管容器化的浪潮愈演愈烈,但并不意味着一切都需要容器化。一些开发团队试图为了容器化而容器化应用程序或工作负载,这可能会导致在 Kubernetes 集群上运行不必要的工作负载。这类工作负载在其他技术上也可以轻松运行,并且成本会更低。譬如,可以将无服务器技术用于基于事件的特性,而主要将 Kubernetes 用于高可用性和关键任务的功能。
总结
成本管理并不总是开发人员的最高优先级,但是确实是必须考虑的方面。正确的解决方案可以使Kubernetes的成本管理变得及时、经济和毫不费力,使企业能够在成本和性能之间实现完美的平衡。
利用不同的云供应商建立多云环境可以使用户从每个平台提供的折扣中获益,甚至可以在平台之间迁移工作负载以选择最优惠的选项,同时不会出现服务中断或服务质量下降的情况。另外,也可以选择使用不同的技术,将功能卸载到最符合要求的技术或服务上。这种选择可以在有效管理整个应用程序的同时,更深度地管理成本。
6个优化策略,助你降低K8S成本的更多相关文章
- 直播推流端弱网优化策略 | 直播 SDK 性能优化实践
弱网优化的场景 网络直播行业经过一年多的快速发展,衍生出了各种各样的玩法.最早的网络直播是主播坐在 PC 前,安装好专业的直播设备(如摄像头和麦克风),然后才能开始直播.后来随着手机性能的提升和直播技 ...
- SQL优化策略高级优化经常使用-1(The Return Of The King)
1 经常使用的优化策略 1.1 语句 1.1.1使用实际的列名 当我们查询SQL语句时.你是否觉得使用实际的列名比使用*更快呢?答案是肯定的. 为了证实这一点,感兴趣的朋友能够自己验证一下.我这 ...
- mysql 30大优化策略
mysql 30大优化策略 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 wher ...
- 常见性能优化策略的总结 good
阅读目录 代码 数据库 缓存 异步 NoSQL JVM调优 多线程与分布式 度量系统(监控.报警.服务依赖管理) 案例一:商家与控制区关系的刷新job 案例二:POI缓存设计与实现 案例三:业务运营后 ...
- EasyPlayer-RTSP-Android安卓播放器播放RTSP延迟优化策略,极低延时!
EasyPlayer-RTSP-Android安卓RTSP播放器低延迟播放延时优化策略 EasyPlayer-RTSP-Android播放器是一款专门针对RTSP协议进行过优化的流媒体播放器,其中我们 ...
- MIC性能优化策略
MIC性能优化主要包括系统级和内核级:系统级优化包括节点之间,CPU与MIC之间的负载均衡优化:MIC内存空间优化:计算与IO并行优化:IO与IO并行优化:数据传递优化:网络性能优化:硬盘性能优化等. ...
- EasyPlayer Android安卓RTSP服务器低延时再优化策略
EasyPlayer低延迟再优化策略 EasyPlayer是一款专门针对RTSP协议进行过优化的播放器.其中两个我们引以为傲的的优点就是起播快和低延迟.最近我们遇到一些需求,其对延迟要求非常苛刻,于是 ...
- EasyPlayer Android RTSP播放器延迟再优化策略
EasyPlayer延迟再优化策略 EasyPlayer是一款专门针对RTSP协议进行过优化的播放器.其中两个我们引以为傲的的优点就是起播快和低延迟.最近我们遇到一些需求,其对延迟要求非常苛刻,于是我 ...
- c++ 性能优化策略
c++ 性能优化策略 作者:D_Guco 来源:CSDN 原文:https://blog.csdn.net/D_Guco/article/details/75729259 1 关于继承:不可否认良好的 ...
- MySQL中的SQL的常见优化策略
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...
随机推荐
- C++的万能引用解析
C++11除了带来了右值引用以外,还引入了一种称为"万能引用"的语法:通过"万能引用",对某型别的引用T&&,既可以表达右值引用,也可以表达左值 ...
- nohup /root/runoob.sh > runoob.log 2>&1 &
nohup /root/runoob.sh > runoob.log 2>&1 &****
- samba缓存问题
samba 在第一次登录时,会在windows上缓存着登录密码,当你重新修改samba服务端的密码, 再次登录时,windows会自动用缓存的旧密码登录,导致的登录失败.
- TCP长连接管道通信改消息队列涉及到的知识点
1.队列,链表,STL 1.C++ STL标准库简介 长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出"可重复运用的东西" 的方法,从函数(functions) ...
- OSPF的收敛特性
- Python:logging简要版
日志等级(从低到高):DEBUG < INFO < WARNING < ERROR < CRITICAL 1.调试时,可记录DEBUG.INFO类的信息 2.投入使用,建议使用 ...
- Jetson查看JetPack版本
Jetson查看JetPack版本 查看L4T版本 cat /etc/nv_tegra_release 我的L4T版本为 32.5.1 在官网查找对应的jetpack版本 This page incl ...
- SpringBoot——定制错误页面及原理
更多内容,前往 IT-BLOG 一.SpringBoot 默认的错误处理机制 [1]浏览器返回的默认错误页面如下: ☞ 浏览器发送请求的请求头信息如下:text/html 会在后面的源码分析中说到 ...
- Spring Security 框架使用
更多内容,前往IT-BLOG 一.Spring Security 简介 Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供 ...
- 中兴AX5400Pro+ BUG
中兴AX5400Pro+路由器管理页面已知两个功能出现BUG:1.[应用]栏目下的[父母控制]下的所有设置均不起作用.(更新固件V1.0.0.1B11.8000依然无效)2.[系统]栏目下的[备份配置 ...