写点什么

在 Python 语言环境中进行 Kubernetes Scheduling 功能

2020 年 3 月 06 日

在 Python 语言环境中进行 Kubernetes Scheduling 功能

一说到 Scheduling,话题就沉重了。它在计算机科学研究领域覆盖面很大、很全。


Scheduling 的需求一般是寻找正在等待的对象,以及制定为这些需求服务的计划。总体来说,就是希望使用最合适的资源来实现减少服务时间的目的。


Kubernetes 也是一样。Kubernetes 将 Pods(同组容器的组)调度到集群的节点上。这意味着 Kubernetes 头节点的核心组件之一是 Scheduler,它是 Kubernetes Master 的一个组件,通常与 API Server 和 Controller Manager 组件部署在一个节点,共同组成 Master 的三剑客。


一句话概括 Scheduler 的功能:将 PodSpec.NodeName 为空的 Pods 逐个地,经过预选(Predicates)和优选(Priorities)两个步骤,挑选最合适的 Node 作为该 Pod 的 Destination。


为了进一步神秘化调度过程,我们可以将其近似为 Kubernetes 需要查看集群中所有的节点,过滤出不是很好匹配的节点,以运行处于 Pending 状态的 Pod,然后选择一个。


用复杂一点的话来说,Scheduler 将运行一组 Predicates,然后运行一些优先功能。最终结果是可以运行一系列工作负载(即 Pod)的节点,Pod 结束于具有最高排名的节点。


这种过滤和排名并不是什么新鲜事,可以在 30 年的旧系统中找到。


具有非默认 Scheduler 的 pod

让我们深入了解并开启一个指定非默认 Scheduler 的 Pod。这可以使用 Pod Spec 中的 schedulerName 在 Pod 清单中完成。在下面的要点中,我们指定一个名为 foobar 的调度器。一旦你创建了这个 Pod,由于 Kubernetes 不知道这个 Scheduler,Pod 将保持在 Pending 状态,直到我们为分配一个节点到这个 Pod。



用 Python 写 Kubernetes Scheduler

我们可以运行一些非常先进的功能来确定可以提供 Pod 请求的可用节点列表,然后运行一些同样高级的功能来对可以提供 Pod 请求的节点进行排名,当然我们也可以随机选择一个节点。随机选择并不像听起来那么糟糕,在某些情况下可能是一个比较折中的办法,因为它计算成本很少。


要实现 Scheduler,我们会在 Pods 端点上运行 Watch。每当系统中的 Pods 集合发生变化时,我们就会收到通知。当 Pod 处于 Pending 状态并指定了我们的调度程序名称时,我们就呼叫随机 Scheduler。


要做随机调度,我们只需要在系统中构建可用节点的列表,然后随机选择一个。


要在随机节点上调度 Pod,我们要创建一个 Binding 对象。这说到底是一个附加描述目标节点对象的 POST。


感谢 Ian Lewis 的提示以及他的博客。


下面的要点使用 Kubernetes Python 客户端实现了简单的调度。



现在,将这个 Python 脚本粘贴在一个容器中,运行在一个 Pod 中,于是你就有了一个 Kubernetes 的自定义 Scheduler。


本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/KiKALG5iO-Z5G-eLqx-VIA


2020 年 3 月 06 日 21:06125

评论

发布
暂无评论
发现更多内容

近邻算法介绍

黄大路

数据挖掘 数据分析

食堂就餐卡系统设计

上山砍柴

极客大学架构师训练营

教你动手写UDP协议栈

Rice嵌入式开发技术分享

TCP udp 协议栈

新媒体小编一年工作心得

彭宏豪95

职场 感悟 工作

MySQL 笔记(一)基础架构

奈何花开

Java MySQL

2020年6月7日 接口、lambda表达式与内部类

瑞克与莫迪

repo 导出本地 git tag 给他人

zqb-all

git

现在的我们想要获得成功,除了付出努力之外,还要具备见识。

叶小鍵

初识 Docker 与安装 | Docker 系列

AlwaysBeta

Docker

体验碎片-06/06

黄大路

产品经理

架构方法:运用合适的工具表达设计

WANDEFOUR

极客大学架构师训练营

我是这样给同事分析幂等性问题的

架构精进之路

幂等性 服务设计

在 Windows WSL 2 中使用 Docker Desktop

FeiLong

Docker WSL2

优秀架构师具备的能力

阿飞

极客大学架构师训练营

食堂就餐卡系统设计-uml练习

森林

《OKR工作法》读书笔记

大饼土博

读书笔记 管理 OKR

Backend Roadmap

陈皮

Backend Developer

食堂就餐卡系统设计

架构师课程第一周作业

杉松壁

[ARTS打卡] week 02

Mau

ARTS 打卡计划

软件架构第一章总结

itrickzhang

【架构师训练营-作业-1】食堂就餐卡系统设计

小动物

系统设计 极客大学架构师训练营 作业

产品周刊 | 第 18 期(20200607)

Herbert

产品 产品经理 产品设计 产品推荐

架构设计文档之食堂就餐卡系统设计

itrickzhang

架构设计 架构文档 架构样例 架构分析 架构总结

ARTS 第 1 周

乌拉里

ARTS 打卡计划

架构文档

陈皮

架构 极客大学架构师训练营

程序员摆地摊?你别痴心妄想了,还不如当「在地青年」呢

非著名程序员

程序员 提升认知 职业规划 认知提升

B端产品经理养成记(3):访谈

涛哥

产品经理

述职报告的一些建议

黄大路

职场

「架构师训练营」第1周作业 - 食堂就餐卡系统设计

guoguo 👻

极客大学架构师训练营

如何用一台 MacBook 创造高额年化收益 | ETH2.0 Staking 教程

陈东泽 EuryChen

区块链 Ethereum

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

在 Python 语言环境中进行 Kubernetes Scheduling 功能-InfoQ