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.mzph.cn/news/758174.shtml

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

相关文章

Django动态路由实例

Django动态路由实例 先说需求&#xff1a; 比如我前端有两个按钮&#xff0c;点击按钮1跳转到user1的用户信息页面&#xff0c;按钮2跳转user2用户信息页面&#xff0c;但是他俩共用同一个视图层 直接上代码 路由层 urlpatterns [path(user/<str:username>/, views…

Swift 结构化并发之全局 Actor 趣谈

概览 在 Swift 结构化并发构成的体系中,一个称为“演员”(Actor)的成员扮演了非常重要的角色,它被用来隔离和同步执行中的数据。 除了普通 Actor 以外,还有一个全局“演员”(Global Actor)的概念,它是做什么的?又有什么与众不同的长处呢? 在本篇博文中,您将学到如…

通过ETL工具快速实现单据同步

ETLCloud介绍 ETLCloud是一款旨在解决企业数据集成挑战的最新一代平台&#xff0c;它集成了离线数据集成ETL、ELT、CDC实时数据集成、编排调度和数据服务API等功能&#xff0c;形成了一体化的DataOps数据集成平台。该平台提供私有化部署以及云原生架构&#xff0c;能够满足企业…

设计模式深度解析:适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼 探索设计模式的魅力&#xff1a;深入了…

ElasticSearch - 基本操作

前言 本文记录 ES 的一些基本操作&#xff0c;就是对官方文档的一些整理&#xff0c;按自己的习惯重新排版&#xff0c;凑合着看。官方的更详细&#xff0c;建议看官方的。 下文以 books 为索引名举例。 新增 添加单个文档 (没有索引会自动创建) POST books/_doc {"n…

Linux--Ubuntu安装

Linux操作系统时程序员必须要学的操作系统。接下来我们就来看一下Linux操作系统是如何安装的 我们在 Vmware 虚拟机中安装 linux 系统&#xff0c;所以需要先安装 vmware 软件&#xff0c;然后再 安装 Linux 系统。 一.所需安装文件&#xff1a; Vmware 下载地址(现在最新版的…

羊大师揭秘,孩子适不适合喝羊奶?

羊大师揭秘&#xff0c;孩子适不适合喝羊奶&#xff1f; 羊奶&#xff0c;这个古老而珍贵的营养饮品&#xff0c;近年来在家长们中间逐渐走红。它以其独特的营养价值和口感受到了众多家庭的青睐。但是&#xff0c;面对市面上琳琅满目的羊奶产品&#xff0c;家长们常常陷入选择…

三连杆滑块机构运动学仿真 | 【Matlab源码+理论公式文本】|曲柄滑块 | 曲柄连杆 | 机械连杆

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了三连杆滑块机构的运动学仿真编程&#xff0c;动态展现了三连杆机构的运动动画&#xff0c;同时给出了角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学公式推导文档…

网络——入门基础

目录 协议 网络协议 OSI七层模型 网络传输基本流程 网络传输流程图 局域网通信 数据包的封装和解包 广域网通信 网络地址管理 IP地址 MAC地址 协议 关于什么是局域网&#xff0c;什么是广域网&#xff0c;我这里就不过多赘述了&#xff0c;我们直接来谈一下什么…

【链表】Leetcode 24. 两两交换链表中的节点【中等】

两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例1: 输入&#xff1a;head [1,2,3,4] 输出&#…

用连续自然数之和来表达整数 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 一个整数可以由连续的自然数之和来表示。给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。 输入描述 一个目标整数T (1 <=T<= 1000) 输出描述 该整数的所有表达式…

java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics

今天在使用springBoot连接influxdb报错 java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 详细报错如下&#xff0c;提出我们缺少一个依赖 原因是由于创建influxdb客户端缺少Kotlin运行时库 解决办法就是 1.显示的添加okhttp的依赖 <dependency>…

my2sql —— go语言版binlog解析及闪回工具

之前学习过python语言版binlog解析及闪回工具 MySQL闪回工具简介 及 binlog2sql工具用法 最近听同事介绍有了新的go语言版的my2sql。优点是不需要安装一大堆依赖包&#xff0c;直接可以安装使用&#xff0c;并且解析更高效&#xff0c;试用一下。 一、 下载安装 1. 软件下载 …

5分钟教你使用idea调试SeaTunnel自定义插件

在用Apache SeaTunnel研发SM2加密组件过程中&#xff0c;发现社区关于本地调试SeaTunnel文章过于简单&#xff0c;很多情况没有说明&#xff0c;于是根据自己遇到问题总结这篇文档。SeaTunnel本地调试官方文档&#xff0c;希望对大家有所帮助&#xff01; 使用的引擎为Flink(不…

极路由4获取不到local_token和uuid的解决方案

今天淘了个二手极路由4(HC5962)&#xff0c;想刷个Openwrt系统来着&#xff0c;就按着网上的教程来进行。 打开极路由ROOT local-ssh利用工具 (hiwifi.wtf)这个网站&#xff0c;然后第一步获取local_token就出问题了&#xff0c;显示的字是"找不到文件..."&#xff…

C/C++炸弹人游戏

参考书籍《啊哈&#xff0c;算法》&#xff0c;很有意思的一本算法书&#xff0c;小白也可以看懂&#xff0c;详细见书&#xff0c;这里只提供代码和运行结果。 这里用到的是枚举思想&#xff0c;还有更好地搜索做法。 如果大家有看不懂的地方或提出建议&#xff0c;欢迎评论区…

前端基础篇-深入了解 Ajax 、Axios

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Ajax 概述 2.0 Axios 概述 3.0 综合案例 1.0 Ajax 概述 通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互是指&#xff0c;可以在不…

大模型第一讲笔记

目录 1、人工智能基础概念全景介绍... 2 1.1 人工智能全景图... 2 1.2 人工智能历史... 2 1.3 人工智能——机器学习... 3 监督学习、非监督学习、强化学习、机器学习之间的关系... 3 监督学习... 4 无监督学习... 5 强化学习... 5 深度学习... 6 2、语言模型的发展及…

演讲恐惧症?别怕!这3招帮你克服舞台紧张

演讲恐惧症&#xff1f;别怕&#xff01;这3招帮你克服舞台紧张 在人生的舞台上&#xff0c;演讲往往被视为展现个人才华、传递思想观点的重要平台。然而&#xff0c;对于许多人来说&#xff0c;站在舞台上却成为了一种难以克服的恐惧。演讲恐惧症&#xff0c;这个看似微不足道…

PMP备考心得 | 策略与技巧大揭秘

1.理解考试大纲&#xff1a;首先&#xff0c;你需要熟悉PMP考试的内容和结构。PMI官网提供了详细的考试大纲&#xff0c;包括项目管理的五个过程组&#xff08;启动、规划、执行、监控、收尾&#xff09;和十个知识领域&#xff1b; 2.制定学习计划&#xff1a;根据个人的时间…