Pod节点亲和性和反亲和性
podaffinity:pod节点亲和性指的是pod会被调度到更趋近与哪个pod或哪类pod。
podunaffinity:pod节点反亲和性指的是pod会被调度到远离哪个pod或哪类pod
1. Pod节点亲和性
requiredDuringSchedulingIgnoredDuringExecution: 硬亲和性
preferredDuringSchedulingIgnoredDuringExecution:软亲和性
vi pod-required-affinity-demo-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
tier: monitor
spec:
containers:
- name: nginx
image: 172.16.80.140/nginx/nginx:1.26
imagePullPolicy: IfNotPresent
kubectl apply -f pod-required-affinity-demo-1.yaml
kubectl get pods -owide
vi pod-required-affinity-demo-2.yaml
kind: Pod
metadata:
name: busybox
labels:
app: backend
tier: db
spec:
containers:
- name: busybox
image: 172.16.80.140/busybox/busybox:latest
imagePullPolicy: IfNotPresent
command: ["sh","-c","sleep 3600"]
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["nginx"]}
topologyKey: kubernetes.io/hostname
以上可以看出,第二个pod(busybox)由于设置了硬亲和性,需要和具有app=nginx的标签的pod在一起,所以也被创 建到了node01上
Pod节点反亲和性
vi pod-required-affinity-demo-3.yaml
kind: Pod
metadata:
name: busybox1
labels:
app: backend1
tier: db
spec:
containers:
- name: busybox1
image: 172.16.80.140/busybox/busybox:latest
imagePullPolicy: IfNotPresent
command: ["sh","-c","sleep 3600"]
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["nginx"]}
topologyKey: kubernetes.io/hostname
以上可以看出,第三个pod(backend)设置了pod发亲和性,和匹配的pod创建在了不同的node上
vi pod-required-affinity-demo-4.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox2
labels:
app: backend
tier: db
spec:
containers:
- name: busybox2
image: 172.16.80.140/busybox/busybox:latest
imagePullPolicy: IfNotPresent
command: ["sh","-c","sleep 3600"]
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["nginx"]}
topologyKey: kubernetes.io/hostname
- labelSelector:
matchExpressions:
- {key: tier, operator: In, values: ["db"]}
topologyKey: kubernetes.io/hostname
以上可以看出,因为busybox2的反亲和性,导致没有pod符合条件,只能是pending状态