K8S Pod 常见问题

news/2024/9/30 4:31:33/

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是否正常。


http://www.ppmy.cn/news/1431148.html

相关文章

【车载Android】模拟Android系统的高负载环境

在开发车载Android应用和系统时,我们总会面临着一些挑战,尤其是处理高负载应用。例如,当一款新车型发布后,用户可能会同时运行地图、智能驾驶和爱奇艺等资源密集型应用。在这种情况下,如果用户尝试使用语音唤醒功能&am…

【ChatGPT】【Gemini】-用Python调用google的Gemini API

用Python调用google的Gemini API 以下是Gemini自己给出的具体步骤和代码,我直接参考一次测试通过,大家可以参考。 Goodmao:Python call gemini API Gemini: Absolutely, calling the Gemini API with Python involves a few st…

php时间人性化展示

在PHP中,可以使用date()函数和strtotime()函数来实现时间的人性化展示。下面是一个示例代码: <?php // 获取当前时间戳 $timestamp = time();// 格式化时间 $formattedTime = date(Y年m月d日 H:i:s, $timestamp);echo

Java面试题:什么是Java中的单元测试以及如何编写单元测试?

Java中的单元测试是一种软件开发方法&#xff0c;用于验证代码中的最小可测试单元&#xff08;通常是方法或类&#xff09;是否按预期工作。单元测试的目标是隔离代码的各个部分&#xff0c;并验证每个部分是否都能正确执行其预期的功能。 在Java中&#xff0c;JUnit是最常用的…

Python 中的return语句用法,返回的数据类型

return 语句在 Python 中用于从一个函数中退出&#xff0c;并将表达式的值&#xff08;如果存在&#xff09;传递回给调用者。 1&#xff0c;return 语句的核心用法 1.1 返回值 当你想从函数中得到一个结果并用这个结果继续在其他地方执行时&#xff0c;可以使用 return 后紧…

怎么通过Javascript脚本实现远程控制一路开关

怎么通过Javascript脚本实现远程控制一路开关呢&#xff1f; 本文描述了使用Javascript脚本调用HTTP接口&#xff0c;实现控制一路开关。一路开关可控制一路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称1智能WiFi…

设计模式|原型模式(Prototype Pattern)

文章目录 什么是原型模式结构优缺点优点缺点举例代码示例原型模式vs复制(copy)什么是原型模式 原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而无需显式地指定它们的类。这种模式通常用于当对象的创建成本较高,或者对象…

码随想录-算法训练营day20【二叉树06:最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第六章 二叉树 part06 今日内容 ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树 详细布置 654.最大二叉树 又是构造二叉树&#xff0c;昨天大家刚刚做完 中序后序确定二叉树…