Pod 一直处于 Pending 状态

本文详细介绍了当 Kubernetes 中的 Pod 一直处于 Pending 状态时,如何进行问题排查。内容包括检查节点资源不足、nodeSelector 和 affinity 配置、节点污点与容忍,以及可能的 kube-scheduler 问题。提供了相应的解决方法和命令示例,帮助管理员解决 Pod 调度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 现象描述

当 Pod 一直处于 Pending 状态时,说明该 Pod 还未被调度到某个节点上,需查看 Pod 分析问题原因。例如执行 kubectl describe pod 命令,则获取到的事件信息如下:

$ kubectl describe pod tikv-0
...
Events:
  Type     Reason            Age                 From               Message
  ----     ------            ----                ----               -------
  Warning  FailedScheduling  3m (x106 over 33m)  default-scheduler  0/4 nodes are available: 1 node(s) had no available volume zone, 2 Insufficient cpu, 3 Insufficient memory. 

二 可能原因

  1. 节点资源不足
  2. 不满足 nodeSelector 与 affinity
  3. Node 存在 Pod 没有容忍的污点
  4. 低版本 kube-scheduler 的 bug
  5. kube-scheduler 未正常运行
  6. 驱逐后其他可用节点与当前节点的有状态应用不在相同可用区

三 排查方法

3.1 检查节点是否资源不足
3.1.1 问题分析

节点资源不足有以下几种情况:

  1. CPU 负载过高。
  2. 剩余可以被分配的内存不足。
  3. 剩余可用 GPU 数量不足(通常在机器学习场景、GPU 集群环境
### 解决 Kubernetes Pod Pending 状态并删除 Pod 当一个 Pod 处于 `Pending` 状态时,通常是因为资源不足或其他配置错误引起的。以下是可能的原因以及解决方案: #### 原因分析 1. **节点资源不足** 如果集群中的节点缺乏足够的 CPU 或内存来调度新的 Pod,则该 Pod 将保持在 `Pending` 状态[^1]。 2. **存储卷绑定失败** 当使用 PersistentVolumeClaim (PVC) 时,如果 PVC 的 StorageClass 不匹配或者无法找到合适的 PV 进行绑定,也会导致 Pod 待机[^3]。 3. **镜像拉取失败** 配置文件中指定的 Docker 镜像不存在或权限设置不当可能导致容器初始化失败,从而进入 `Pending` 状态[^4]。 4. **调度策略冲突** 自定义调度规则(如 NodeSelector、Taints 和 Tolerations)可能会阻止某些 Pods 被分配到任何可用节点上[^2]。 #### 查看具体原因 可以运行以下命令查看详细的事件日志以诊断问题所在: ```bash kubectl describe pod <pod-name> ``` 此操作返回的信息包括但不限于最后尝试启动的时间戳、失败消息等内容。 #### 删除处于 Pending 状态下的 Pod 即使 Pod 没有成功运行起来也可以通过如下方式将其移除掉: ```bash kubectl delete pod <pod-name> --grace-period=0 --force ``` 上述指令利用了 `--force` 参数即时终止目标实例而不考虑优雅关闭周期,默认情况下后者为 30 秒超时期限。 另外需要注意的是,在实际环境中应谨慎对待强制性动作以免影响业务连续性和数据一致性。 ### 示例脚本 下面给出一段简单的 Bash Shell 脚本来自动化查找所有 stuck 在 pending phase 上面的对象并且清理它们。 ```bash #!/bin/bash for ns in $(kubectl get namespaces -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}'); do for p in $(kubectl get pods -n $ns --field-selector=status.phase==Pending -o custom-columns=:metadata.name --no-headers);do echo Deleting pod "$p" from namespace "$ns" kubectl delete pod -n $ns $p --grace-period=0 --force; done done ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值