kube-scheduler刷新节点资源使用缓存的时间间隔是多少
kube-scheduler缓存刷新规则及批量调度异常解决方案
缓存刷新相关参数说明
- 正常运行场景下kube-scheduler通过list-watch机制实时获取节点、Pod的增量变更事件,节点资源占用的更新延迟通常在毫秒级,不存在固定的刷新间隔
- 兜底的全量缓存同步周期由启动参数
--resync-period控制,默认值为15分钟,仅用于增量事件丢失后的校验修复,日常调度不会依赖该全量同步 - 调度器完成Pod到节点的绑定操作后,会立即更新本地内存缓存的节点已分配资源,无需等待apiserver的事件推送。你遇到的批量部署时调度不符合预期的问题,本质是并发调度的乐观锁冲突:多个调度协程在同一时间窗口读取了同一版本的节点缓存数据,均判断资源满足要求,最终绑定后节点实际分配资源超出预期,和缓存刷新间隔无关。
批量部署优化建议
你当前使用的Shell循环批量创建Pod的YAML如下:
apiVersion: v1 kind: Pod metadata: name: ${POD_NAME} labels: name: multischeduler-example spec: schedulerName: my-scheduler containers: - name: pod-with-second-annotation-container image: ibmcom/pause:3.1 resources: requests: memory: "1Gi" cpu: "1" limits: memory: "2Gi" cpu: "2"
可以通过以下方式优化调度准确率:
- 在Shell循环中新增适当延迟,比如每创建3~5个Pod后sleep 1秒,给调度器留足够的时间更新缓存,避免短时间内大量调度请求读取同一版本的缓存
- 如果你使用的是自定义调度器,可以在调度逻辑中新增临时资源预留机制,完成资源判断后先锁定对应节点的缓存配额,再执行绑定操作,避免并发冲突
- 调整调度器启动参数
--kube-api-qps、--kube-api-burst降低调度请求的并发度,减少竞争概率
内容的提问来源于stack exchange,提问作者moluzhui
相关产品推荐
相关产品推荐

