节点亲和性 是对节点选择器方法的一种泛化,允许指定必要规则和偏好规则
下面的例子是一个 nginx , 亲和性规则要求它
只考虑有3个以上核心(不包含3个)的节点
尽量选择不是 master 的节点
这里还有一个权重,值为1,如果这个节点符合 名称不为 master,则会获得一个权重积分1
调度器最后会选择一个 所有权重 得分最高的节点,权重是一个列表
看下面一个例子
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-hello-deployment
namespace: lizhe
labels:
app: nginx-hello
spec:
replicas: 2
selector:
matchLabels:
app: nginx-hello
template:
metadata:
labels:
app: nginx-hello
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: numberCores
operator: Gt
values: ["3"]
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchFields:
- key: metadata.name
operator: NotIn
values: ["master"]
containers:
- name: nginx-hello
image: nginx
ports:
- containerPort: 80
在这个例子中,使用了 numberCores ,请不要误以为这是一个 原生字段,实际上这是一个 node 上的 label,我们需要自己手动创建
不创建的话,是不会调度成功的
添加label
已经可以正确调度了