亲和力 Affinity
对部署调度时的优先选择
分为
-
节点亲和力
-
pod亲和力
-
pod反亲和力
节点亲和力 NodeAffinity
进行 pod 调度时,优先调度到符合条件的亲和力节点上
可配置 硬亲和力和软亲和力
-
RequiredDuringSchedulingIgnoredDuringExecution
硬亲和力:即支持必须部署在指定的节点上,也支持必须不部署在指定的节点上
-
PreferredDuringSchedulingIgnoredDuringExecution
尽量部署在满足条件的节点上,或尽量不要部署在被匹配的节点上
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity: # 亲和力配置
nodeAffinity: # 节点亲和力
requiredDuringSchedulingIgnoredDuringExecution: # 节点必须匹配下方配置
nodeSelectorTerms: # 选择器
- matchExpressions: # 匹配表达式
- key: topology.kubernetes.io/zone # 匹配 label 的 key
operator: In # 匹配方式,只要匹配成功下方的一个 value 即可
values:
- antarctica-east1 # 匹配的 value
- antarctica-west1 # 匹配的 value
preferredDuringSchedulingIgnoredDuringExecution: # 节点尽量匹配下方配置
- weight: 1 # 权重[1,100],按照匹配规则对所有节点累加权重,最终之和会加入优先级评分,优先级越高被调度的可能性越高
preference:
matchExpressions: # 匹配表达式
- key: another-node-label-key # label 的 key
operator: In # 匹配方式,满足一个即可
values:
- another-node-label-value # 匹配的 value
# - weight: 20
......
containers:
- name: with-node-affinity
image: pause:2.0
operator类型
-
In
部署在满足条件的节点上
-
NotIn
匹配不在条件中的节点,实现节点反亲和性
-
Exists
只要存在 key 名字就可以,不关心值是什么
-
DoesNotExists
匹配指定 key 名不存在的节点,实现节点反亲和性
-
Gt
value 为数值,且节点上的值小于指定的条件
-
Lt
value 为数值,且节点上的值大于指定条件
pod亲和力 PodAffinity 和 pod反亲和力PodAnitAffinity
将与指定 pod 亲和力相匹配的 pod 部署在同一节点
即与pod比较进行亲和
可配置 硬亲和力和软亲和力
-
硬亲和力
RequiredDuringSchedulingIgnoredDuringExecution
必须将应用部署在一块
-
软亲和力
PreferredDuringSchedulingIgnoredDuringExecution
尽量将应用部署在一块
pod反亲和力 尽量将与指定 pod 反亲和力相匹配的 pod 部署在不同节点
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity: # 亲和力配置
podAffinity: # pod 亲和力配置
requiredDuringSchedulingIgnoredDuringExecution: # 当前 pod 必须匹配到对应条件 pod 所在的 node 上
- labelSelector: # 标签选择器
matchExpressions: # 匹配表达式
- key: security # 匹配的 key
operator: In # 匹配方式
values: # 匹配其中的一个 value
- S1
topologyKey: topology.kubernetes.io/zone
podAntiAffinity: # pod 反亲和力配置
preferredDuringSchedulingIgnoredDuringExecution: # 尽量不要将当前节点部署到匹配下列参数的 pod 所在的 node 上
- weight: 100 # 权重
podAffinityTerm: # pod 亲和力配置条件
labelSelector: # 标签选择器
matchExpressions: # 匹配表达式
- key: security # 匹配的 key
operator: In # 匹配的方式
values:
- S2 # 匹配的 value
topologyKey: topology.kubernetes.io/zone
containers:
- name: with-pod-affinity
image: pause:2.0