k8s pod调度--NodeAffinity: Node 亲和性调度
k8s pod调度--NodeAffinity: Node 亲和性调度NodeAffinity 亲和性调度NodeAffinity 介绍示例NodeAffinity 亲和性调度NodeAffinity 介绍NodeAffinity 意为 Node 亲和性的调度策略,是用于替换 NodeSelector 的全新调度策略 。目前有两种节点亲和性表达。-RequiredDuringSchedulingl
·
k8s pod调度--NodeAffinity: Node 亲和性调度
NodeAffinity 亲和性调度
NodeAffinity 介绍
NodeAffinity 意为 Node 亲和性的调度策略,是用于替换 NodeSelector 的全新调度策略 。目前有两种节点亲和性表达。
- RequiredDuringSchedulinglgnoredDuringExecution:必须满足指定的规则才可以调度 Pod到Node上(功能与nodeSelector很像,但是使用的是不同的语法)相当于硬限制。
- PreferredDuringSchedulinglgnoredDuringExecution:强调优先满足指定规则,调度器会尝试调度 Pod 到 Node 上 ,但并不强求,相 当于软限制 。多个优先级规则还可以设置权重( weight )值,以定义执行的先后顺序。
IgnoredDuringExecution :如果一个 Pod 所在的节点在 Pod 运行期间标签发生了变更,不再符合该 Pod 的节点亲和性需求,则系统将忽略 Node 上 Label 的变化,该 Pod 能继续在该节点运行。
示例
requiredDuringSchedulinglgnoredDuringExecution 要求只运行在 amd64 的节 点上( beta.kubemetes.io/arch In amd64 ) 。
preferredDuringSchedulinglgnoredDuringExecution 的要求是尽量运行在 “磁盘类 型为ssd”(disk-type In ssd )的节点上。
yaml
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: bete.kubernets.io/arch
operator: In
values:
- amd64
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: disk-type
operator: In
values:
- ssd
containers:
- name: with-node-affinity
image: registry.aliyuncs.com/google_containers/pause:3.1
从上面的配置中可 以看到 In 操作符, NodeAffrnity 语法支持的操作符包括 In 、 Notln 、 Exists 、DoesNotExist 、 Gt 、 Lt 。虽然没有节点排斥 的功能, 但是用 Notln 和 DoesNotExist 就可以实现排斥 的 功能了。
NodeAffinity 规则设置的注意事项:
1.如果同时定义了 nodeSelector 和 nodeA伍nity ,那么必须两个条件都得到满足, Pod 才能最终运行在指定的 Node 上。
2.如果 nodeAffrnity 指定了多个 nodeSelectorTerm s , 那么只需要其中 一个能够匹配成功即可 。
3.如果 nodeSelectorTerms 中有多个 matchExpress ion s , 则 一 个节点必须满足所有matchExpressions 才能运行该 Pod 。
更多推荐
已为社区贡献1条内容
所有评论(0)