k8s高级调度
# 污点和容忍
与节点调度相关
污点:例如我们在node1上面有污点,那么pod或者其他任务就不会被调度到node1上面,而是到其他的节点上面去。
容忍:某个任务上面可以配置容忍,如果我们容忍了node1上面的污点,我们就可以在node1上面进行调度
# 污点基本应用
为节点打上污点:
kubectl taint node k8s-master key=value:NoSchedule
污点造成的影响
NoSchedule:如果某个pod不能容忍该节点的污点,那么pod就无法调度到该节点
NoExecute:
如果pod不能忍受这类污点,pod会马上被驱逐
如果pod能容忍这类污点,但是在容忍度上没有指定tolerationSeconds,则pod还会一直在这个节点上运行
如果指定了tolerationSeconds,则pod还能在这个节点上继续运行这个指定的时间长度。
移除污点
kubectl taint node k8s-master key=value:NoSchedule
查看污点
只能通过 kubectl describe node node1
才可以
# 容忍
标注在pod上的,当pod被调度时,如果没有配置容忍,则该pod不会被调度到有污点的节点上,只有该pod上标注了满足某个节点的所有污点,则会被调度到这些节点
如何配置容忍:
在pod的spec下面配置容忍
tolerations:
- key: "污点的key"
value: "污点的value"
offect: "NoSchedule" # 污点产生的影响
operator: "Equal" # 表是value与污点的value要相等,也可以设置为exist表示存在key即可,此时可以不用配置value
2
3
4
5
- Equal
比较操作类型为equal,则意味着必须与污点值做匹配,key/value都必须相同,才表示能容忍该污点
- Exist
容忍与污点的比较只比较key,不比较value,不关心value是什么,只要key存在,就表示可以容忍
openstacktest-1 taints node-role.kubernetes.io/master:PreferNoSchedule
# 亲和力 Affinity
# 节点亲和力
指定某一个pod想去哪个地方
亲和力相对于nodeSelector扩展性更高
亲和力(和绝对匹配,尽量匹配)
# 案例:
- NodeAffinity
RequiredDuringSechdulingIgnoredDuringExecution
硬亲和力,即支持必须部署在指定的节点上,也支持必须不部署在指定的节点上。
PreferedDuringSchedulingIgnoreDuringExecution
软亲和力,尽量部署在满足条件的节点上,或尽量不要部署在被匹配的节点上
matchExpression
Operator:
in :满足一个就行
not in:一个都不能满足
exists:存在就满足
doesNotExist 只有不存在,才满足
gt : 必须大于节点的数值,才满足
lt:小于节点的数值,才满足
podAffinity
# pod亲和力
对于node1,node2,node3中,node3里面有一个服务a,我的服务b准备部署,可以根据节点亲和力判断是配置在node3中还是配置在node1和node2中。