调度
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