K8s资源调度和亲和性

网友投稿 239 2022-09-09

K8s资源调度和亲和性

调度

nodeselector:

硬限制强匹配,如果没有无法启动,默认节点有一部分标签,比如:kubernetes.io/hostname

亲和性调度(越来越完善代替nodeselector)

1.节点亲和性调度

1.类型

1.RequiredDuringScheduleingIgnoredDuringExecution

类似nodeselector,必须满足指定规则才可以调度pod到node,相当于硬限制

2.PreferredDuringScheduleingIgnoredDuringExecution

强调优先满足调度条件,会尝试调度至其他node,不强求,软限制。多个优先级规则可设置权重值(weight),定义执行的先后顺序。

3.IgnoredDuringExecution

如果pod运行的node节点标签发生变化,不再符合当前亲和性要求,忽略该变化,继续运行在node上。

2.语法

1.NodeAffinity语法支持的操作符包含In,NotIn,Exists,DoesNotExist,Gt,Lt.没有节点排斥,但是NotIn和DoseNotExist可以灵活使用满足排斥。

3.注意事项

1.NodeSeclector和NodeAffinity同时使用时,必须全部满足才会运行指定node

2.NodeAffinity指定了多个NodeSelectorTerms,只要满足一个能匹配成功即可

3.如果一个NodeSelectorTerms有多个matchExpressions,必须全部满足所有的matchExpressions才能运行Pod。

4.示例

apiVersion: v1 kind: Pod metadata: name: with-node-affinity spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoreDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/arch operator: In values: amd64 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: exam-label operator: In values: ssd containers: - name: with-node-affinity image: gcr.io/google_containers/pause:2.0

2.pod亲和性调度

简单来讲,如果在标签X的节点上运行一个或多个符合条件Y的Pod,那么Pod亲和运行互斥拒绝在改Node上。与节点不同,Pod是属于ns的,所以Y表达的是ns级别的label Selector。

1.类型

1.RequiredDuringScheduleingIgnoredDuringExecution2.PreferredDuringScheduleingIgnoredDuringExecution

这里和上面一样就不详细介绍了,懒--

2.语法

1.支持的语法一样包含In,NotIn,Exists,DoesNotExist,Gt.Lt。这里介绍下topologyKey,

1.topologyKey可以使用任何合法的标签Key来赋值。但有以下限制要注意:

1.在PodAffinity和PodAntiAffinity定义中,不允许使用空的topologyKey.

2.如果Admission controller包含了LimitPodHardAntiAffinityTopology,那么KEY就被锁定使用kubernetes.io/hostname,不能随意自定义key.

3.在优先级的定义中,空的topologykey值会定义为hostname,zone,region的组合(具体百度)

2.除了设置Label Selector和topologyKey.还可以指定NS列表进行限制,如果NS为(“”),表示所有NS

3.示例

apiVersion: v1 kind: Pod metadata: name: anti-affinity spec: affinity: podAffinity: requiredDuringScheduleingIgnoredDuringExecution: - labelSelector: matchExperssions: - key: security operator: In values: X topologyKey: failure-domain.beta.kubernetes.io/zone podAntiAffinity: requiredDuringScheduleingIgnoredDuringExecution: - labelSelector: matchExperssions: - key: security operator: In values: Y topologyKey: kubernetes.io/hostname containers: - name: anti-affinity image: gcr.io/google_containers/pause:2.0

要求新Pod于security=X的pod在同一个zone,但是不与security=Y的pod在同一个Node

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:公关界007:老品牌新国潮丨钙尔奇这波破圈营销把骨气传承做出了样子!
下一篇:k8s学习-YAML语言
相关文章

 发表评论

暂时没有评论,来抢沙发吧~