最近在鼓捣自建k8s服务器上部署EFK来收集容器中的日志,但是发现有些日志能收集到日志,而有些不行,查看pod部署分布的服务器,有些调度到了master节点,而fluentd只运行在worker节点,不能收集master节点上的容器日志,因此就需要给master节点打污点。
#查看集群中各节点信息
kubectl get nodes
#查看master节点是否允许被调度
$ kubectl describe nodes k8s-master-node1 |grep Taints Taints: <none>
none表示是允许被调度的
#给master节点打污点,不允许调度
$ kubectl taint nodes k8s-master-node1 node-role.kubernetes.io/master=:NoSchedule node/k8s-master-node1 tainted
kubectl taint node [node] key=value[effect]
其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
NoSchedule: 一定不能被调度
PreferNoSchedule: 尽量不要调度
NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod
再次查看master节点是否被允许调度
$ kubectl describe nodes k8s-master-node1 |grep Taints
Taints: node-role.kubernetes.io/master:NoSchedule
- #删除taint
kubectl taint node k8s-master-node1 node-role.kubernetes.io/master:NoSchedule-
- #容忍tolerations主节点的taints
以上面为 master1 设置的 taints 为例, 你需要为你的 yaml 文件中添加如下配置, 才能容忍 master 节点的污点
在 pod 的 spec 中设置 tolerations 字段
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Equal"
value: ""
effect: "NoSchedule"