嘉宾 | 宋翔
出品 | CSDN云原生
2022年7月7日,国内首次由信通院、腾讯云、FinOps 产业标准工作组联合策划的《原动力 x 云原生正发声 降本增效大讲堂》第三期直播上,腾讯云容器技术专家宋翔以“Kubernetes集群利用率提升实践”为主题,从利用率提升背景、常见集群负载优化思路以及负载提升及稳定性优化三个方面进行了详细分享。
宋翔负责腾讯超大规模自研业务上云的容器平台TKEx研发设计,将Docker、Kubernetes、Istio等云原生技术内部落地,助力腾讯QQ、在线教育、腾讯会议等海量业务的云原生容器化改造。本文整理自宋翔的分享。
利用率提升背景
利用率提升的大背景可以归纳为4个字——降本增效。通常来说,集群的利用率低会导致成本居高不下。集群、应用等配置,使用不合理,可能无法持续提升集群资源利用率,导致恶性循环。
资源不合理的原因主要有以下几点:
-
集群管理员无法准确评估集群规模
-
配置的集群Buffer不合理,Node资源冗余。
-
-
用户Pod资源配置不合理
-
Pod实际利用率低,配置要求高,导致集群调度满了,但利用率无法提升。
-
若想要深入探究集群低负载的原因,可以从两种情况着手分析。
情况1:Pod Resource Setting
如上图所示,Pod QoS分级有三种。
-
BestEfforts模式下,Pod不设置Request值和Limit值。因为QoS优先级过低,所以在当前的实际应用场景中,几乎都不采用该设置模式。
-
Guaranteed模式要求用户设置相同的Request值与Limit值,虽然该模式具有较强的稳定性,但无法有效提升集群资源利用率。
-
最常使用的是Burstable模式,该模式下用户设置Request值与Limit值,同时要求Request值小于Limit值,通过二者数值的调整可以实现实际场景下利用率的提升。
情况2:Node分配Pod资源
一个Node节点具有一定的Capacity,实际上这些资源并不能够全部被Pod所使用。其中Node需要预留部分资源给操作系统和Kubelet。除此以外的Node剩余可调度资源可以提供给Pod进行调度。
通常情况下,Node节点上会剩余一些碎片资源,这些资源无法满足待调度Pod的要求,这便造成了节点资源的浪费。
通过以上两种情况,可以总结出造成节点资源不足的两个原因。
第一,节点Pod调度不充分。