现象

k8s集群在 执行kubectl get pods -A命令后发现某个pod一直处于pending状态 。 执行 kubectl describe pod <pod名> -n <pod所在命名空间>后找到pending原因,如下:

nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, that the pod didn't tolerate

提示控制面(即master节点)有污点。

查找污点原因

查找节点是否存在污点:

kubectl describe nodes <node-name> |grep Taints
#kubectl describe nodes master |grep Taints
Taints: node-role.kubernetes.io/control-plane:NoSchedule

可以看到master节点存在污点:node-role.kubernetes.io/control-plane:NoSchedule

删除污点

删除污点命令:
kubectl taint nodes <node-name> node-role.kubernetes.io/control-plane:NoSchedule-
这里我们使用如下命令删除master节点的污点:

kubectl taint nodes master node-role.kubernetes.io/control-plane:NoSchedule-

删除污点后我们会发现pod启动正常了。