Kubernetes 调度器调度策略配置修改
介绍Kubernetes 调度器的主要作用就是为新创建的 pod ,寻找一个最合适的节点。大概需要经过两个过程:列出所有可以调度的节点。根据不同的断言(Predicates)实现了过滤接口,过滤出能够调度的节点。在能够调度的节点中选出最合适的节点。根据不同的优先级(Priorities)实现了打分接口,选出分数最高的节点。这些打分接口都配有相关的比重,表示在总分数中的占比。默认值可以在源码 kub
介绍
Kubernetes 调度器的主要作用就是为新创建的 pod ,寻找一个最合适的节点。大概需要经过两个过程:
- 列出所有可以调度的节点。根据不同的断言(Predicates)实现了过滤接口,过滤出能够调度的节点。
- 在能够调度的节点中选出最合适的节点。根据不同的优先级(Priorities)实现了打分接口,选出分数最高的节点。
这些打分接口都配有相关的比重,表示在总分数中的占比。默认值可以在源码 kubernetes-release\pkg\scheduler\algorithmprovider\defaults\register_priorities.go
中获取。有时候我们想要调节某个打分接口的比重,来修改调度器调度策略,从而控制 pod 调度。
修改配置
可以通过执行 kube-scheduler --policy-config-file <filename>
或 kube-scheduler --policy-configmap <ConfigMap>
设置并使用调度策略。下面通过指定配置文件的方式来设置修改某个打分接口的比重。
修改 kube-scheduler.yaml 文件,主要在 command 中添加 - --policy-config-file=/etc/kubernetes/policy.cfg
指定配置文件。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
component: kube-scheduler
tier: control-plane
aaa: bbb
name: kube-scheduler
namespace: kube-system
spec:
containers:
- command:
- kube-scheduler
- --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
- --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
- --bind-address=127.0.0.1
- --kubeconfig=/etc/kubernetes/scheduler.conf
- --leader-elect=true
- --policy-config-file=/etc/kubernetes/policy.cfg
image: registry.aliyuncs.com/google_containers/kube-scheduler:v1.17.12
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 8
httpGet:
host: 127.0.0.1
path: /healthz
port: 10259
scheme: HTTPS
initialDelaySeconds: 15
timeoutSeconds: 15
name: kube-scheduler
resources:
requests:
cpu: 100m
volumeMounts:
- mountPath: /etc/kubernetes/scheduler.conf
name: kubeconfig
readOnly: true
- mountPath: /etc/kubernetes/policy.cfg
name: kube-policy-config
readOnly: true
hostNetwork: true
priorityClassName: system-cluster-critical
volumes:
- hostPath:
path: /etc/kubernetes/scheduler.conf
type: FileOrCreate
name: kubeconfig
- hostPath:
path: /etc/kubernetes/policy.cfg
type: FileOrCreate
name: kube-policy-config
status: {}
policy.cfg 配置文件内容:
{"kind":"Policy","apiVersion":"v1","priorities":[{"name":"NodeAffinityPriority","weight":100}]}
主要是一个 json 格式的字符串,内容简单明了。当修改完 kube-scheduler.yaml 文件后,pod 会自动重启更新。
参考
更多推荐
所有评论(0)