pod调度策略,一篇就够
文章目录调度策略预选策略--必须全部满足优选策略高级调度Toleration(容忍)Tain(污点)和label(标签)Affinity(亲和性)调度策略k8s的调度策略分为predicates(预选策略)和priorites(优选策略),整个调度过程分俩步预选策略,predicates是强制性规则,遍历所有的node节点,安装具体的预选策略筛选出符合要求的node列表,如果没有nod...
·
调度策略
k8s的调度策略分为predicates(预选策略)和priorites(优选策略),整个调度过程分俩步
- 预选策略,predicates是强制性规则,遍历所有的node节点,安装具体的预选策略筛选出符合要求的node列表,如果没有node符合predicates策略规则,那么pod就会被挂起,直到有node能够满足
- 优选策略,在第一步筛选的基础上,按照优选策略为待选node打分排序,获取最优者
预选策略–必须全部满足
- CheckNodeCondition:检测node是否正常
- GeneralPredicates:普通判断策略
- HostName: 检测pod对象是否定义了pod.spec.hostname
- PodFitsHostPorts:检测pods.spec.containets.ports.hostPort是否定义
- MatchNodeSelector:检测pod是否设置了pods.spec.nodeSelector
- PodFitsResources:检测pod的资源需求是否能被节点所满足
- NoDiskConflict:检测pod依赖的存储卷是否能满足需求
- PodToleratesNodeTaints: 检测pod上的spec.tolerations可容忍的污点是否完全包含节点上的污点
- PodToleratesNodeNoExecuteTaints: 检测pod上是否启用了NoExecute级别的污点,默认没有启用
- CheckNodeLabelPresence: 检测node上的标签的存在与否,默认没有启用
- CheckServiceAffinity:将相同service pod的对象放到一起,默认没有启用
- CheckVolumeBinding:检测节点上已绑定和未绑定的volume
- NoVolumeZoneConflict:检测区域,是否有pod volume的冲突
- CheckNodeMemoryPressure:检测内存节点是否存在压力
- CheckNodePIDPressure:检测pid资源的情况
- CheckNodeDiskPressure:检测disk资源压力
- MatchInterPodAffity:检测pod的亲和性
- 下面的几个策略一般用不上(EBS,GCE,Azure)对这几个云厂商的
- MaxEBSVolumeCount: 确保已挂载的EBS存储卷不超过设置的最大值,默认39
- MaxGCEPDVolumeCount: 确保已挂载的GCE存储卷不超过设置的最大值,默认16
- MaxAzureDiskVolumeCount: 确保已挂载的Azure存储卷不超过设置的最大值,默认16
优选策略
优选函数的评估: 如果一个pod过来,会根据启用的全部函数的得分相加得到的评估
- LeastRequested:最少请求,与节点的总容量的比值,
计算公式:
(cpu((capacity-sum(requested))*10 / capacity)+memory((capacity-sum(requested))*10 / capacity)) / 2 - BalancedResourceAllocation:cpu和内存资源被占用的比率相近程度,越接近,比分越高,平衡节点的资源使用情况,
计算公式:
cpu=cpu((capacity-sum(requested))*10 / capacity)
mem=memory((capacity-sum(requested))*10 / capacity) - NodePreferAvoidPods:在这个优先级中,优先级最高,得分非常高
根据节点的注解信息“scheduler.alpha.kubernetes.io/preferAvoidPods” - TaintToleration:将pod对象的spec.tolertions与节点的taints列表项进行匹配度检测,匹配的条目越多,得分越低
- SeletorSpreading:尽可能的把pod分散开,也就是没有启动这个pod的node,得分会越高
- InterPodAffinity:遍历pod的亲和性,匹配项越多,得分就越多
- NodeAffinity:节点亲和性,亲和性高,得分高
- MostRequested:空闲量越少的,得分越高,与LeastRequested不能同时使用,集中一个机器上面跑pod,默认没有启用
- NodeLabel:根据node上面的标签来评估得分,有标签就有分,没有标签就没有分,默认没有启用
- ImageLocality:一个node的得分高低,是根据node上面是否有镜像,有镜像就有得分,反之没有(根据node上已有满足需求的image的size的大小之和来计算。),默认没有启用
高级调度
Toleration(容忍)
operator可以定义为:
Equal:表示key是否等于value,默认
Exists:表示key是否存在,此时无需定义value
tain 的 effect 定义对 Pod 排斥效果
NoSchedule:仅影响调度过程,对现存的Pod对象不产生影响;
NoExecute:既影响调度过程,也影响显著的Pod对象;不容忍的Pod对象将被驱逐
PreferNoSchedule: 表示尽量不调度
#实例:
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
- key: "node.alpha.kubernetes.io/unreachable"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 6000(当 pod 需要被驱逐时,可以继续在 node 上运行的时间)
Tain(污点)和label(标签)
kubectl taint nodes node1 key1=value1:NoSchedule
节点打标签:
kubectl label nodes kube-node node=kube-node
kubectl get node -a -l "node=kube-node"
删除标签:
kubectl label nodes 1.1.1.1 role-
Affinity(亲和性)
Affinity
podAntiAffinity
podAffinity
nodeAffinity
概要
labelSelector : 选择跟那组Pod亲和
namespaces : 选择哪个命名空间
topologyKey : 指定节点上的哪个键
matchExpressions :匹配表达式,这个标签可以指定一段,例如pod中定义的key为zone,perator为In(包含那些),values为foo和bar。就是在node节点中包含foo和bar的标签中调度
matchFields : 匹配字段 和上面的意思 不过他可以不定义标签值,可以定义
#实例:
#Pod软反亲和性:
当应用服务A和数据库服务B要求尽量不要在同一台节点上的时候。
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["myapp"]}
topologyKey: kubernetes.io/hostname #按照hostname的不同来分配
#Pod硬反亲和性:
pod不能分配在同一台机器上,按照topologyKey来区分机器是否相同
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["myapp"]}
topologyKey: zone
#Pod亲和性,
k8s节点分布在不同的机房或者区域,使用亲和性来做调度
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["myapp"]}
topologyKey: kubernetes.io/hostname
#node硬亲和:
选择在 node 有 zone 标签值为 foo 或 bar 值的节点上运行 pod
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- foo
- bar
#node软亲和:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: zone
operator: In
values:
- foo
- bar
weight: 60
更多推荐
已为社区贡献8条内容
所有评论(0)