環境描述
Node節點選擇器
nodeSelector
- nodeSelector基於node節點label選擇匹配的節點
apiVersion: v1
kind: Pod
metadata:
name: nodeselector-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
nodeSelector:
app: node-2
- 刪除此pod修改nodeSelector爲node-1
apiVersion: v1
kind: Pod
metadata:
name: nodeselector-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
nodeSelector:
app: node-1
- 修改一個不存在的標籤
apiVersion: v1
kind: Pod
metadata:
name: nodeselector-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
nodeSelector:
app: node-3
nodeName節點名稱選擇
apiVersion: v1
kind: Pod
metadata:
name: nodeselector-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
nodeName: node-2
- 修改一個不存在的node節點名稱
apiVersion: v1
kind: Pod
metadata:
name: nodeselector-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
nodeName: node-3
node節點選擇器是一種硬親和性的選擇器
節點親和性調度
nodeAffinity
requiredDuringSchedulingIgnoredDuringExecution(硬親和性)
apiVersion: v1
kind: Pod
metadata:
name: required-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- node-2
- 修改一個節點中不存在的標籤
apiVersion: v1
kind: Pod
metadata:
name: required-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: app
operator: In
values:
- node-3
可以看出,沒有匹配到節點標籤中有app=node-3的節點
preferredDuringSchedulingIgnoredDuringExecution(軟親和性)
apiVersion: v1
kind: Pod
metadata:
name: preferred-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: app
operator: In
values:
- node-3
weight: 60
Pod親和性調度
podAffinity(pod親和性)
requiredDuringSchedulingIgnoredDuringExecution(硬親和性)
apiVersion: v1
kind: Pod
metadata:
name: pod-first
labels:
app: myapk
spec:
containers:
- name: myapk
image: nginx
---
apiVersion: v1
kind: Pod
metadata:
name: required-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- myapk
topologyKey: kubernetes.io/hostname
- 去除pod親和性測試
apiVersion: v1
kind: Pod
metadata:
name: pod-first
labels:
app: myapk
spec:
containers:
- name: myapk
image: nginx
---
apiVersion: v1
kind: Pod
metadata:
name: required-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
preferredDuringSchedulingIgnoredDuringExecution(軟親和性)
apiVersion: v1
kind: Pod
metadata:
name: pod-first
labels:
app: myapk
spec:
containers:
- name: myapk
image: nginx
---
apiVersion: v1
kind: Pod
metadata:
name: required-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
affinity:
podAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- myapk
topologyKey: zone
weight: 60
軟親和性測試不明顯
podAntiAffinity(pod反親和性)
apiVersion: v1
kind: Pod
metadata:
name: pod-first
labels:
app: myapk
spec:
containers:
- name: myapk
image: nginx
---
apiVersion: v1
kind: Pod
metadata:
name: required-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- myapk
topologyKey: zone
- 爲方便測試需要把node節點打上同樣的標籤
kubectl label nodes node-1 zone=foo
kubectl label nodes node-2 zone=foo
apiVersion: v1
kind: Pod
metadata:
name: pod-first
labels:
app: myapk
spec:
containers:
- name: myapk
image: nginx
---
apiVersion: v1
kind: Pod
metadata:
name: required-affinity-demo
labels:
app: myapp
spec:
containers:
- name: myapp
image: nginx
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- myapk
topologyKey: zone
weight: 60