前言:
亲和性是affinity,分为两种
-- 强制:requiredDuringSchedulingIgnoredDuringExecution
-- 参考:preferredDuringSchedulingIgnoredDuringExecution
// 也就第一个词不同了,IgnoredDuringExecution的意思是:部署完了就不再管这些规则。比如部署后我把node的标签改了导致不满足规则了,会重新调度吗?不会,根本不去检测变化。
也分三种:
-- 亲和节点:nodeAffinity
-- 亲和pod:podAffinity
-- 不亲和pod:podAntiAffinity
另外:
部署pod一定是到node上的
-- 亲和某个node,到某个node上
-- 亲和pod,是指亲和(某些节点上的)pod,到 某些节点 上。到底是哪些节点?用topologyKey指定。
一、指定节点
1.强制指定
(1)简单点的设置可以用nodeName和nodeSelector
(2)使用亲和性nodeAffinity
2.尽量满足 -- 意思是可以不满足
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
selector:
matchLabels:
app: test
replicas: 1
template:
metadata:
labels:
app: test
spec:
# nodeName: master #(1/3)指定node名称
# nodeSelector: #(2/3)指定node标签
# kubernetes.io/hostname: master
affinity: #(3/3)使用亲和性
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution: # 强制满足
nodeSelectorTerms: # terms里满足一个就够了(或的关系)
- matchExpressions: # match里要全部满足 (且的关系)
- key: kubernetes.io/hostname
operator: In
values:
- master
# - key: kubernetes.io/hostname
# operator: NotIn
# values:
# - master
- matchExpressions:
- key: kubernetes.io/hostname
operator: NotIn
values:
- master
preferredDuringSchedulingIgnoredDuringExecution: # 尽量满足,可以不满足
- weight: 10
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- abcd
restartPolicy: Always
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
二、分散部署pod
比如部署redis、minio集群,希望pod尽量不在同一个节点
使用亲和性podAntiAffinity
1.强制要求
2.尽量满足
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
selector:
matchLabels:
app: test
replicas: 3
template:
metadata:
labels:
app: test
spec:
# nodeName: master #(1/3)指定node名称
# nodeSelector: #(2/3)指定node标签
# kubernetes.io/hostname: master
affinity: #(3/3)使用亲和性
podAntiAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# - topologyKey: kubernetes.io/hostname # topologyKey用来筛选node,确定一个比较的范围
# labelSelector:
# matchExpressions:
# - key: app
# operator: In
# values:
# - test
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 10
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution: # 强制满足
# nodeSelectorTerms: # terms里满足一个就够了(或的关系)
# - matchExpressions: # match里要全部满足 (且的关系)
# - key: kubernetes.io/hostname
# operator: In
# values:
# - master
# - matchExpressions:
# - key: kubernetes.io/hostname
# operator: NotIn
# values:
# - master
# preferredDuringSchedulingIgnoredDuringExecution: # 尽量满足,可以不满足
# - weight: 10
# preference:
# matchExpressions:
# - key: kubernetes.io/hostname
# operator: In
# values:
# - abcd
restartPolicy: Always
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
三、捆绑部署pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
selector:
matchLabels:
app: test
replicas: 3
template:
metadata:
labels:
app: test
spec:
# nodeName: master #(1/3)指定node名称
# nodeSelector: #(2/3)指定node标签
# kubernetes.io/hostname: master
affinity: #(3/3)使用亲和性
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- topologyKey: kubernetes.io/hostname # topologyKey用来筛选node,确定一个比较的范围
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 10
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- test2
# podAntiAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# - topologyKey: kubernetes.io/hostname
# labelSelector:
# matchExpressions:
# - key: app
# operator: In
# values:
# - test
# preferredDuringSchedulingIgnoredDuringExecution:
# - weight: 10
# podAffinityTerm:
# topologyKey: kubernetes.io/hostname
# labelSelector:
# matchExpressions:
# - key: app
# operator: In
# values:
# - test
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution: # 强制满足
# nodeSelectorTerms: # terms里满足一个就够了(或的关系)
# - matchExpressions: # match里要全部满足 (且的关系)
# - key: kubernetes.io/hostname
# operator: In
# values:
# - master
# - matchExpressions:
# - key: kubernetes.io/hostname
# operator: NotIn
# values:
# - master
# preferredDuringSchedulingIgnoredDuringExecution: # 尽量满足,可以不满足
# - weight: 10
# preference:
# matchExpressions:
# - key: kubernetes.io/hostname
# operator: In
# values:
# - abcd
restartPolicy: Always
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
目录:https://blog.csdn.net/u013595395/article/details/114527658