51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

k8s 污点标签(禁止调度)允许某个标签调度到此节点

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

赞(4)
未经允许不得转载:工具盒子 » k8s 污点标签(禁止调度)允许某个标签调度到此节点