看腾讯如何提升 Kubernetes 集群利用率?

看腾讯如何提升 Kubernetes 集群利用率?
文章图片
嘉宾|宋翔出品|CSDN云原生
提到近两年的技术热词 , “云原生”觉得是位居前列 。 从云计算大数据再到如今的云原生时代 , 一大批新技术涌现 , 例如当下最火热的系统部署和容器服务平台Kubernetes(K8s) , K8s甚至被不少人认为就是未来云平台基础设施的标准 。
网上关于K8s如何使用的案例跟教程已数不胜数 , 那么在实际使用中 , 该如何最大性能地提升K8s集群利用率呢?
近日 , 来自腾讯的宋翔在由信通院、腾讯云、FinOps产业标准工作组联合策划的《原动力x云原生正发声降本增效大讲堂》第三期直播上就《如何提升Kubernetes集群利用率》进行了实战经验分享 , 内容非常干货且具备实操性 , 笔者整理分享给大家 。
利用率提升背景
利用率提升的大背景可以归纳为4个字——降本增效 。 通常来说 , 集群的利用率低会导致成本居高不下 。 集群、应用等配置 , 使用不合理 , 可能无法持续提升集群资源利用率 , 导致恶性循环 。
资源不合理的原因主要有以下几点:
集群管理员无法准确评估集群规模配置的集群Buffer不合理 , Node资源冗余 。 用户Pod资源配置不合理Pod实际利用率低 , 配置要求高 , 导致集群调度满了 , 但利用率无法提升 。
若想要深入探究集群低负载的原因 , 可以从两种情况着手分析 。
情况1:PodResourceSetting
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
如上图所示 , PodQoS分级有三种 。
BestEfforts模式下 , Pod不设置Request值和Limit值 。 因为QoS优先级过低 , 所以在当前的实际应用场景中 , 几乎都不采用该设置模式;
Guaranteed模式要求用户设置相同的Request值与Limit值 , 虽然该模式具有较强的稳定性 , 但无法有效提升集群资源利用率;最常使用的是Burstable模式 , 该模式下用户设置Request值与Limit值 , 同时要求Request值小于Limit值 , 通过二者数值的调整可以实现实际场景下利用率的提升 。
情况2:Node分配Pod资源
看腾讯如何提升 Kubernetes 集群利用率?
文章图片
一个Node节点具有一定的Capacity , 实际上这些资源并不能够全部被Pod所使用 。 其中Node需要预留部分资源给操作系统和Kubelet 。 除此以外的Node剩余可调度资源可以提供给Pod进行调度 。
通常情况下 , Node节点上会剩余一些碎片资源 , 这些资源无法满足待调度Pod的要求 , 这便造成了节点资源的浪费 。
通过以上两种情况 , 可以总结出造成节点资源不足的两个原因 。
第一 , 节点Pod调度不充分 。
集群Node资源常年冗余 , Pod调度不充分;少数HPA扩容场景时 , Pod调度水位较高 , 但是日常又恢复低水位 , 导致日常预留Buffer过多 。第二 , Pod设置不合理 。
一般用户难以估算Request/Limit值;用户更倾向过于保守的Request/Limit值;为满足短暂(周期)峰值设置较高的Limit值;不合理的镜像导致需要较大Request , 进而导致Pod本身常年低负载 。
常见集群负载优化方案思路1.用户篇优化思路
第一 , 优化Pod配置 。 看腾讯如何提升 Kubernetes 集群利用率?
文章图片
利用历史数据进行Request、Limit调整;
用户在资源分析页面 , 利用Crane推荐值;
调整Pod类型为相对规整的资源类型;
看腾讯如何提升 Kubernetes 集群利用率?】优化程序和镜像 。
第二 , 设置合理的HPA 。
根据历史数据 , 推荐用户设置合理的HPA范围和阈值;