如何治理资源浪费?百度云原生成本优化最佳实践
导读 introduction
左边图片来源于《2020年 CNCF 中国云原生调查报告》,图中显示生产系统中使用 Kubernetes 的比例已从 2019 年的 72% 增长到了 82%,越来越多的企业在云上使用基础设施资源、通过 Kubernetes 平台来管理应用。
右边图片来源于CNCF《FinOpsKubernetes Report》,报告中指出云原生导致资源成本增加,迁移至 Kubernetes 平台后,68% 的受访者表示所在企业计算资源成本有所增加,36% 的受访者表示成本飙升超过20%
成本管理困难:K8S 的弹性帮助了业务快速整张,但也带来了计费、分账管理上的困难。因为 K8S 的 Pod 迁移性比较强,对比传统的 Agent 部署模式,Pod 可能会在各个节点上漂移。多集群场景下,也可能在集群之间漂移
成本优化难:弹性、潮汐、混部超发、预留实例、竞价实例,手段很多,但需要投入人力来对这些手段精心搭配
资源利用率低:给业务分配的资源过大,实际使用的资源过小,企业的 CPU 资源利用率普遍低于15%
GEEK TALK
01
成本优化实施路径
1.1 成本洞察方案
可视化的资源追踪:对集群,节点维度的资源变化做追踪
应用级别的用量分析:对用用做 Pod 级别分配率核算;统计不同的 Namespace 和Label 对应相不同的业务和业务线,向上聚合产出报表
利用率统计:对多资源维度的分配率、利用率进行统计。比如 CPU、Memory、GPU、磁盘等数据。
资源优化:
预留套餐互转,通过资源画像检测出的保底资源,由后付费转为包年包月
使用弹性扩缩容,使用竞价实例,潮汐实例支持有计划的资源申请,使用 Serverless实例支持突发流量
应用(利用率)优化:
GEEK TALK
02
成本优化核心技术
2.1 在线超卖 在线资源通常存在分配率高但使用率低的现象,主要原因是业务规格申请过大,此外还存在核存比例不平均以及节点规格过小、碎片很多的问题。使用在线超卖的方案,也就是资源超发,可以通过动态超发节点规格以及对热点(我们将 CPU 或内存超过80%定义为热点)的事前和事后处理来解决上述问题。 事前的处理指的是根据资源画像做精细调度,避免热点。事后是对应用的可迁移性进行分级,来保障稳定性。应用可迁移性与应用的重要程度不直接相关,根据百度内部经验,会通过平台来定义其等级:第一个等级不可迁移或需要人工介入迁移,第二个等级是指一般情况不要迁移,第三个等级就是可以迁移,默认所有业务进入时都是第三个等级,如果有特殊需求,需要和平台方做评审。通过资源超卖,测试集群的分配率对比应用超卖之前可以达到130%,使用率达到15%。 技术层面,超卖有两个方向:一是节点级别的超卖,二是应用规格的智能调整。二者手段虽不同,但总体逻辑就是用最少的节点去承载更多的业务。百度内部选择的是节点级别超卖。
动态超卖:如果通过人工评估,一般会得出静态上超卖系数,但是这种系数往往不足以代表真实的用量,它可能会发生热点,也可能会过小。利用资源画像可以进行定期的建模,然后去做针对每个节点的使用情况去做动态超发。
适用于大小集群:整体超卖,资源利用率提升。
降本:如果业务申请量不够,可以做节点缩容或节点下线;如果业务量足够,就可以让节点承载更多业务,对业务也没有感知
代码侵入性比较强:会修改 kubelet 和原生的一些代码
可能重启容器:重启容器的原因是从资源层面来讲内存是不可压缩的资源,如果我们规格调小,可能需要去做重启容器,如果不重启容器,那么它的在单机和调度器等资源视图,中间的状态就比较多
需要业务感知:落地时间长
以 EKS 大集群为例:EKS 平台是基于百度智能云 CCE 容器引擎之上构建得 PaaS 平台,用于支持百度内部各种在离线业务。整体规模10w台服务器,单集群规模最大1w节点,多地域多集群,以单一集群举例,2500+节点,通过超卖下线节点500+,通过动态系数超卖售卖率达到125%,基于应用画像智能调度热点率低至0.3%,通过下线节点方式节约计算节点成本20%;
在CCR 小集群中效果同样显著:CCR 是百度智能云容器镜像服务,是面向容器镜像、Helm Chart 等符合 OCI 规范的云原生制品安全托管以及高效分发平台。单集群规模10-20节点,多地域多集群,使用动态系数超卖售卖率达到148%,基于应用画像智能调度规避了热点问题,通过推荐的降规格,缩节点方式,计算节点节约成本50%。
2.2 在离线混部 将在线服务和离线任务混合混部到相同物理资源上,通过资源隔离、调度等控制手段 , 充分使用资源,同时保证服务的稳定性,我们称这样的技术为“混部”。
下图是一个典型的单机模型,从图中可以看出,在线申请用量和在线 usage 之间存在很大的差异,主要是由于研发同学部署业务选择容器资源规格时,带有一定的盲目性,申请量高于实际使用资源量或者按照超出峰值用量申请。混部离线可以复用这部分可回收资源,通过快速填充离线作业,把这部分资源利用起来。 高中优(在线)为静态分配 ∑High request+ ∑Medium request <= Host Quota
动态计算低优(离线)可用量 Low Quota = Host Quota- ∑High used - ∑Medium used
下图是百度内部的混部整体架构:
最上方调度器层面,使用了 Prometheus 原生的技术栈,可以去单机上抓取对应的指标,再通过资源画像 SRP 建立资源模型,会同步 be 视图(离线的视图)到离线调度器,然后将近线视图同步给Apiserver
右侧的资源模型分为了多种类型:stable used 和 stable request,对应K8S来说就是Burstable 和 Guaranteed;normal used 和 be used,对应 K8S 的 BestEffort,其中又分了近线和离线两种。可以看到,除了 free 这种没有分配的资源类型,在同一个机器上承载了三种业务(stable、normal、be)并且他们之间互不干扰。
监控方面除了标准的利用率监控,也增加了压力监控,通过 perf ebpf 获取 cpu CPI,内核级别的调度延时,以及内存的分配延时等。
在一个外部落地案例中,某客户的容器化资源比例达到公司50% 以上,其中容器化环境中的 CPU 平均使用率达到 28%,内存平均使用率 35% 以上。并且该公司已经进行了在离线混部的尝试,在分析该公司在离线服务结构和类型后,我们推荐使用在离线混部手段;克服了缺乏内核隔离技术、在线服务质量差以及离线容器化程度低的挑战,通过对Hadoop Yarn 的容器化改造,混部调度器无损嵌入,引入内核隔离能力,提供产品化混部运营大盘与策略管理界面等手段,最终使得 CPU 利用率提升至47%。
2.3 质量保障 资源利用率提升之后,如何保证质量?如前文所述,主要通过如下手段: 节点热点:一般 CPU 超过80%或内存使用超过80%我们叫做热点
精细调度:通过资源画像精细调度避免热点产生
热点调度(热点治理):产生热点后根据业务迁移等级和打分进行有序迁移
质量监控层面,可以通过 ebpf 构建内核级别的质量监控,主要参考以下两个指标,只要满足一个条件,就认为是质量下降的一个 pod。
GEEK TALK
03
关于百度智能云 CCE
高中优(在线)为静态分配 ∑High request+ ∑Medium request <= Host Quota
动态计算低优(离线)可用量 Low Quota = Host Quota- ∑High used - ∑Medium used
最上方调度器层面,使用了 Prometheus 原生的技术栈,可以去单机上抓取对应的指标,再通过资源画像 SRP 建立资源模型,会同步 be 视图(离线的视图)到离线调度器,然后将近线视图同步给Apiserver
右侧的资源模型分为了多种类型:stable used 和 stable request,对应K8S来说就是Burstable 和 Guaranteed;normal used 和 be used,对应 K8S 的 BestEffort,其中又分了近线和离线两种。可以看到,除了 free 这种没有分配的资源类型,在同一个机器上承载了三种业务(stable、normal、be)并且他们之间互不干扰。
监控方面除了标准的利用率监控,也增加了压力监控,通过 perf ebpf 获取 cpu CPI,内核级别的调度延时,以及内存的分配延时等。
节点热点:一般 CPU 超过80%或内存使用超过80%我们叫做热点
精细调度:通过资源画像精细调度避免热点产生
热点调度(热点治理):产生热点后根据业务迁移等级和打分进行有序迁移
GEEK TALK
03
关于百度智能云 CCE
百度智能云CCE(容器引擎)混部功能公测中~
百度智能云CCE 混部是基于开放的云原生技术架构体系,以容器技术为核心所构建用于提升资源利用率的软件系统。 该系统通过百度10年所积累的业界领先的在离线混部调度技术,可以帮助客户实现大规模的在离线业务混合部署,将企业算力资源的使用率提升至45%+,算力资源成本降低30%+,百度内部已累计通过此技术节省几十亿元的算力资源采购成本。
复制链接或点击文末阅读原文,立即试用: https://cloud.baidu.com/product/cce.html
END