{"id":38320080,"url":"https://github.com/generals-space/kube-scheduler-extender","last_synced_at":"2026-01-17T02:39:26.287Z","repository":{"id":113501729,"uuid":"310984444","full_name":"generals-space/kube-scheduler-extender","owner":"generals-space","description":"kubernetes scheduler extender 扩展调度器","archived":false,"fork":false,"pushed_at":"2021-04-19T01:24:41.000Z","size":12440,"stargazers_count":16,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T06:32:39.530Z","etag":null,"topics":["example","go-restful","kube-scheduler","kubernetes","scheduler","scheduler-extender"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/generals-space.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-08T04:23:48.000Z","updated_at":"2024-05-16T00:54:04.000Z","dependencies_parsed_at":"2023-07-27T01:47:51.549Z","dependency_job_id":null,"html_url":"https://github.com/generals-space/kube-scheduler-extender","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/generals-space/kube-scheduler-extender","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generals-space%2Fkube-scheduler-extender","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generals-space%2Fkube-scheduler-extender/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generals-space%2Fkube-scheduler-extender/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generals-space%2Fkube-scheduler-extender/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/generals-space","download_url":"https://codeload.github.com/generals-space/kube-scheduler-extender/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/generals-space%2Fkube-scheduler-extender/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28492351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T00:50:05.742Z","status":"online","status_checked_at":"2026-01-17T02:00:07.808Z","response_time":85,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["example","go-restful","kube-scheduler","kubernetes","scheduler","scheduler-extender"],"created_at":"2026-01-17T02:39:26.188Z","updated_at":"2026-01-17T02:39:26.270Z","avatar_url":"https://github.com/generals-space.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kube-scheduler-extender\n\n参考文章\n\n1. [图解kubernetes调度器SchedulerExtender扩展](https://www.cnblogs.com/buyicoding/archive/2004/01/13/12250480.html)\n2. [图解kubernetes调度器SchedulerExtender扩展](https://blog.csdn.net/qq_42952272/article/details/104138445)\n    - 与参考文章1是同一篇, 作为备份\n3. [kube-scheduler调度扩展](https://segmentfault.com/a/1190000019034882)\n    - 小碗汤\n4. [k8s-scheduler-extender-example](//github.com/everpeace/k8s-scheduler-extender-example.git)\n    - 小碗汤的参考工程\n5. [Huang-Wei/sample-scheduler-extender](https://github.com/Huang-Wei/sample-scheduler-extender)\n    - 还没看\n6. [Kubernetes集群调度器原理剖析及思考](http://blog.itpub.net/69908804/viewspace-2639995/)\n7. [k8s调度器扩展方式](https://blog.csdn.net/yevvzi/article/details/79858170)\n    - `ExtenderConfig`, 即为`scheduler-policy.json`中`extenders`数组的配置, 拥有详细的解释.\n8. [Kubernetes 1.8抢占式调度Preemption源码分析](https://my.oschina.net/jxcdwangtao/blog/1563456)\n\n## 前言\n\n本例实现了一个简单的扩展调度器, 没有任何作用, 只展示其工作流程和部署方式.\n\n一个简单的 scheduler-extender 只是一个普通的 http 服务器, 核心 scheduler 调度器通过 http API 与扩展调度器通信.\n\n当然, 为了实现真正的调度器功能, 扩展调度器可能需要对集群中的资源进行比较判断, 所以还得拥有一个 kubernetes 的客户端.\n\n```\n       kube-scheduler                                kube-scheduler-extender(HttpAPI)\n+------------|-------------+                          +--------------------------+\n|            |             |                          |                          |\n|    +-------↓--------+    |      Pod + []Node        |    +----------------+    |\n|    |                ├───────────────────────────────────\u003e|                |    |\n|    |   predicates   |    |                          |    |   predicates   |    |\n|    |                |\u003c───────────────────────────────────┤                |    |\n|    +-------┬--------+    |     []Node(filtered)     |    +----------------+    |\n|            |             |                          |                          |\n|            |             |                          |                          |\n|    +-------↓--------+    |       Pod + []Node       |    +----------------+    |\n|    |                ├───────────────────────────────────\u003e|                |    |\n|    |   prioritize   |    |                          |    |   prioritize   |    |\n|    |                |\u003c───────────────────────────────────┤                |    |\n|    +-------┬--------+    |      []Node(scored)      |    +----------------+    |\n|            |             |                          |                          |\n|            |             |                          |                          |\n|    +-------↓--------+    |        Pod + Node        |    +----------------+    |\n|    |                ├───────────────────────────────────\u003e|                |    |\n|    |      bind      |    |                          |    |      bind      |    |\n|    |                |\u003c───────────────────────────────────┤                |    |\n|    +-------┬--------+    |        Error/nil         |    +----------------+    |\n|            |             |                          |                          |\n|            |             |                          |                          |\n+------------|-------------+                          +--------------------------+\n             ↓                                                                    \n```\n\n\u003e 上述过程中没有提到Preemption(抢占)阶段, 因为目前还没有研究过, 可见参考文章8.\n\n## 环境准备\n\nkubernetes: v1.17.2\n\ngo: 1.3+\n\n## 部署运行\n\n本工程在本地环境即可运行, 但是需要部署在集群内部才能生效.\n\n### 编译可执行文件\n\n```\ngo build -o kube-scheduler-extender\n```\n\n### 构建镜像\n\n```\ndocker build -t registry.cn-hangzhou.aliyuncs.com/generals-kuber/kube-scheduler-extender:v0.0.1 .\n```\n\n### 部署扩展调度器服务\n\n```\nkubectl apply -f deploy/kube-scheduler-extender.yaml\n```\n\n等待启动完成后, 执行如下命令, 将开启扩展调度器所需的配置文件, 拷贝到目标目录下\n\n```\ncp deploy/kube-scheduler-config.yaml /etc/kubernetes/scheduler-config.yaml\ncp deploy/scheduler-policy.json /etc/kubernetes/scheduler-policy.json\n```\n\n### 修改核心调度器配置\n\n然后修改`/etc/kubernetes/manifests/kube-scheduler.yaml`文件, 将上面两个文件挂载进去, 并在`command`字段中指定其路径, 具体的修改步骤, 见[kube-scheduler.yaml](./deploy/kube-scheduler.yaml)\n\n------\n\n部署扩展调度器, 需要同时修改`kube-scheduler`核心调度器的配置, 指定扩展调度器的访问地址. 这样, 在经过默认的核心调度器筛选后, 再由我们的扩展调度器进行进一步筛选.\n\n但是必须要先部署扩展调度器本身, 再修改`kube-scheduler`核心调度器的配置, 顺序不能颠倒. 否则调度器本身在调度时, `kube-scheduler`就会尝试向扩展调度器服务发请求, 出现了鸡生蛋蛋生鸡的情况...\n\n而且每次更新`kube-scheduler-extender`, 都要先把`kube-scheduler`的`--config`字段移除, 否则新的Pod无法创建成功.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenerals-space%2Fkube-scheduler-extender","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgenerals-space%2Fkube-scheduler-extender","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenerals-space%2Fkube-scheduler-extender/lists"}