8种Kubernetes集群中Pod处于 Pending状态的故障排除方法

文章目录

    • 一、Pod与容器
    • 二、Pod的阶段(状态)
    • 三、Pod 状态故障排除
      • 3.1 检查 Pod 事件
      • 3.2 检查资源可用性
      • 3.3 检查污点和容忍度
      • 3.4 检查节点亲和性设置
      • 3.5 检查持久卷声明
      • 3.6 检查配额和限制
      • 3.7 验证 Pod 和容器映像
      • 3.8 分析调度程序日志
    • 四、用于排查 Pending 状态的命令
      • 4.1 检查 Pod 事件
      • 4.2 检查资源可用性
      • 4.3 检查污点和容忍度
      • 4.4 检查节点亲和性设置
      • 4.5 检查持久卷声明
      • 4.6 检查配额和限制
      • 4.7 验证 Pod 和容器映像
      • 4.8 分析调度程序日志

一、Pod与容器

Pod是可以在Kubernetes中创建和管理的最小可部署单元。Pod是一组(一个或多个)容器的打包,这一组容器共享存储、网络;pod中的容器地位均等且一同调度,在共享的上下文中运行。这些容器在业务上是紧密耦合在一起的。

Pod就像一台“逻辑主机”为这一组紧密相关的容器提供运行上下文。Pod除了正常运行的业务容器外还可以在启动期间运行Init容器。也可以在集群支持临时容器的情况下,以调试为目的注入临时容器。

如下图
可以把Pod看成是一个“豌豆荚”,
里面有很多“豆子”(容器)。
一个豌豆荚里的豆子,它们吸收着共同的营养成分、肥料、水分等,
Pod和容器的关系也是一样,
Pod里面的容器共享pod的空间、资源、网络、存储等。

在这里插入图片描述

二、Pod的阶段(状态)

通过kubectl get pod -o yaml 查看pod的信息,其中status.phase字段表示该pod的阶段。 通过kubectl describe pod 查看pod详情,其中State字段表示该pod的状态(阶段)。

kubectl get pod -o yaml
kubectl describe pod 
阶段(状态)描述
PendingPod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间。
RunningPod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。
SucceededPod 中的所有容器都已成功终止,并且不会再重启。
FailedPod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。
Unknown 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败

三、Pod 状态故障排除

以下是对 Pending Pod 状态进行故障排除的系统方法:

3.1 检查 Pod 事件

使用kubectl describe pod

查找有关 pod 调度尝试的详细信息。事件部分可能包含来自调度程序或其他组件的消息,指示无法调度 Pod 的原因。例如:

  • FailedScheduling:此事件提供诸如无法满足的约束(例如,污点、关联性)或资源不足之类的原因。

  • FailedAttachVolume或FailedMount:表示附加或安装卷时出现问题,可能是由于缺少 PersistentVolume 或存储类问题。

3.2 检查资源可用性

节点可能缺乏 Pod 所需的必要 CPU 或内存资源。使用 检查节点详细信息时kubectl describe nodes,请考虑:

  • 可分配与容量:了解差异;容量是资源总量,而 Allocatable 是 Kubernetes 系统预留量。

  • 资源请求和限制:将节点上调度的所有 pod 的请求和限制总和与节点的可分配资源进行比较,以识别潜在的资源短缺。

3.3 检查污点和容忍度

节点可能具有排斥 pod 的污点,除非 pod 具有匹配的容忍度。检查污点时:

  • 了解污点效果:NoSchedule、PreferNoSchedule 和 NoExecute 等效果决定污点的严格程度。

  • 匹配容忍度:确保 Pod 的容忍度与节点污点的键、值和效果相匹配,以允许调度。

3.4 检查节点亲和性设置

节点关联性规则可能过于严格。查看关联性设置时:

  • 必需规则与首选规则:调度必须满足必需规则,而首选规则会影响调度决策,但不是强制性的。

  • 标签匹配:确保节点具有与 Pod 的亲和性标签选择器匹配的标签。

3.5 检查持久卷声明

PVC 问题可能会阻止 Pod 被调度,特别是对于有状态应用程序。检查要点:

  • PVC Status:确保 PVC 状态为Bound,表示它已成功附加到PersistentVolume。

  • StorageClass 和 Provisioner:确认 StorageClass 存在并且动态配置器(如果使用)可以运行。

3.6 检查配额和限制

命名空间配额会限制资源分配,影响 Pod 调度。检查配额时:

  • 资源配额:在命名空间中查找ResourceQuota对象,并将其限制与当前使用情况进行比较。

  • Pod 计数限制:除了 CPU 和内存之外,配额还可以限制 Pod 的数量,这可能是导致问题的原因。

