首页 > 虚拟化 > kubernetes的调度简介nodeName nodeSelector Affinity Anti-affinity Taints Tolerations
2018
09-12

kubernetes的调度简介nodeName nodeSelector Affinity Anti-affinity Taints Tolerations

kubernetes的调度简介nodeName nodeSelector Affinity Anti-affinity Taints Tolerations

kubernetes集群调度是pod节点之间、pod和node节点之间的互动关系,为满足线上pod和pod间,pod和node节点间结合或互斥关系,有单节点、多节点(打tag),硬性要求,弹性要求、权重等选项。下面按3块来说明:
nodeName和nodeSelector节点选择器
Affinity亲和和anti-affinity反亲和
taints污点和tolerations容忍

nodeName和nodeSelector

目的是给pod选择指定的node来调度

nodeName只能选择一个node主机运行pod服务,如下,只能调度到k8snode1节点

nodeSelector,选择打标签的一批node主机运行pod服务,官网例子如下

对k8snode1节点加了标签,disktype=ssd,nginx需要调度到有这个标签的node节点上

亲和Affinity和反亲和anti-affinity

增强版节点选择器亲和Affinity和反亲和anti-affinity,更详细配置了pod可以调度到哪些node节点上,目的是给pod选择可运行的node节点,并且用以定义pod之间互斥和相依关系

requiredDuringSchedulingIgnoredDuringExecution 硬性要求
preferredDuringSchedulingIgnoredDuringExecution 弹性要求

nodeAffinity

官网例子如下

上面例子是说这个pod只能部署到key是e2e-az-name,value是e2e-az1或e2e-az2主机上,最好是有这样的标签:key是another-node-label-key,value是another-node-label-value,此类主机优先
operator可以为In, NotIn, Exists, DoesNotExist, Gt, Lt,不同的值,结果也不相同,见 kubectl explain pod.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions.operator
如果pod调度完成,再修改上面参数,那么此pod也不会被重新调度
weight数值越大,权重越高
为了部署上面pod,需要对其中一个node节点打标签,否则pod是pending状态

再举个例子:

podAffinity和podAntiAffinity

redis配置示例如下

web-server配置示例如下

上述配置用了PodAntiAffinity,规则为topologyKey: “kubernetes.io/hostname”。redis需要3个pod在3台不同的主机上保证高可用,所以用反亲和。各种集群,比如zookeeper,kafka也需要用到反亲和,避免集群所有pod调度到同一台node节点。而web-server也保证一个node节点只运行一个pod,标签为app:web-store,并且web-server和redis部署到同一个node节点

再举个例子

taints污点和tolerations容忍

taints和tolerations本质也是打了一个tag,类似于亲和性和反亲和(pod和pod之间的关系),目的是node可以拒绝pod调度到自己上面。比如一个node节点给自己加了一个taints污点,pod必须能够tolerations容忍这个污点,才可以调度到这个node上面,忍一时风平浪静,退一步海阔天空,有污点就忍忍吧
查看master节点taints,是不允许pod调度到上面,

那我偏要调度到master节点呢,比如coredns、kube-dns等,看看coredns

还是以coredns和kube-dns举例

有污点的话,添加容忍就可以调度。kubernetes的调度介绍以上几种方式,详细请阅览官方文档

参考文档

https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/

https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/nodeaffinity.md

https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/podaffinity.md

最后编辑:
作者:bbotte

kubernetes的调度简介nodeName nodeSelector Affinity Anti-affinity Taints Tolerations》有 2 条评论

  1. 罗拉 说:

    呵呵。学习了。感触良多!

  2. daxi 说:

    学无止境,认真拜读!

罗拉的回复 取消回复

你的email不会被公开。