天天看点

Kubernetes必备知识: 配置调度器

所属技术领域:

K8s

|名词定义|

Kubernetes调度程序是一项策略丰富,可感知拓扑,特定于工作负载的功能,会显着显著影响可用性,性能和容量。调度程序需要考虑单个和集体的资源需求,服务质量需求,硬件/软件/策略约束,亲和力和反亲和力规范,数据位置,工作负载间的干扰,期限等。特定于工作负载的需求将在必要时通过API公开。

|技术特点|

 怎么配置调度器

怎么启动一个调度器,这里有两种情况:

-默认配置(——write—config—to);

-配置-文件(——config)。

配置文件解释

-schedulerName:负责Pod.SchedulerName的调度

-algorithmSource:配置算法

-hardPodAffinitySymmetricWeight:配置Affnity权重

-percentageOfNodesToScore:filter到的节点数跟总节点的数的比率达到这个值的时候退出filter

-bindTimeoutSeconds:binging阶段的超时时间

 怎么启动一个调度器

第一种我们可以通过默认配置启动调度器,什么参数都不指定;

第二种我们可以通过指定配置的调度文件。

如果我们通过默认的方式启动的话,想知道默认配置启动的参数是哪些?可以用 --write-config-to 可以把默认配置写到一个指定文件里面。

下面来看一下默认配置文件,如下图所示:

Kubernetes必备知识: 配置调度器

第一个 algorithmSource 是算法提供者,目前提供三种方式:Provider、file、configMap,后面会介绍这块;

第二个 percentageOfNodesToscore,就是调度器提供的一个扩展能力,能够减少 Node 节点的取样规模;

第三个 SchedulerName 是用来表示调度器启动的时候,负责哪些 Pod 的调度;如果没有指定的话,默认名称就是 default-scheduler;

第四个 bindTimeoutSeconds,是用来指定 bind 阶段的操作时间,单位是秒;

第五个 ClientConnection,是用来配置跟 kube-apiserver 交互的一些参数配置。比如 contentType,是用来跟 kube-apiserver 交互的序列化协议,这里指定为 protobuf;

第六个 disablePreemption,关闭抢占协议;

第七个 hardPodAffinitySymnetricweight,配置 PodAffinity 和 NodeAffinity 的权重是多少。

 algorithmSource

这里介绍一下过滤器、打分器等一些配置文件的格式,目前提供三种方式:

-Provider

-file

-configMap

如果指定的是 Provider,有两种实现方式:

一种是 DefaultPrivider;

一种是 ClusterAutoscalerProvider。

ClusterAutoscalerProvider 是优先堆叠的,DefaultPrivider 是优先打散的。关于这个策略,当你的节点开启了自动扩容,尽量使用 ClusterAutoscalerProvider 会比较符合你的需求。

这里看一下策略文件的配置内容,如下图所示:

Kubernetes必备知识: 配置调度器

这里可以看到配置的过滤器 predicates,配置的打分器 priorities,以及我们配置的扩展调度器。这里有一个比较有意思的参数就是:alwaysCheckAllPredicates。它是用来控制当过滤列表有个返回 false 时,是否继续往下执行?默认的肯定是 false;如果配置成 true,它会把每个插件都走一遍。

|资料来源|

名词定义:

https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/

继续阅读