kubernetes

Scheduler:

  • cache:本地数据,主要是node、pod、pdb信息
  • queue:需要调度的pod队列
    • 默认为FIFO,可选为PriorityQ;PriorityQ包含UnschedulbleQ和ActiveQ(前者会在事件触发时刷到后者,如下图中部分事件);UnschedulbleQ中含有nominatedPods
  • predicates存在两阶段:加nominatedPods(资源要求更高)、不加nominatedPods(亲和性要求更高)
  • pod informer存在两个:分别对应对已调度的pod、尚未调度的pod;delete事件不一定是apiserver发出的,具体如下图:

  • assume:assumedPods[pod]为true;bind:podStates[pod].bindingFinished为true;新goroutine定期expire那些bind且超过ttl的pod;assume必须保证podStates不存在
  • 问题
  1. sync周期太短:sync产生update事件(有一定延迟) && pod的ttl还没到 -> update queue,再次调度 -> assume时podStates已经存在出错(sync默认为0,关闭)
  2. 开抢占后太慢:addNominatedPods需要遍历ActiveQ;拆分PriorityQ:UnschedulbleQ、ActiveQ、nominatedPods

 

posted @ 2018-11-19 21:15  waynepeking  阅读(121)  评论(0)    收藏  举报