kubernetes scheduler taints 污点调度
来源:原创
时间:2019-07-06
作者:脚本小站
分类:云原生
污点一般用在节点上。匹配到的条目越多得分越低。
查看节点的spec:node节点同样有spec字段,使用如下命令可以看到。
kubectl get nodes master -o yaml | grep -i taints -C 5
yaml:
spec: podCIDR: 10.244.0.0/24 taints: - effect: NoSchedule # 表示Pod不调度到此节点上,除非打上容忍污点的标签 key: node-role.kubernetes.io/master
查看文档使用 kubectl explain nodes.spec.taints ,而运行在master节点上的Pod 都打上了容忍污点的标签。
taints.effect 各个值对Pod的调度效果:
NoSchedule:仅影响调度过程,对现存Pod对象不产生影响。在打这个标签之前的Pod不受影响,打上了这个标签之后不容忍这个污点的Pod就不会被调度上来。
NoExecute:既影响调度过程,也影响现存的Pod,不容忍的将被驱逐。在打上这个标签之前的Pod也会受到这个标签的影响,不接受这个污点将重新调度。
PreferNoSchedule:如果实在没节点可以调度的话也可以运行在这个节点上。
管理节点的污点:
在node1上打标签:这样Pod就不会被调度到node1节点上了。
kubectl taint node node1 node-type=production:NoSchedule
如果在node2上打上NoExecute 则原有的Pod会被驱逐。
kubectl taint node node2 node-type=dev:NoExecute
去除节点上的污点:
kubectl taint node node1 node-type-
容忍污点:
如果在Pod上打上容忍度容忍污点这样就可以运行在有污点的节点上了。
容忍某个具体的污点:当污点 node-type 的 value 等于production 、effect 等于NoSchedule 时这个污点将被容忍。
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-dm namespace: default spec: replicas: 3 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: busybox ports: - name: http containerPort: 80 command: ["sleep","3600"] tolerations: # 容忍度标签 - key: "node-type" # 标签名称 operator: "Equal" # 匹配方式 Exists and Equal Exists存在即可,Equal存在且effect值要相等 value: "production" #标签值 effect: "NoSchedule" # 效果 #tolerationSeconds: 20 # 容忍的时间,在这个时间内迁移出Pod,只有值为NoExecute时使用
容忍node-type的NoSchedule污点:不管value的值是什么
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-dm namespace: default spec: replicas: 3 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: busybox ports: - name: http containerPort: 80 command: ["sleep","3600"] tolerations: - key: "node-type" operator: "Exists" value: "" # 当operator为Exists 时这个值自动变为匹配所有 effect: "NoSchedule"
容忍node-type的污点:只要是node-type的污点都将被容忍,不管value和effect是什么。
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-dm namespace: default spec: replicas: 3 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: busybox ports: - name: http containerPort: 80 command: ["sleep","3600"] tolerations: - key: "node-type" operator: "Exists" value: "" effect: ""
容忍所有污点标签:容忍一切污点。
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-dm namespace: default spec: replicas: 3 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: busybox ports: - name: http containerPort: 80 command: ["sleep","3600"] tolerations: - operator: Exists # 容忍一切污点