项目场景:

新搭建的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 才能运行。(没遇到过,但是据说发生这个问题的可能性较小)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