在部署好k8s集群后,我们可以在kube-system这个namespace下面看到调度器相关的pod,默认是kube-scheduler
k8s调度器由许多的插件去控制其每个阶段的逻辑,这些插件的输入就是有节点信息+环境信息+插件配置来决定的,插件配置分为两个部分,一部分是策略侧配置,一部分是请求侧配置。
策略侧配置我们一般比较少接触,通过策略侧配置我们可以控制插件是否启用,也可以配置插件的权重,或者配置一些相对固定的参数
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- plugins:
score:
disabled:
- name: PodTopologySpread
enabled:
- name: MyCustomPluginA
weight: 2
- name: MyCustomPluginB
weight: 1
请求侧参数就经常接触,在Deployment、DaemonSet、StatefulSet这一类部署相关的CRD里面我们可以看到很多调度插件的配置,最常见的就是nodeSelector,这个就是kube-scheduler自带的NodeAffinity节点亲和性插件的参数,它定义了只有节点上面配置了helloworld: 'true'这个label的时候,才会选择这个节点。
apiVersion: apps/v1
kind: Deployment
spec:
replicas: 1
selector:
spec:
nodeSelector:
helloworld: 'true'