k8s 亲和性
1.1 节点亲和性
pod.spec.nodeAffinity
- preferredDuringSchedulingIgnoredDuringExecution:软策略,如果条件允许就在一台节点上,条件不允许就去别的节点
- requiredDuringSchedulingIgnoredDuringExecution:硬策略,如果条件允许就在一台节点上,条件不允许就不活了,pending状态
键值运算关系
- In:label 的值在某个列表中
- notin:label 的值不在某个列表中
- Gt:label 的值大于某个值
- Lt:label 的值小于某个值
- Exists:某个 label 存在
- DoesNotExist:某个 label 不存在
如果nodeselectorTerms下面有多个选项的话,满足任何一个条件就可以了;如果matchExpressions有多个选项的话,则必须同时满足这些条件才能正常调度 POD
1.1.1 preferredDuringSchedulingIgnoredDuringExecution
apiVersion: v1
kind: Pod
Metadata:
name: affinity
labels:
app: node-affinity-pod
spec:
containers:
- name: with-node-affinity
image: wangyanglinux/myapp:v1
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1 //权重,当有2-3个pod,更愿意跟谁在一起
preference:
matchExpressions:
- key: source
operator: In
values:
- qikqiak
1.1.2 requiredDuringSchedulingIgnoredDuringExecution
apiVersion: v1
kind: Pod
Metadata:
name: affinity
labels:
app: node-affinity-pod
spec:
containers:
- name: with-node-affinity
image: wangyanglinux/myapp:v1
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeselectorTerms: //节点选择
- matchExpressions:
- key: kubernetes.io/hostname //匹配lable里key为kubernetes.io/hostname的
operator: notin
values:
- k8s-node02 //匹配lable里key为kubernetes.io/hostname且value为k8s-node02的
1.1.3 合体
apiVersion: v1
kind: Pod
Metadata:
name: affinity
labels:
app: node-affinity-pod
spec:
containers:
- name: with-node-affinity
image: wangyanglinux/myapp:v1
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeselectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: notin
values:
- k8s-node02
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: source
operator: In
values:
- qikqiak
//对满足source=qikqiak,且kubernetes.io/hostname不等于k8s-node02 的特征节点选择
2.1 Pod 亲和性
pod.spec.affinity.podAffinity/podAntiAffinity
- preferredDuringSchedulingIgnoredDuringExecution:软策略,同上
- requiredDuringSchedulingIgnoredDuringExecution:硬策略,同上
apiVersion: v1
kind: Pod
Metadata:
name: pod-3
labels:
app: pod-3
spec:
containers:
- name: pod-3
image: wangyanglinux/myapp:v1
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- pod-1
topologyKey: kubernetes.io/hostname
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- pod-2
topologyKey: kubernetes.io/hostname
亲和性/反亲和性调度策略比较如下:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。