0
点赞
收藏
分享

微信扫一扫

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.RequiredDuringScheduleingIgnoredDuringExecution

2.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

举报

相关推荐

0 条评论