K8S Pod 常见问题

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 - 无法立即终止。这可能是由于应用程序没有正确处理终止信号,或者某些资源没有正确释放导致的。
  • 持久卷释放延迟:Pod 中使用了持久卷(PersistentVolume)并且正在等待持久卷的释放。在某些情况下,持久卷可能需要一段时间来完成释放操作,特别是在底层存储系统或云服务提供商的操作中可能会存在延迟。
  • 控制器未能删除 Pod:Pod 由控制器(如 Deployment、StatefulSet 等)管理,但是控制器未能成功删除 Pod。这可能是由于控制器本身出现故障、权限问题、网络问题等原因导致。
  • 亲和性/反亲和性规则阻止调度:Pod 中指定了亲和性或反亲和性规则,导致无法调度到满足条件的节点上,从而无法顺利终止。
  • 删除前钩子未完成:Pod 中定义了删除前钩子(preStop hook),但是该钩子中的操作尚未完成,导致 Pod 无法顺利终止。这可能是由于钩子中执行了长时间运行的操作,或者操作因某些原因阻塞导致的。

解决办法

查看删除失败的命名空间中还有没有相关联的资源,如果有删除关联的资源再次尝试。

kubectl api-resources --verbs=list --namespaced -o name   | xargs -n 1 kubectl get --show-kind --ignore-not-found -n "namespace 名字"

如果上面的方法还是不行在执行强制删除

# 查看处于 Terminating 命名空间
kubectl get ns

# 到处状态为 Terminating 的命名空间
kubectl get ns k8tz -ojson > k8tz.json

修改 k8tz.json 文件

# 修改前
    "spec": {
        "finalizers": [
            "kubernetes"
        ]
# 修改后
    "spec": {
        "finalizers": []

开启8080端口

kubectl proxy --port=8080 &

删除命名空间

curl -k -H "Content-Type: application/json" -X PUT --data-binary @k8tz.json http://127.0.0.1:8080/api/v1/namespaces/修改为自己命名空间的名字/finalize

大部分 Pod 问题都需要先查describe 在查看日志

# 查看详细信息
kubectl describe pod POD_NAME -n NAMESPACE

# 查看日志
kubectl logs POD_NAME -n NAMESPACE -f

Pod 处于 Running 态但是没有正常工作

容器内部问题

  • 程序可能出现了死循环。
  • 程序可能因内存溢出(OOM)而僵死,进程虽然还在但无响应。
  • 程序本身可能存在bug,例如返回错误的HTTP状态码。
  • 解决方法:检查程序日志,定位具体问题,并修复程序bug或调整资源限制。

集群环境问题

  • 在k8s环境中,如果服务器重启后,所有节点状态为NotReady,但Pod状态为Running,这可能是由于hostname没有正确设置导致的,或者网络插件有问题,iptables 规则问题
  • 解决方法:检查并修改节点的hostname,然后重启服务器。

资源限制问题

  • Pod可能由于资源限制(如CPU或内存)而无法正常工作。
  • 解决方法:检查Pod的资源限制设置,确保它们满足应用的需求。

网络问题

  • Pod可能由于网络问题(如DNS解析、网络策略等)而无法与外部通信。
  • 解决方法:检查网络配置和策略,确保Pod可以正确访问所需的资源和服务。

依赖服务未就绪

  • Pod可能依赖于其他服务或组件,如果这些依赖项未就绪或存在问题,Pod可能无法正常工作。
  • 解决方法:检查Pod的依赖项,确保它们都已正确部署并处于可用状态。

如果 Pod ip能 ping 通并且进去到 Pod 里查看服务也是正常的下一步需要查看service是否正常。

相关推荐

  1. K8S Pod 常见问题

    2024-04-23 07:50:05       15 阅读
  2. K8S Service 常见问题

    2024-04-23 07:50:05       16 阅读
  3. 一些常见k8s问题和答案

    2024-04-23 07:50:05       14 阅读
  4. K8s 中Pod无法启动5个常见问题总结

    2024-04-23 07:50:05       36 阅读
  5. k8s集群安装网络插件calico常见问题

    2024-04-23 07:50:05       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-23 07:50:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-23 07:50:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-23 07:50:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-23 07:50:05       20 阅读

热门阅读

  1. 2024年最新 CKA 试题题库及答案详解 导航页

    2024-04-23 07:50:05       16 阅读
  2. Linux学习(嵌入式硬件知识)

    2024-04-23 07:50:05       17 阅读
  3. 【Node.js】json-server

    2024-04-23 07:50:05       43 阅读
  4. Ruby中Rack中间件的作用是什么?如何应用?

    2024-04-23 07:50:05       30 阅读
  5. Kubernetes 核心技术组件Scheduler解析

    2024-04-23 07:50:05       51 阅读
  6. I fumo 星(STL,数学)

    2024-04-23 07:50:05       18 阅读
  7. Nginx四层负载均衡

    2024-04-23 07:50:05       26 阅读
  8. CSS3 transition过渡:打造流畅动画效果的全面指南

    2024-04-23 07:50:05       34 阅读
  9. 天星金融消保课堂开讲,金融健康意识再提升

    2024-04-23 07:50:05       16 阅读
  10. 说说redis的集群的原理吧

    2024-04-23 07:50:05       15 阅读
  11. redis 无占用 两种方式 清除大批量数据 lua脚本

    2024-04-23 07:50:05       13 阅读
  12. gitlab上传新创建的工程项目

    2024-04-23 07:50:05       60 阅读