Coder Social home page Coder Social logo

kube-scheduler-extender's Introduction

kube-scheduler-extender

参考文章

  1. 图解kubernetes调度器SchedulerExtender扩展
  2. 图解kubernetes调度器SchedulerExtender扩展
    • 与参考文章1是同一篇, 作为备份
  3. kube-scheduler调度扩展
    • 小碗汤
  4. k8s-scheduler-extender-example
    • 小碗汤的参考工程
  5. Huang-Wei/sample-scheduler-extender
    • 还没看
  6. Kubernetes集群调度器原理剖析及思考
  7. k8s调度器扩展方式
    • ExtenderConfig, 即为scheduler-policy.jsonextenders数组的配置, 拥有详细的解释.
  8. Kubernetes 1.8抢占式调度Preemption源码分析

前言

本例实现了一个简单的扩展调度器, 没有任何作用, 只展示其工作流程和部署方式.

一个简单的 scheduler-extender 只是一个普通的 http 服务器, 核心 scheduler 调度器通过 http API 与扩展调度器通信.

当然, 为了实现真正的调度器功能, 扩展调度器可能需要对集群中的资源进行比较判断, 所以还得拥有一个 kubernetes 的客户端.

       kube-scheduler                                kube-scheduler-extender(HttpAPI)
+------------|-------------+                          +--------------------------+
|            |             |                          |                          |
|    +-------↓--------+    |      Pod + []Node        |    +----------------+    |
|    |                ├───────────────────────────────────>|                |    |
|    |   predicates   |    |                          |    |   predicates   |    |
|    |                |<───────────────────────────────────┤                |    |
|    +-------┬--------+    |     []Node(filtered)     |    +----------------+    |
|            |             |                          |                          |
|            |             |                          |                          |
|    +-------↓--------+    |       Pod + []Node       |    +----------------+    |
|    |                ├───────────────────────────────────>|                |    |
|    |   prioritize   |    |                          |    |   prioritize   |    |
|    |                |<───────────────────────────────────┤                |    |
|    +-------┬--------+    |      []Node(scored)      |    +----------------+    |
|            |             |                          |                          |
|            |             |                          |                          |
|    +-------↓--------+    |        Pod + Node        |    +----------------+    |
|    |                ├───────────────────────────────────>|                |    |
|    |      bind      |    |                          |    |      bind      |    |
|    |                |<───────────────────────────────────┤                |    |
|    +-------┬--------+    |        Error/nil         |    +----------------+    |
|            |             |                          |                          |
|            |             |                          |                          |
+------------|-------------+                          +--------------------------+
             ↓                                                                    

上述过程中没有提到Preemption(抢占)阶段, 因为目前还没有研究过, 可见参考文章8.

环境准备

kubernetes: v1.17.2

go: 1.3+

部署运行

本工程在本地环境即可运行, 但是需要部署在集群内部才能生效.

编译可执行文件

go build -o kube-scheduler-extender

构建镜像

docker build -t registry.cn-hangzhou.aliyuncs.com/generals-kuber/kube-scheduler-extender:v0.0.1 .

部署扩展调度器服务

kubectl apply -f deploy/kube-scheduler-extender.yaml

等待启动完成后, 执行如下命令, 将开启扩展调度器所需的配置文件, 拷贝到目标目录下

cp deploy/kube-scheduler-config.yaml /etc/kubernetes/scheduler-config.yaml
cp deploy/scheduler-policy.json /etc/kubernetes/scheduler-policy.json

修改核心调度器配置

然后修改/etc/kubernetes/manifests/kube-scheduler.yaml文件, 将上面两个文件挂载进去, 并在command字段中指定其路径, 具体的修改步骤, 见kube-scheduler.yaml


部署扩展调度器, 需要同时修改kube-scheduler核心调度器的配置, 指定扩展调度器的访问地址. 这样, 在经过默认的核心调度器筛选后, 再由我们的扩展调度器进行进一步筛选.

但是必须要先部署扩展调度器本身, 再修改kube-scheduler核心调度器的配置, 顺序不能颠倒. 否则调度器本身在调度时, kube-scheduler就会尝试向扩展调度器服务发请求, 出现了鸡生蛋蛋生鸡的情况...

而且每次更新kube-scheduler-extender, 都要先把kube-scheduler--config字段移除, 否则新的Pod无法创建成功.

kube-scheduler-extender's People

Contributors

generals-space avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

kube-scheduler-extender's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.