精通k8s(29)Pod-Node亲和性调度

360影视 动漫周边 2025-08-31 06:12 3

摘要:preferred(偏好的)表示这是一个“建议性”的规则,不是必须满足的硬要求。调度器会尽量满足,但如果实在做不到,也能接受其他方案(比如没有符合条件的节点时,会找其他节点调度)。DuringScheduling(在调度时)这个规则只在Pod刚开始被调度到节点

Node亲和性就是指在若干个节点机中,根据条件筛选合适的机器进行Pod调度,分为软限制和硬限制。

主要使用的属性是affinity.nodeAffinity。

条件判断的依据是标签项。

经过这两轮下来,再综合计算各个节点的评分,选择分最高的进行调度。

它使用一个很长的名字preferredDuringSchedulingIgnoredDuringExecution,拆开包含下面三个含义:

preferred(偏好的)
表示这是一个“建议性”的规则,不是必须满足的硬要求。调度器会尽量满足,但如果实在做不到,也能接受其他方案(比如没有符合条件的节点时,会找其他节点调度)。DuringScheduling(在调度时)
这个规则只在Pod刚开始被调度到节点的那一刻起作用。调度器会根据这个规则筛选节点,决定把Pod放在哪个节点上。IgnoredDuringExecution(在运行时忽略)
一旦Pod已经被调度到某个节点并开始运行后,这个规则就“失效”了。哪怕之后节点的标签变了(比如原来符合条件,后来不符合了),Pod也不会被重新调度,会继续在当前节点运行。

完整意思是:调度时尽量满足,调度之后如果节点机变化不满足条件了也不再修改。

如果所有的节点机都不满足条件怎么办呢?最终也会选择一个机器,这也是为什么称为软限制。

#文件名:deploy-with-nodeAffinity.ymlcat deploy-with-nodeAffinity.ymlapiVersion: apps/v1kind: Deploymentmetadata:labels:app: whoaminame: whoamispec:replicas: 3selector:matchLabels:app: whoamitemplate:metadata:labels:app: whoamispec:containers:- image: crpi-gj5arn39i861t1eu.cn-hangzhou.personal.cr.aliyuncs.com/dev-team-sz/whoaminame: whoamiaffinity:nodeAffinity: #节点亲和性preferredDuringSchedulingIgnoredDuringExecution:- weight: 80 # 1-100preference:matchExpressions: #NodeSelectorRequirement- key: diskoperator: Invalues: [ ssd ]- weight: 20preference:matchExpressions:- key: zoneoperator: NotInvalues: [ 'west' ]EOF

属性路径图如下:

硬限制和软限制大部分意思相同,只是有一点区别,就是它标注的条件必须满足,否则Pod会一直处于Pending状态。

比如本例中,要求节点机必须有disk=ssd标签。

#deploy-with-nodeAffinity.ymlcat deploy-with-nodeAffinity.ymlapiVersion: apps/v1kind: Deploymentmetadata:labels:app: whoaminame: whoamispec:replicas: 3selector:matchLabels:app: whoamitemplate:metadata:labels:app: whoamispec:containers:- image: crpi-gj5arn39i861t1eu.cn-hangzhou.personal.cr.aliyuncs.com/dev-team-sz/whoaminame: whoamiaffinity:nodeAffinity: #节点亲和性requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: ssdoperator: Invalues: [ ssd ]EOF

NodeAffinity规则设置的注意事项如下。

如果同时定义了nodeSelector和nodeAffinity,那么必须两个条件都得到满足,Pod才能最终运行在指定的Node上。如果nodeAffinity指定了多个nodeSelectorTerms,那么其中一个能够匹配成功即可。如果在nodeSelectorTerms中有多个matchExpressions,则一个节点必须满足所有matchExpressions才能运行该Pod。

来源:恋爱脑一点号

相关推荐