kubernetes scheduler 调度方式
来源:原创
时间:2019-01-21
作者:脚本小站
分类:云原生
kubernetes集群中有多个节点,Pod调度调度到那个节点上是根据调度算法,这些算法会根据节点的各种因素的综合权重来决定Pod最终会调度到那个节点上,调度器(预选策略-->优选函数-->选择)。
优选函数:
LeastRequested:根据CPU使用率,内存使用情况来计算权重。
BlancedResourceAllocation:根据CPU与内存使用比率来计算权重。
NodePreferAvoidPods:根据注解annotation来计算权重。
SelectorSpreading:尽量不要将相同的Pod调度到一个节点,就是将Pod散开调度。
NodeAffinity、InterPodAffinity:https://www.scriptjc.com/article/1019
TaintToleration:https://www.scriptjc.com/article/1018
ImageLocality:根据节点已近拥有的镜像来调度,比如某个节点已近拥有了镜像其他节点没有,这个节点权重就高,默认没启用。
根据Pod或节点的默认调度方法可能并不是我们想要的,可以手动设置使其达到我们预期的效果,如某些节点上有SSD硬盘或有GPU,我们就可以指定某些Pod到某个特定的节点上运行。
hostName
hostName的方式:直接指定主机名 pod.spec.hostName 。
apiVersion: v1 kind: Pod metadata: name: pod-nodename spec: containers: - name: busybox image: busybox:1.28 command: ["sleep","3600"] nodeName: k8s-node2
nodeSelector
nodeSelector的调度方式是主动指定到含有一些特定的标签的节点上。只要在节点上打上标签在Pod中使用nodeSelector选择这个标签即可。
给节点打标签:
kubectl label nodes node1 disktype=ssd
将Pod调度到含有指定标签的节点上:
apiVersion: v1 kind: Pod metadata: name: myapp-ssd spec: containers: - name: myapp image: myapp:v1 nodeSelector: disktype: ssd