Pod.spec.nodeName
将 Pod 直接调度到指定的 Node 节点上,会跳过 Scheduler 的调度策略,该匹配规则是强制匹配
我的节点:
[root@master scheduler]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready master 29h v1.19.4
node1 Ready worker 29h v1.19.4
node2 Ready worker 29h v1.19.4
调度到node1节点
[root@master scheduler]# cat nodename-select.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 3
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
nodeName: node1
containers:
- name: myweb
image: nginx
ports:
- containerPort: 80
运行:
kubectl apply -f nodename-select.yml
查看:
[root@master scheduler]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb-7d8cc57dd8-24glf 1/1 Running 0 67s 10.244.1.28 node1 <none> <none>
myweb-7d8cc57dd8-l9xf8 1/1 Running 0 67s 10.244.1.29 node1 <none> <none>
myweb-7d8cc57dd8-slzv5 1/1 Running 0 67s 10.244.1.30 node1 <none> <none>
Pod.spec.nodeSelector
:通过 kubernetes 的 label-selector 机制选择节点,由调度器调度策略匹配 label,而后调度 Pod 到目标节点,该匹配规则属于强制约束
先给节点node1打个标签:
kubectl label nodes worker node1 key=web1
[root@master scheduler]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 30h v1.19.4
node1 Ready worker 30h v1.19.4 key=web1
node2 Ready worker 30h v1.19.4
代码:
[root@master scheduler]# cat label-select.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 3
selector:
matchLabels:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
nodeSelector:
key: web1
containers:
- name: myweb
image: nginx
ports:
- containerPort: 80
运行:
kubectl apply -f label-select.yml
结果:都调度到了node1节点
[root@master scheduler]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb-64cb54fc84-6m467 1/1 Running 0 41s 10.244.1.31 node1 <none> <none>
myweb-64cb54fc84-dqpbz 1/1 Running 0 41s 10.244.1.32 node1 <none> <none>
myweb-64cb54fc84-g6vg9 1/1 Running 0 41s 10.244.1.33 node1 <none> <none>