深入K8s:守护进程DaemonSet及其源码分析( 三 )


如果要移除这个污点 , 可以这么做:
kubectl taint nodes node1 key:NoSchedule-如果我们想让pod运行在有污点的node节点上 , 我们需要在pod上声明Toleration , 表明可以容忍具有该Taint的Node 。
比如我们可以声明如下pod:
apiVersion: v1kind: Podmetadata:name: pod-taintsspec:tolerations:- key: "key"operator: "Equal"value: "value"effect: "NoSchedule"containers:- name: pod-taintsimage: busybox:latestoperator在这里可以是Exists表示无需指定value , 值为Equal表明需要指明和value相等 。
NoSchedule表示如果一个pod没有声明容忍这个Taint , 则系统不会把该Pod调度到有这个Taint的node上 。 除了NoSchedule外 , 还可以是PreferNoSchedule , 表明如果一个Pod没有声明容忍这个Taint , 则系统会尽量避免把这个pod调度到这一节点上去 , 但不是强制的 。
在上面的fluentd-elasticsearch DaemonSet 里 , 我们加上了
tolerations:- key: node-role.kubernetes.io/mastereffect: NoSchedule【深入K8s:守护进程DaemonSet及其源码分析】是因为在默认情况下 , Kubernetes 集群不允许用户在 Master 节点部署 Pod 。 因为 , Master 节点默认携带了一个叫作node-role.kubernetes.io/master的“污点” 。 所以 , 为了能在 Master 节点上部署 DaemonSet 的 Pod , 我就必须让这个 Pod“容忍”这个“污点” 。


推荐阅读