K8S基于MutatingAdmissionWebhook实现资源超卖

本文分析了K8S集群中资源超卖的问题,探讨了通过MutatingAdmissionWebhook动态修改节点的Allocatable字段以实现资源超卖的思路。介绍了Admission Controller的MutatingAdmissionWebhook特性,以及如何配置MutatingWebhookConfiguration对象来监听和修改节点心跳数据,从而提高资源利用率。
摘要由CSDN通过智能技术生成

一、资源超卖问题分析

在生产环境中,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属性
上图通过将allocatable值扩大(fake allcatable),让更多的pod调度到了改节点,节点的资源利用率 current / allocatable 就变大了。

apiVersion: v1
kind: Node
metadata:
  annotations:
    ...
  creationTimestamp: ...
  labels:
    ...
  name: k8s-master.com
  resourceVersion: "7564956"
  selfLink
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值