专栏首页容器计算Kubernetes Scheduler Extender浅析

Kubernetes Scheduler Extender浅析

https://kubernetes.io/docs/concepts/extend-kubernetes/extend-cluster/#scheduler-extensions

Scheduler 组件可以视为一种监视 watche 和将 Pod 分配 assign 到 Node 的特殊类型控制器 controller。在 Kubernetes 里,默认的 Scheduler 完全可以被替代,又或者增加多个 Scheduler 来同时或者一起调度 Pod,这在 Kuberntes 里称为 Mulitple Scheduler。

同时 Scheduler 也提供了 webhook 的机制,来让用户通过编写自己定义的 Shedueler Exetension 来为调度 Pod 去过滤 filter 和优化 prioritize 节点。

关于 Scheduler Extender 看下面官方文档就够了,这里补充一些。

https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/scheduler_extender.md

Scheduler Extender 实际上是一个额外的调度进程,用来 Filter 和 Prioritize 节点的。所以顺理成章的,用户需要实现自己的 Filter 和 Prioritize 方法。另外 Extender 也可以实现 Bind 方法,来实现将 Pod Bind 到 Node 上的操作。

// Holds the parameters used to communicate with the extender. If a verb is unspecified/empty,
// it is assumed that the extender chose not to provide that extension.
type ExtenderConfig struct {
	// URLPrefix at which the extender is available
	URLPrefix string `json:"urlPrefix"`
	// Verb for the filter call, empty if not supported. This verb is appended to the URLPrefix when issuing the filter call to extender.
	FilterVerb string `json:"filterVerb,omitempty"`
	// Verb for the prioritize call, empty if not supported. This verb is appended to the URLPrefix when issuing the prioritize call to extender.
	PrioritizeVerb string `json:"prioritizeVerb,omitempty"`
	// Verb for the bind call, empty if not supported. This verb is appended to the URLPrefix when issuing the bind call to extender.
	// If this method is implemented by the extender, it is the extender's responsibility to bind the pod to apiserver.
	BindVerb string `json:"bindVerb,omitempty"`
	// The numeric multiplier for the node scores that the prioritize call generates.
	// The weight should be a positive integer
	Weight int `json:"weight,omitempty"`
	// EnableHttps specifies whether https should be used to communicate with the extender
	EnableHttps bool `json:"enableHttps,omitempty"`
	// TLSConfig specifies the transport layer security config
	TLSConfig *client.TLSClientConfig `json:"tlsConfig,omitempty"`
	// HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize
	// timeout is ignored, k8s/other extenders priorities are used to select the node.
	HTTPTimeout time.Duration `json:"httpTimeout,omitempty"`
}

可以见到,用户需要提供一个 sheduler policy 的配置文件,其中包括了 Extender 的前缀,Filter 和 Priorize 和 Bind 等信息。

下面是一个配置文件的 json 例子。已知 predicatespriorities 两个字段的值皆为默认值,关注一下 extenders 字段的值,只有在这里配置了,Kubernetes 在调度 Pod 的时候才会过这里这一层。

{
  "predicates": [
    {
      "name": "HostName"
    },
    {
      "name": "MatchNodeSelector"
    },
    {
      "name": "PodFitsResources"
    }
  ],
  "priorities": [
    {
      "name": "LeastRequestedPriority",
      "weight": 1
    }
  ],
  "extenders": [
    {
      "urlPrefix": "http://127.0.0.1:12345/api/scheduler",
      "filterVerb": "filter",
      "enableHttps": false
    }
  ]
}

我们熟知的**开源的 GPU 调度插件也是基于这个机制来实现 GPU 资源的调度 gpu-share-extender 的。 关于 Scheduler Extender 的实现,其实用什么语言都能做。关键是要实现到 filter 和 prioritize 的功能。 这是一个完全用 Bash 脚本完成的 Extender rothgar/bashScheduler。

关于如何编写一个一个 Scheduler Exetender,我建议直接参考 IBM 博客的一篇文章 Create a custom Kubernetes scheduler

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • yum install空间不足

    本地要编一个 ceph-exporter,需要 ceph 的相关库,于是在开发机上 yum install librados2-devel,报错了,因为第一次遇...

    runzhliu
  • Delta Lake 学习笔记(四) - 名词解释

    在了解 Delta Lake 之前,我觉得有必要解释一下经常出现的一些名词,这里收集记录一下。如果跟我一样是菜鸡,可能你也需要看一下…

    runzhliu
  • 【pyspark】parallelize和broadcast文件落盘问题

    parallize() 和 boradcast() 方法,在不使用 spark.io.encryption.enabled=true 的情况下,都会以文件的格式...

    runzhliu
  • SAP CDS view自学教程之一:如何测试基于SAP CDS view自动生成的OData服务

    I am a newbie of CDS view related topic and recently I have to learn it. I will ...

    Jerry Wang
  • JDBC读取数据优化-fetch size

    最近由于业务上的需求,一张旧表结构中的数据,需要提取出来,根据规则,导入一张新表结构中,开发同学写了一个工具,用于实现新旧结构的transformation,

    bisal
  • 解决RL好奇心探索后遗忘的问题

    Amplifying the Imitation Effect for Reinforcement Learning of

    用户1908973
  • How to find “hidden” remote jobs using Google Search.

    By using a special search operator with Google search, you can find remote jobs ...

    仇诺伊
  • 使用SAP Transaction Launcher将ABAP Webdynpro嵌入到WebClient UI中

    THINK twice why you want to include an ABAP webdynpro component into CRM UI, as ...

    Jerry Wang
  • 楼宇自动化系统中基于模糊巡逻机器人的开发(CS AI)

    楼宇自动化系统(BAS)具有监视和控制所有楼宇子系统运行的功能,如暖通空调(暖通空调控制)、用电管理、火警控制、保安和门禁控制以及电器开关控制。在BAS中,几乎...

    小童
  • 使用SAP Transaction Launcher将ABAP Webdynpro嵌入到WebClient UI中

    THINK twice why you want to include an ABAP webdynpro component into CRM UI, as ...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券