在部署好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'