K8S集群内有一台212专门用来做数据库服务器,磁盘是基于SSD。
1.设置212污点
kubectl taint node 172.17.10.212 disk=ssd:NoSchedule
2.数据库的deployment
spec:
tolerations:
- key: "disk"
operator: "Equal"
value: "ssd"
effect: "NoSchedule"
nodeSelector:
kubernetes.io/hostname: 172.17.10.212
这样子数据库就只会在212这台机器上跑,同时其他服务不会调度在这台。
kubectl taint node [node] key=value[effect]
其中[effect]
可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
NoSchedule
:一定不能被调度。
PreferNoSchedule
:尽量不要调度。
NoExecute
:不仅不会调度,还会驱逐Node上已有的Pod。
查看节点的污点:
kubectl describe node/node_name |grep Taint
如何取消污点:
去除指定key
及其effect
:
kubectl taint nodes node_name key:[effect]- #(这里的key不用指定value)
去除指定key所有的effect:
kubectl taint nodes node_name key-
deploy容忍污点:
tolerations:
key: "disk"
operator: "Equal" #Equal意味着这个值等于value,如果是Exists,则不需要填写value,只要有这个key就容忍
value: "ssd"
effect: "NoSchedule"
实例:
将pod调度到master(一般情况我们会给master打上污点,业务pod一般不会调度到master)
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
name: taint-replica
spec:
replicas: 3
selector:
matchLabels:
app: busybox
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "sleep 3600"]
imagePullPolicy: IfNotPresent
tolerations: #设置pod的容忍度,可以忍受带prod=dev的污点节点,类型为NoSchedule
- key: prod
operator: Equal
value: dev
effect: NoSchedule