目录
Pod 常见问题
调试 Pod
查看 Pod 的当前状态和最近的事件
kubectl describe pods php-apache-7d4456444b-rdd4t
查看一下 Pod 中的容器所处的状态。这些容器的状态都是 Running 吗?最近有没有重启过?
后面的调试都是要依靠 Pod 的状态的。
Pod 在 Pending 状态
如果 Pod 在 Pending 状态,表示 Pod 没有被调度到节点上。常见原因如下:
- 调度问题:Kubernetes 调度器无法找到满足 Pod 的调度要求的节点。这可能是由于节点资源不足(例如 CPU、内存等)、节点上的污点(taints)与 Pod 的容忍度(tolerations)不匹配,或者因为 Pod - 的亲和性/反亲和性规则导致无法找到合适的节点。
- 镜像拉取问题:Pod 指定的容器镜像无法下载或拉取。这可能是因为网络问题、镜像不存在、凭证错误等原因导致。
- 持久卷声明(PersistentVolumeClaim)问题:Pod 中包含持久卷声明,但是没有满足条件的存储卷可供绑定。这可能是由于存储类(StorageClass)不可用、持久卷已经耗尽等原因导致。
- 初始化容器问题:Pod 包含初始化容器(init containers),但这些初始化容器失败导致 Pod 无法正常启动。可以通过查看 Pod 的事件(events)来确定具体失败的初始化容器以及失败的原因。
- 资源限制问题:Pod 请求的资源超出了集群中任何节点的可用资源限制,导致调度失败。
- 节点不可用:Pod 调度到的节点不可用或处于不健康状态,可能是因为节点故障、网络问题、资源耗尽等原因。
- 缺少必要的标签或污点:Pod 包含了必须的节点标签或污点,但是集群中没有满足条件的节点。
- Pod 初始化阶段:Pod 的初始化过程(比如正在拉取镜像、正在创建网络连接等)可能会导致 Pod 处于 Pending 状态。
Pod 停滞在 Waiting 状态
如果 Pod 停滞在 Waiting 状态,则表示 Pod 已经被调度到某工作节点,但是无法在该节点上运行。
- 容器镜像拉取:Pod 中的容器正在等待其指定的镜像被下载或拉取完成。这通常是由于网络连接问题、镜像不存在或权限问题等导致的。
- 初始化容器:Pod 包含初始化容器(init containers),并且这些初始化容器正在等待它们自身的执行完成,以便 Pod - 的主要容器可以启动。这可能是初始化容器执行某些预处理任务,例如加载配置文件、初始化数据库等。
- 持久卷挂载:Pod 中的容器正在等待其指定的持久卷(PersistentVolume)被正确挂载。这通常是由于持久卷声明(PersistentVolumeClaim)无法满足或存储类(StorageClass)不可用导致的。
- 节点资源:Pod 正在等待可用的节点资源来调度。这可能是由于节点资源不足、Pod 的资源请求超出了节点资源限制等原因导致的。
Pod 或者 NS 停滞在 terminating 状态
如果 Pod 停滞在 Terminating 状态,表示已发出删除 Pod 的请求, 但控制平面无法删除该 Pod 对象。常见的原因如下:
- 未释放资源:Pod 中的某些容器正在终止过程中依然在执行任务,或者还在使用一些资源(例如网络连接、持久卷),导致 Pod - 无法立即终止。这可能是由于应用程序没有正确处理终止信