pod调度具体会调度到哪个节点呢?这里就涉及到node亲和性的问题
node节点亲和性nodeAffinity
硬亲和性:requiredDuringSchedulingIgnoredDuringExecution,必须满足
软亲和性:preferredDuringSchedulingIgnoredDuringExecution,最好满足
# 硬亲和性
vi pod-nodeaffinity-demo.yaml
kind: Pod
metadata:
name: pod-node-affinity-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: zone
operator: In
values:
- foo
- bar
containers:
- name: myapp
image: 172.16.80.140/nginx/nginx:1.26
imagePullPolicy: IfNotPresent
kubectl describe pod pod-node-affinity-demo
# pod处于pending状态,原因是没有符合硬亲和性条件的node节点
# 在node02上打上标签 zone=foo或者zone=bar,那先pod被调度到node02节点
# 软亲和性,如果没有符合条件的就忽略,weight是相对权重,权重越高,pod调度的几率越大
vi pod-nodeaffinity-demo-2.yaml
kind: Pod
metadata:
name: pod-node-affinity-demo-2
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: myapp
image: 172.16.80.140/nginx/nginx:1.26
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: zone1
operator: In
values:
- foo1
- bar1
weight: 10
- preference:
matchExpressions:
- key: zone2
operator: In
values:
- foo2
- bar2
weight: 20
kubectl apply -f pod-nodeaffinity-demo-2.yaml