1.影响pod调度的因素
nodeName 节点名
resources 资源限制
hostNetwork 宿主机网络
污点
污点容忍
Pod亲和性
Pod反亲和性
节点亲和性
2.污点
通常是作用于worker节点上,其可以影响pod的调度
语法:key[=value]:effect
effect:[ɪˈfekt]
effect必须是NoSchedule、PreferNoSchedule或NoExecute。
NoSchedule: [noʊ,ˈskedʒuːl]
该节点不再接收新的Pod调度,但不会驱赶已经调度到该节点的Pod。
PreferNoSchedule: [prɪˈfɜːr,noʊ,ˈskedʒuː]
该节点可以接受调度,但会尽可能将Pod调度到其他节点,换句话说,让该节点的调度优先级降低啦。
NoExecute:[ˈnoʊ,eksɪkjuːt]
该节点不再接收新的Pod调度,与此同时,会立刻驱逐已经调度到该节点的Pod。
1.查看节点污点
kubectl describe nodes
2.创建10个pod,发现pod调度在232和233节点上
3.给k8s232打上污点
kubectl taint node k8s232 wudianmingzi=wudian:NoExecute
4.查看污点kubectl describe nodes|grep Taints,发现此时已经有污点
5.查看pod信息,发现此时所有pod都调度到k8s233上
6.移除污点:kubectl taint node k8s232 wudianmingzi-
7.移除污点,从新创建pod之后,pod能重新调度到pod上
命令总结:
查看污点:
kubectl describe nodes|grep Taints
制造污点帮助信息
kubectl taint --help
制造污点
kubectl taint node 节点名 key=value:NoExecute
value可省略
移除污点
kubectl taint node k8s232 key-NoExecute 移除现在节点所有的pod
NoSchedule 不移除,但是不会有新的pod
PreferNoSchedule 优先级降低
3.污点容忍
pod.spec.tolerations
spec:# 配置Pod的污点容忍tolerations:# 指定污点的key# 若不指定key,则operator的值必须为Exists,表示匹配所有的key- key: qq# 指定污点的valuevalue: ww# 指定污点的effect,有效值为: NoSchedule, PreferNoSchedule,NoExecute# 若不指定则匹配所有的影响度。effect: NoExecute# 表示key和value的关系,有效值为Exists, Equal。# Exists:# 表示存在指定的key即可,若配置,则要求value字段为空。# Equal:# 默认值,表示key=value。operator: Equal- key: weboperator: Exists- key: node-role.kubernetes.io/masteroperator: Exists# 如果不指定key,value,effect,仅配置"operator: Exists"表示无视任何污点!#- operator: Exists
例1:匹配所有key为web,value值为空,effect为NoExecute的污点
tolerations:
- key: "web"operator: "Exists" # 当value为空时,使用Exists表示key存在即可effect: "NoExecute"
例2:匹配所有key为test,值为version1,effect为所有的污点
tolerations:
- key: "test"operator: "Equal" # 当指定了具体的value时,使用Equal进行匹配value: "version1"effect: "*" # "*"表示匹配所有可能的effect值
例3:忽视所有污点
tolerations:
- operator: "Exists" # 使用Exists且不指定key和effect,表示容忍所有污点
补充:实现pod调度到特点两个pod上
给节点打标签:
kubectl label nodes k8s231 key=value
选择调度的节点(所有节点忽视所有污点,如上例三配置)
spec:nodeSelector:key=value...
注意:节点必须包含所有这里的标签,才会被选上
所有节点删除标签
kubectl label nodes --all key-
但是这样子当两个节点,比如节点a,key=value1,key2=value2,此时无法满足,所有引入了亲和性。
4.节点亲和性
查看相关信息
三种类型:节点亲和性,pod亲和性,pod反亲和性
节点亲和性:
affinity:# 定义节点的亲和性nodeAffinity:# 定义硬限制requiredDuringSchedulingIgnoredDuringExecution:# 定义节点的匹配条件nodeSelectorTerms:# 基于节点的标签进行匹配- matchExpressions:# 指定标签的key- key: hobby# 指定标签的valuevalues:- eat- sleep# 指定key和value之间的对应关系,有效值如下:# In:# key的值必须在vlaues内。要求values不能为空。# NotIn:# 和In相反。要求values不能为空。# Exists:# 只要存在指定key即可,vlaues的值必须为空。# DoesNotExist:# 只要不存在指定key即可,vlaues的值必须为空。# Gt:# 表示大于的意思,values的值会被解释为整数。# Lt:# 表示小于的意思,values的值会被解释为整数。operator: In