PodAffinity:pod亲和与互斥调度策略
1、参考目标
apiVersion: v1
kind: Pod
metadata:
name: pod-flag
labels:
security: "S1"
app : "nginx"
spec:
containers:
- name : nginx
image: nginx
~
2、pod的亲和性调度
apiVersion: v1
kind: Pod
metadata:
name: pod-affinity
spec:
affinity:
#亲和度设置
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
#说明亲和度调用需要和S1在同一个Node结点上
topologyKey: kubernetes.io/hostname
containers:
- name : with-pod-affinity
image: nginx
创建之后,使用kubectl get pods -s wide 命令可以看到,这个两个pod在同一个Node上运行,如果删除这个节点的kubernetes.io/hostname 标签,创建后,会发现pod一只处于pending状态,这是因为找不不到满足条件的Node了
3、pod互斥性调度
apiVersion: v1
kind: Pod
metadata:
name: anti-affinity
spec:
affinity:
#亲和度设置
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
#说明亲和度调用需要和S1在同一个zone上
topologyKey: topology.kubernetes.io/zone
#互斥性置
#说明不与app=nginx的pod为同一个node
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
topologyKey: kubernetes.io/hostname
containers:
- name : anti-affinity
image: nginx
这个新pod和security=S1的pod 为同一个zone,但是不与app=nginx的poad为同一个Node,创建Pod之后,会看到新的pod会被调用到同一个zone的Node上。