Foreword:
Affinity is affinity, divided into two types
-- 强制:requiredDuringSchedulingIgnoredDuringExecution
-- 参考:preferredDuringSchedulingIgnoredDuringExecution
// The first word is different. IgnoredDuringExecution means: After the deployment is completed, these rules will not be taken care of. For example, after deployment, I changed the label of the node and the rules were not met. Will it be scheduled again? No, it will not detect changes at all.
There are also three types:
- Affinity node: nodeAffinity
- 和 和 pod : podAffinity
- Incompatible pod: podAntiAffinity
In addition:
Deploy pod must be on node
- Affinity to a certain node, to a certain node
- Affinity pod refers to the affinity (on some nodes) pod to some nodes. Which nodes are they? Specify with topologyKey.
One, designated node
1. Mandatory designation
(1) Simple setting can use nodeName and nodeSelector
(2) Use affinity nodeAffinity
2. Try to be satisfied-means you can not be satisfied
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"
2. Decentralized deployment of pods
For example, deploy redis and minio clusters, and hope that pods are not on the same node as much as possible
Use affinity podAntiAffinity
1. Mandatory requirements
2. Try to satisfy
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"
Three, bundle deployment 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"
Catalog: https://blog.csdn.net/u013595395/article/details/114527658