k8s pod 始终处于pending状态,如何解决
新搭建的k8s投入使用,为新项目提供节点资源。
·
项目场景:
新搭建的k8s投入使用,为新项目提供节点资源。
问题描述
k8s服务部署后,由于项目需要,进行了一次服务重启,结果发现kubernetes-dashboard无法访问,kubectl get pod -A 查看所有pod发现,均处于pending状态。
原因分析:
怀疑是node节点出了问题,所以导致pod无法启动。
解决方案:
第一步:查看所有pod节点状态,发现全部是pending
kubectl get pod -A
第二步:查看namespace里面一个pod的详细信息,查看具体是什么原因导致的pending
kubectl -n kubernetes-dashboard describe pod dashboard-metrics-scraper-c45b7869d-vv9kw
#kubectl -n namespace的名字 describe pod pod的名字
结尾处看到报错信息,两个节点有污点,pod无法容忍。
第三步:查看污点信息
kubectl describe nodes |grep Taints
第四步:删除污点内容。污点名字后面跟 - 号,就可以删除了
kubectl taint nodes node1 project=devcenter-build:NoExecute-
kubectl taint nodes node2 project=devcenter-build:NoExecute-
第五步:再次查看污点信息,查看pod状态
kubectl describe nodes |grep Taints
kubectl get pod -A
问题结束后,看了一些相关文章。总结发现,pending状态导致的原因主要分为三类:
第一类: 调度问题,无法在任何节点上调度 Pod。其中包括,污点、node节点内存或cpu资源不足、都会引起调度失败。
第二类: 镜像问题,无法拉取到镜像。包括,镜像名称、标签、镜像仓库输入错误,镜像仓库需要身份验证等,都导致拉取失败。
第三类:依赖性问题,Pod 需要一个卷、Secret 或 ConfigMap 才能运行。(没遇到过,但是据说发生这个问题的可能性较小)
更多推荐
已为社区贡献7条内容
所有评论(0)