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 涉及的列上建立索 ...
随机推荐
- Step by Step: Connecting to Dynamics 365 using a C# Console App
Step by Step: Connecting to Dynamics 365 using a C# Console App If you're new to Microsoft Dynam ...
- find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
find . -name "*.php" -execdir grep -nH --color=auto foo {} ';'
- maven插件实现项目一键“run maven、debug maven”等命令 => 插件名:“maven helper”
1.在IDEA中下载插件 2.使用 总结:通过 "maven helper" 插件即可通过命令实现对项目的一键管理
- XML元素限定
XML元素限定的意义:XML 用于数据交换,而标签又是可以任意定义的,为了让 XML 的编写者和使用者之间能正确交流----->需要对标签等约定.在 XML 中有两种约定方法 dtd 格式和 x ...
- python 每天一个知识点 对文件的操作
对文件的操作: 操作 功能 文件对象 = open(file,mode,encoding) 打开文件获取文件对象 文件对象.read(num) 读取指定长度字节,不指定num读取文件全部 文件对象.r ...
- 利用网络复制安装额外域控制器、利用介质安装额外域控制器、安装RODC额外域控制器
一.拥有多台域控制器的优势 1.分担用户身份验证的负担,改善用户登录的效率 2.容错功能:若有域控制器故障,此时仍然可以有其他正常的域控制器来继续提供服务,因此对用户的服务并不会停止 二.系统提供两种 ...
- pugixml XML格式处理库的介绍和使用(面向业务编程-格式处理)
pugixml XML格式处理库的介绍和使用(面向业务编程-格式处理) 介绍 pugixml是一个轻量级的C++ XML处理库.它的特点: 类似dom的界面,具有丰富的遍历/修改功能 非常快速的非验证 ...
- PHP 数据库操作
连接数据库 连接数据库常用的函数 mysqli_connect(主机IP,用户名,密码,数据库名,端口号) // 端口号如果是3306可以省略 mysqli_connect_error():获取连接数 ...
- 基于 HLS 创建 Golang 视频流服务器
HLS 是 HTTP Live Streaming 的缩写,是苹果开发的一种基于 HTTP 的自适应比特率流媒体传输协议, 并于 2009 年. HLS 流媒体已经成为应用最广泛的实时视频协议.它是一 ...
- 【经验分享】RTC 技术系列之视频编解码
要了解什么是视频编解码,首先我们需要了解什么是视频. 视频归根结底是一系列连续的图像帧,当这些图像以一定速率播放时,人眼就会判断其是连续活动的,这样就构成了视频. 那为什么要进行视频编解码呢,因为视频 ...