亲和性调度
亲和性调度
除了让
这种调度在
选择Node
在使用这种方法之前,需要先给
$ kubectl label nodes <Node-name> <label-key>=<label-value>
列出
$ kubectl get nodes --show-labels
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
添加上
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
这个例子就是告诉
kubernetes.io/hostname
:节点的hostname 名称beta.kubernetes.io/os
:节点安装的操作系统beta.kubernetes.io/arch
:节点的架构类型- ……
不同版本添加的--show-labels
查看,也能够用在 nodeSelector
中。
Node Affinity
- 匹配有更多的逻辑组合,不只是字符的完全相等
- 调度分成软策略(soft)和硬策略(hard
) ,在软策略的情况下,如果没有满足调度条件的节点,pod 会忽略这条规则,继续完成调度过程
策略
目前有两种主要的
软策略和硬策略的区分是有用处的,硬策略适用于
匹配规则
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
containers:
- name: with-node-affinity
image: gcr.io/google_containers/pause:2.0
这个
这里的匹配逻辑是
In
:label 的值在某个列表中NotIn
:label 的值不在某个列表中Exists
:某个label 存在DoesNotExist
: 某个label 不存在Gt
:label 的值大于某个值(字符串比较)Lt
:label 的值小于某个值(字符串比较)
如果
Pod Affinity
通过上一部分内容的介绍,我们知道怎么在调度的时候让
举个例子,我们系统服务
和
下面是一个例子:
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: failure-domain.beta.kubernetes.io/zone
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S2
topologyKey: kubernetes.io/hostname
containers:
- name: with-pod-affinity
image: gcr.io/google_containers/pause:2.0
这个例子中,failure-domain.beta.kubernetes.io/zone
指定security:S1
security:S2
在 labelSelector
和 topologyKey
同级,还可以定义 namespaces
列表,表示匹配哪些