k8s scheduler Cahce 优化

本文探讨了k8s scheduler中的Cache优化,包括引入Cache的原因,它如何提升调度性能,以及snapshot在解决缓存同步问题上的作用。通过snapshot快照,scheduler能够以只读方式访问固定信息,提高调度效率。schedulerCache.headNode属性用于加速snapshot生成,利用双向链表实现高效更新和查找。
摘要由CSDN通过智能技术生成

k8s scheduler Cahce 优化


注:
该代码是基于k8s release v1.21.1 版本

Cache 概念

Cache 在 kube-scheduler 中是一个专门用来缓存当前集群 node 和 pod 状态信息的中间层。

Cache 数据结构如下所示:

type schedulerCache struct {
   
   // 用来通知schedulerCache停止的chan,说明schedulerCache有自己的协程
   stop   <-chan struct{
   }
   // 假定Pod一旦完成绑定,就要在指定的时间内确认,否则就会超时,ttl就是指定的过期时间,默认30秒
   ttl    time.Duration
   // 定时清理超时的AssumePod. 默认是1秒钟
   period time.Duration

   // This mutex guards all fields within this cache struct.
   mu sync.RWMutex
   // a set of assumed pod keys.
   // The key could further be used to get an entry in podStates.
   // 假定Pod集合,map的key与podStates相同,都是Pod的NS+NAME,
   // 使用空结构体作为值,一种设计,在v1.20 还是用bool型的,这里就是用strcut{} 'sets.String map[string]Empty'
   // struct {}是一个无元素的结构体类型,通常在没有信息存储时使用。优点是大小为0,不需要内存来存储struct {}类型的值。conli-good
   assumedPods sets.String
   // a map from pod key to podState.
   // 获取podState的map, podState是对Cache的属性拓展,主要还是一个v1.Pod
   podStates map[string]*podState
   // 所有的Node,键是Node.Name,值是nodeInfoListItem
   // 双向链表,怎么感觉有点像是一个LRU缓存,最近更新的放在头节点中
   nodes     map[string]*nodeInfoListItem
   // headNode points to the most recently updated NodeInfo in "nodes". It is the
   // head of the linked list.
   headNode *nodeInfoListItem
   //节点按照zone组织成树状,前面提到用nodeTree中Node的名字再到nodes中就可以查找到NodeInfo
   nodeTree *nodeTree
   // A map from image name to its imageState.
   imageStates map[string
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值