3.7 验证 Pod 和容器映像

容器映像的问题(例如名称不正确或无法访问的注册表位置)可能会停止 Pod 调度:

  • 图像拉取错误:常见问题包括需要身份验证的私有注册表或图像名称/标签中的拼写错误。

  • 映像拉取策略:该策略可能需要重新拉取映像,这可能会由于连接问题或速率限制而失败。

3.8 分析调度程序日志

Kubernetes 调度程序日志可以提供对决策过程的深入了解:

  • 详细日志记录:增加日志的详细程度可以揭示详细的调度决策和失败。

  • 搜索 Pod 名称:按 Pod 名称过滤日志,以跟踪特定的调度尝试以及任何失败背后的原因。

四、用于排查 Pending 状态的命令

4.1 检查 Pod 事件

kubectl describe pod <pod-name> -n <namespace>

在“事件”部分查找可能表明日程安排问题的消息。

4.2 检查资源可用性

kubectl describe nodes

检查“可分配”和“容量”部分,以及“非终止 Pod”下 Pod 请求的资源。

4.3 检查污点和容忍度

列出所有节点上的污点:

kubectl get nodes -o jsonpath='{.items[*].metadata.name}{"\t"}{.items[*].spec.taints}' | tr -s '[[:space:]]' '\n'

确保您的 pod 的容忍度与这些污点相匹配。

4.4 检查节点亲和性设置

检查 pod 定义 (pod.yaml) 中的亲和性部分:

affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: <key>operator: Invalues:- <value>

确保存在带有符合这些要求的标签的节点。

4.5 检查持久卷声明

检查 PVC 的状态:

kubectl get pvc -n <namespace>

确保 pod 所依赖的 PVC 处于 Bound 状态。

4.6 检查配额和限制

查看命名空间中的资源配额:

kubectl describe quota -n <namespace>

检查是否有任何资源配额即将超出。

4.7 验证 Pod 和容器映像

确保 pod 规范中的容器镜像正确。要检查镜像拉取错误,请查看 pod 的事件:

kubectl describe pod <pod-name> -n <namespace> | grep -i "Failed"

这可以帮助识别拉取容器映像时出现的任何问题。

4.8 分析调度程序日志

首先,找到调度程序 pod 的名称:

kubectl get pods -n kube-system | grep kube-scheduler

然后,查看调度器的日志(替换为实际名称):

kubectl logs <scheduler-pod-name> -n kube-system

在这里插入图片描述


磨你的心智,是为了以后不管你遇见任何人和事,都能稳如泰山。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/279636.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html中如何让网页禁用右键禁止查看源代码

在网页中&#xff0c;辛辛苦苦写的文章&#xff0c;被别人复制粘贴给盗用去另很多站长感到非常无奈&#xff0c;通常大家复制都会使用选取右键复制&#xff0c;或CTRLC等方式&#xff0c;下面介绍几种禁止鼠标右键代码&#xff0c;可减少网页上文章被抄袭的几率&#xff0c;当然…

机器学习——终身学习

终身学习 AI不断学习新的任务&#xff0c;最终进化成天网控制人类终身学习&#xff08;LLL&#xff09;&#xff0c;持续学习&#xff0c;永不停止的学习&#xff0c;增量学习 用线上收集的资料不断的训练模型 问题就是对之前的任务进行遗忘&#xff0c;在之前的任务上表现不好…

用C语言打造自己的Unix风格ls命令

在Unix或类Unix操作系统中&#xff0c;ls是一个非常基础且实用的命令&#xff0c;它用于列出当前目录或指定目录下的文件和子目录。下面&#xff0c;我们将通过C语言编写一个简化的ls命令&#xff0c;展示如何利用dirent.h头文件提供的函数接口实现这一功能。 #include "…

发布镜像到阿里云仓库

发布上一篇Dockerfile实战-自定义的centos镜像。 1、登录阿里云 2、找到容器镜像服务 3、创建命令空间 4、创建镜像仓库 5、点击进入这个镜像仓库&#xff0c;可以看到所有的信息 6、根据操作指南测试推送发布 6.1登录阿里云 [rootzhoujunru home]# docker login --usernam…

开箱即用之 windows部署jdk、设置nginx、jar自启

jdk安装 官网下载对应的安装包&#xff0c;解压之后放在本地指定的文件夹下 传送门https://www.oracle.com/java/technologies/downloads/#jdk21-windows 我比较喜欢下载zip方式的&#xff0c;解压之后直接能用&#xff0c;不需要安装了 配置环境 JAVA_HOME 添加path路径 …

Nebula Graph-01-Nebula Graph简介和安装以及客户端连接

