2.如何禁止其他Pod调度到当前node ?
给node 打上一个污点,可以解决上述需求。
# 设置污点
kubectl taint nodes k8s-node02 app=test:NoSchedule
#查看污点
kubectl describe node k8s-node02 | grep Taints
#删除污点
kubectl taint nodes k8s-node2 app=test:NoSchedule-
这里,打上一个 NoSchedule 污点,表示这个node对后续pod不提供调度能力。
也可以理解为:有污点的node,无法随意执行pod了。
注意:如果打污点之前node上已经有pod了,这些pod不受影响。
我们查看一下:
kubectl describe node worker61 | grep Taints
如何把Pod 调度到上述 node
这里有两个问题:
1、如何选择node
使用nodeSelector, 后面加一个 node 的 label.
表示pod会选择指定 label的node进行调度。
2、如何解除node上污点的限制
问题1解决了,但是node有污点,一般是无法调度成功的。
这里就需要用到容忍度了:
来看一个完整的deployment 样例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
labels:
app: "nginx-test"
spec:
replicas: 1
template:
metadata:
name: nginx
labels:
app: "nginx-test"
spec:
containers:
- name: "nginx-test"
image: nginx:latest
imagePullPolicy: IfNotPresent
tolerations:
- key: "app"
operator: "Equal"
value: "test"
effect: NoSchedule
restartPolicy: Always
nodeSelector:
ns: sit
selector:
matchLabels:
app: "nginx-test"
nodeSelector 比较好理解。
tolerations 在配置时,需要和node 的污点信息保持一致。
这样就可以实现开篇的需求了。
tolerations:
- key: app
operator: Equal
value: video
effect: NoSchedule