简介
本文介绍如何解决K8S一直Pending的问题。
问题描述
在master里安装dashboard后,查看状态发现一直是Pending。
如下图所示:
命令
kubectl get pods -n kubernetes-dashboard
或者
kubectl get pods -A
结果
排查方法
用K8S排查问题的命令查看一下:
命令格式
kubectl describe pod <pod-name> -n <namespace>
pod-name和namespace:都是kubectl get pods命令的执行结果对应的列:
K8S自带的namespace是:kube-system。
命令
kubectl describe pod dashboard-metrics-scraper-5657497c4c-mnl46 -n kubernetes-dashboard
本处的 dashboard-metrics-scraper-5657497c4c-mnl46就是前边kubectl get pods -n kubernetes-dashboard结果中的NAME列。
结果:
重点是最下边这句:
Warning FailedScheduling 7s (x21464 over 17h) default-scheduler 0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.
因为K8S默认不让pod部署到master节点,而我们部署的测试环境只有一个节点也是master节点,需要允许master节点部署pod。
解决方案
方案是:需要允许master节点部署pod(手动删除master的污点)。
1.查找污点的key
方法1
命令
kubectl describe nodes | grep Taints
结果(红框内就是污点的key)
方法2
命令
kubectl get nodes -o yaml | grep taint -C 5
结果(红框内就是污点的key)
2.删除污点
命令格式:
kubectl taint nodes --all <key>-
命令
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
结果
3.查看dashboard状态
kubectl get pods -n kubernetes-dashboard
结果(状态变了,变成了:正在创建容器。)
过一会儿再次看状态(变成了:拉取镜像失败)
结论
Pending问题解决了,但出现了无法创建镜像的问题。解决方法见:解决K8S的dashboard的ImagePullBackOff和ErrImagePull的问题-自学精灵
请先
!