前言 NoSQL 数据库 图数据库并不是可以克服关系型数据库缺点的唯一替代方案。现在市面上还有很多非关系型数据库的产品&#xff0c;这些产品都可以叫做 NoSQL。NoSQL 一词最早于上世纪 90 年代末提出&#xff0c;可以解释为“非 SQL” 或“不仅是 SQL”&#xff0c;具体解释要…

蓝桥练习题总结(一)字母图形、完美的代价、01串、序列求和

目录 一、字母图形 二、完美的代价 三、01字串 四、序列求和 一、字母图形 问题描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形&#xff0c;请找出这个图形的规律&#xff…

本地gitlab-runner的创建与注册

引言 之前通过一些方式在本地创建runner&#xff0c;时而会出现一些未知的坑&#xff0c;所以写下本文记录runner可以无坑创建的方式。 以下注册runner到相应仓库的前提是已经在本地安装了gitlab-runner 具体安装方式见官网 本地gitlab-runner安装常用的指令 查看gitlab r…

SQLiteC/C++接口详细介绍之sqlite3类(十八)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十七&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;一&#xff09; ​ 56.sqlite3_update_hook 函数功能&am…

Vue.js前端开发零基础教学(二)

目录 前言 2.1 单文件组件 2.2 数据绑定 2.2.2 响应式数据绑定 2.3 指令 2.3.1 内容渲染指令 2.3.2 属性绑定指令 ​编辑 2.3.3 事件绑定指令 2.3.4 双向数据绑定指令 2.3.5 条件渲染指令 2.3.6 列表渲染指令 2.4 事件对象 2.5 事件修饰符 学习目标&am…

【CKA模拟题】学会JSONPath,精准定位Pod信息!

题干 For this question, please set this context (In exam, diff cluster name) kubectl config use-context kubernetes-adminkubernetesyou have a script named pod-filter.sh . Update this script to include a command that filters and displays the label with the…

STM32-DMA数据转运

DMA进行转运的条件 1&#xff1a;开关控制&#xff0c;DMA_CMD必须使能2&#xff1a;传输计数器必须大于03&#xff1a;触发源必须有触发的信号

【c++】c++背景(c++的前世今生)

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1. 什么是C 2. C发展史 3. C的重要性 3.1 语言的使用广泛度 3.2在工作邻域 1. 操作系统以及大型系统软件开发 2. 服务器端开发 3. …

OSPF路由汇总

OSPF只要是环回接口&#xff08;默认P2P网络类型&#xff09;&#xff0c;默认都是32位的叶子信息。手动修改&#xff0c;[R1-LoopBack0]ospf network-type broadcast&#xff1b;修改网络类型。 OSPF不支持自动汇总&#xff0c;需要手动汇总。 一、OSPF路由汇总 使用CIDR技术…

java数据结构与算法刷题-----LeetCode135. 分发糖果

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 左右遍历2. 进阶&#xff1a;常数空间遍历&#xff0c;升序降…

【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】

目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置&#xff08;账户/团队/用户&#xff09;①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…

内表-ABAP开发从入门到精通笔记

内表 概念 内表是在程序内部定义的表。是定义在内存中&#xff0c;所以运行速度会比磁盘中是实体表快很多。 内表的定义&#xff0c;可以通过type来定义&#xff0c;也可以通过变量来定义。 例如&#xff1a;先定义一个结构体&#xff0c;然后再通过结构体定义内表 先顶一个结…

合合信息扫描全能王亮相静安区3·15活动,AI扫描带来绿色消费新体验

保护消费者的合法权益&#xff0c;是全社会的共同责任。为优化消费环境、促进品质消费高地建设&#xff0c;打造安全优质和谐的消费环境&#xff0c;上海静安区消保委于3月15日举办静安区2024年“315”国际消费者权益日活动。 “激发消费活力&#xff0c;绿色低碳同行”是本次3…

蓝桥杯每日一题——棋盘

问题描述 小蓝拥有 n xn 大小的棋盘&#xff0c;一开始棋盘上全都是白子。小蓝进行了 m 次操作&#xff0c;每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0c;黑色棋子变为白色)请输出所有操作做完后棋盘上每个棋子的颜色。输入格式 输入的…

智能合约语言(eDSL)—— 使用rust实现eDSL的原理

为理解rust变成eDSL的实现原理&#xff0c;我们需要简单了解元编程与宏的概念,元编程被描述成一种计算机程序可以将代码看待成数据的能力&#xff0c;使用元编程技术编写的程序能够像普通程序在运行时更新、替换变量那样操作更新、替换代码。宏在 Rust 语言中是一种功能&#x…