美文网首页
Scheduling Framework

Scheduling Framework

作者: allenhaozi | 来源:发表于2019-11-03 11:37 被阅读0次

    背景

    随着Kubernetes被越来越多的个人及公司使用, 需要越来越强大的调度能力, 面对不同的或者更复杂的场景, 调度器就会添加更多的特性来满足, 代码量会越来越大, 逻辑更复杂, 这样维护成本越来越大, 同时提供webhook的方式扩展调度, 让用户可以根据自己实际场景来来开发自定义的调度器, 但是自定义调度器也存在诸多问题

    • 调度器的扩展方式是有限制的, Filter逻辑一定是在默认的predicate之后运行
    • http + json 形式的调用效率问题
    • 原生的scheduler和extender scheduler是两个独立的服务, 不同共享原生的
      informer cache

    scheduling framework 解决如上问题, 提供了

    • 使调度更具扩展性
    • 将调度器的一些feature移到插件中, 使它变得更简单
    • 提供一种机制来接收插件结果并根据接收到的结果继续或终止
    • 提供一种机制处理错误与插件通信

    调度过程

    Scheduling Cycle & Binding Cycle

    1. Scheduling Cycle

    调度逻辑, 这个逻辑运行各种插件, 完成一个将Pod绑定到一个Node上, 这个是一个串行的过程

    1. Binding Cycle

    绑定逻辑, 负责将调度结果落地到集群中, 这是一个可以并行的结果

    如下图


    20180409-scheduling-framework-extensions.png

    Reserve plugin

    调度逻辑的最后一个插件, 防止调度成功后资源的竞争, 确保集群的资源视图准确, 也是串行逻辑的最后一个流程, 生命周期随着unreserve 或者 Post-bind 成功

    Permit 插件

    提供阻止或者延迟一个Pod的绑定( 牛逼的设计)

    • approve
      所有的Permit插件通过的Pod, 才会真正的被绑定
    • deny
      如果任何permit插件拒绝pod,它将返回到调度队列。这将触发un-reserve
    • wait
      如果Permit插件返回“wait”,那么pod将keep in Permit phase,直到Permit插件允许它, 同时提供超时机制, 超时机制同样会触发un-reserve插件

    原文地址

    相关文章

      网友评论

          本文标题:Scheduling Framework

          本文链接:https://www.haomeiwen.com/subject/txukbctx.html