文章目录
一、资源超卖问题分析
在生产环境中,kubernetes集群的计算节点上运行着许许多多的Pod,分别跑着各种业务容器,我们通常用Deployment、DeamonSet、StatefulSet等资源对象去控制Pod的增删改。因此,开发或运维往往需要配置这些资源对象的Containers字段中业务容器的CPU和内存的资源配额:requests和limit
- requests:节点调度pod需要的资源,每次成功调度则将节点的Allocatable属性值(可分配资源)重新计算,
新的Allocatable值 = 旧的Allocatable值 - 设置的requests值 - limit:节点中运行pod能够获得的最大资源,当cpu
我们不难发现,当requests字段设置太大的时候,pod实际使用的资源却很小,导致计算节点的Allocatable值很快就被消耗完,节点的资源利用率会变得很低。

上图中最大的蓝色框(allocatable)为计算节点可分配资源,橙色框(requests)为用户配置的requests属性,红色框(current)为业务容器实际使用的资源。因此节点的资源利用率为 current / allocatable。而由于requests设置太大,占满了allocatable,导致新的pod无法被调度到这个节点,就会出现节点实际资源占用很低,却因为allocatable太低导致pod无法调度到该节点的现象。
因此我们能否通过动态调整allocatable的值来让计算节点的可分配资源变得"虚高",骗过k8s的调度器,让它以为该节点可分配资源很大,让尽可能多的pod调度到该节点上呢?

上图通过将allocatable值扩大(fake allcatable),让更多的pod调度到了改节点,节点的资源利用率 current / allocatable 就变大了。
apiVersion: v1
kind: Node
metadata:
annotations:
...
creationTimestamp: ...
labels:
...
name: k8s-master.com
resourceVersion: "7564956"
selfLink

本文分析了K8S集群中资源超卖的问题,探讨了通过MutatingAdmissionWebhook动态修改节点的Allocatable字段以实现资源超卖的思路。介绍了Admission Controller的MutatingAdmissionWebhook特性,以及如何配置MutatingWebhookConfiguration对象来监听和修改节点心跳数据,从而提高资源利用率。
最低0.47元/天 解锁文章
8263

被折叠的 条评论
为什么被折叠?



