说明:完整的k8s教程可访问:https://blog.tag.gg/showinfo-3-36255-0.html
节点亲和性nodeAffinity和之前nodeSelector基本一样,根据节点上标签约束对pod调度到哪些节点上。(功能更强大)
硬亲和性:requiredDuringSchedulingIgnoredDuringExecution (硬限制, 同nodeSelector),如果不满足则不进行调度。
软亲和性:preferredDuringSchedulingIgnoredDuringExecution(软限制)可以满足也可以不满足,尝试满足。不满足的情况下会调度的不符合条件的Node上。
范例:
以上规则表达的意思是,该 Pod 只能被调度到拥有 env_role=dev 或者 env_role=test 标签的节点上, operator: In 表示在什么里面选择,比如上面实例是指在dev 和test上调度,(如果硬亲和力中没有满足条件,则会一直等待状态)选择其中在满足之前标签条件的同时更倾向于调度在拥有 env_role2=devs 标签的节点上。apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env_role
operator: In
values:
- dev
- test
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1 //取值范围1-100
preference:
matchExpressions:
- key: env_role2
operator: In
values:
- devs
containers:
- name: nginx
image: docker.io/nginx
标签判断的操作符除了使用In之外,还可以使用NotIn、Exists、DoesNotExist、Gt、Lt 操作符, 也可以使用 NotIn 、 DoesNotExist 来实现反亲和性,也可以通过 node taints 来实现。
In:label 的值在某个列表中
NotIn:label 的值不在某个列表中
Gt:label 的值大于某个值
Lt:label 的值小于某个值
Exists:某个 label 存在
DoesNotExist:某个 label 不存在
1)如果同时指定 nodeSelector 和 nodeAffinity ,两者同时满足才会被调度。
2)如果指定多个nodeSelectorTerms,则只要满足其中一个条件,就会被调度到相应的节点上。
3)如果指定多个matchExpressions,则所有的条件都必须满足,才会调度到对应的节点。
什么是反亲和性:
添加参数:podAntiAffinity 或 NotIn 、 DoesNotExist则是反亲和力。
亲爱的:若该文章解决了您的问题,可否收藏+评论+分享呢?
文章评论 本文章有个评论