k8s常见问题:如何处理CrashLoopBackOff问题?

CrashLoopBackOff 概述

首先关于CrashLoopBackOff并不是代表一种错误, "CrashLoopBackOff 是 Kubernetes 中的一个状态,表示在一个 Pod 中发生的重启循环:Pod 中的一个容器启动之后发生了问题,然后反复重启。

Kubernetes 会在重启之间等待逐渐增加的退避时间,我们在发现CrashLoopBackOff之后可以对集群进行及时的修复。因此,CrashLoopBackOff 本身并不是一个问题,而是表明有一个错误在发生,阻止了 Pod 正确启动。"

CrashLoopBackOff之所以会导致Pod重新启动,是因为在Pod的配置策略中 restartPolicy 设置为 Always(默认)或 OnFailure。kubelet 读取此配置并重新启动 Pod 中的容器导致循环。实际上,这种行为非常有用,因为它为缺少的资源完成加载提供了一些时间,同时也为我们检测问题和调试提供了时间(后面会详细讲到)

这解释了 "CrashLoop" 的部分,但 "BackOff" 时间是什么呢?它表示Pod重启时间的延迟(10秒,20秒,40秒,...),最多延迟五分钟。当一个 Pod 的状态显示为 CrashLoopBackOff 时,这意味着它当前正在等待指定的时间,然后再次重新启动 Pod

如何检测到CrashLoopBackOff问题?

什么是 CrashLoopBackOff

通过使用 kubectl get pods 命令列出 Pods 时,发现了一个或多个处于这种状态的 Pods

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
flask-7996469c47-d7zl2 1/1       Running 1          77d
flask-7996469c47-tdr2n 1/1       Running 0          77d
nginx-5796d5bc7c-2jdr5 0/1       CrashLoopBackOff 2          1m
nginx-5796d5bc7c-xsl6p 0/1       CrashLoopBackOff 2          1m

从输出中,我们可以看到最后两个 Pods:

  1. 处于未就绪状态(0/1)。

  2. 它们的状态显示为 CrashLoopBackOff。

  3. 列 RESTARTS 显示一个或多个重新启动。

这三个信号指向了我们之前解释的情况:Pods 失败,然后被重新启动。在重新启动之间,存在一个优雅的等待期,这被表示为 CrashLoopBackOff。

我们也可以在 Pods 处于短暂的 Running 或 Failed 状态时找到它们

CrashLoopBackOff的常见原因

需要注意的是,CrashLoopBackOff 不是导致 Pod 崩溃的实际错误。它只是在状态列中显示正在发生的循环。所以我们需要找到影响容器的根本错误原因是什么

与实际应用程序相关的一些错误包括:

  1. 配置错误:比如配置文件中的拼写错误。

  2. 资源不可用:比如未挂载的持久卷(PersistentVolume)。

  3. 命令行参数错误:要么缺失,要么不正确。

  4. 错误和异常:可以是任何与您的应用程序非常具体的错误。

最后,与网络和权限相关的错误包括:

  1. 尝试绑定已存在的端口。

  2. 内存限制过低,因此容器会因内存不足而被终止。

  3. 存活探测错误未将 Pod 报告为Active状态。

  4. 只读文件系统,或者一般权限不足。

类似的等待状态还有 ImagePullBackOff,这是在无法拉取容器镜像时出现的状态。

再次强调,这只是可能导致问题的一些原因列表,还可能有其他原因。现在让我们看看如何深入挖掘并找到实际的原因。

CrashLoopBackOff 错误排查和修复

从上面内容中,我们了解到pod最终处于CrashLoopBackOff状态的原因有很多。那么,怎么知道具体什么原因影响的呢? 这里,我们来介绍一些常用的调试工具以及使用顺序。

一般的排查方式如下:

  1. 查看Pod信息。

  2. 检查Pod日志。

  3. 检查集群Event。

  4. 检查Deployment部署。

01.检查pod详细信息- kubectl description pod

kubectl description pod 命令提供特定pod及其容器的详细信息:

$ kubectl describe pod the-pod-name
Name: the-pod-name
Namespace: default
Priority: 0
…
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Error
…
Warning  BackOff 1m (x5 over 1m) kubelet, ip-10-0-9-132.us-east-2.compute.internal Back-off restarting failed container
…

从描述输出中,您可以提取以下信息:

  1. 当前 Pod 的状态为 "等待"。

  2. 等待状态的原因是 "CrashLoopBackOff"。

  3. 最后(或以前)的状态是 "终止"。

  4. 最后一次终止的原因是 "错误"。

这与我们一直在解释的循环行为相吻合。

通过使用 kubectl describe pod,您可以检查以下是否存在配置错误:

  • Pod 的定义。

  • contaniner信息。

  • contaniner拉取的镜像。

  • 为container分配的资源。

  • 错误或丢失的参数。

这有助于找出问题并进行进一步的调试。

…
Warning  BackOff                1m (x5 over 1m) kubelet, ip-10-0-9-132.us-east-2.compute.internal  Back-off restarting failed container
…

在最后几行,您会看到与该 Pod 关联的最后事件的列表,其中之一是 "Back-off restarting failed container"。这是与重新启动循环相关的事件。即使发生多次重新启动,应该只有一行来表示这个事件。

02. 检查日志 - 使用 kubectl logs

您可以查看 Pod 中所有容器的日志:

kubectl logs mypod --all-containers
Code language: JavaScript (javascript)

或者甚至是 Pod 中的一个容器的日志:

kubectl logs mypod -c mycontainer
Code language: JavaScript (javascript)

如果受影响的pod中有错误的值,日志可能会显示有用的信息。

03. 检查Event - 使用 kubectl get events

使用get events查看

kubectl get events
Code language: JavaScript (javascript)

或者,可以使用以下命令列出单个Pod的所有事件:

kubectl get events --field-selector involvedObject.name=mypod
Code language: JavaScript (javascript)

注意,这些信息也出现在描述pod输出的底部。

04. 检查Deploment -  kubectl describe deployment

如何如下命令进行查看

kubectl describe deployment mydeployment
Code language: JavaScript (javascript)

这是一个定义所需Pod状态的部署,它可能包含导致CrashLoopBackOff的错误配置。

如何在Prometheus中检测CrashLoopBackOff

如果您正在使用 Prometheus 进行云监控,以下是一些建议,可以帮助我们在发生 CrashLoopBackOff 时触发警报。

我们也可以通过使用以下表达式(需要 Kube State Metrics)来快速扫描集群中处于 CrashLoopBackOff 状态的容器:

kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"} == 1

或者,我们可以追踪发生在 Pod 中的重新启动次数,使用以下方式:

rate(kube_pod_container_status_restarts_total[5m]) > 0

注意:并非集群中的所有重新启动都与 CrashLoopBackOff 状态相关。

在每次 CrashLoopBackOff 期间之后应该会有一次重新启动(1),但也可能存在与 CrashLoopBackOff 无关的重新启动(2)。

之后,我们可以创建一个像下面这样的Prometheus告警规则,以便我们在任何Pod处于这种状态时接收通知:

- alert: RestartsAlertexpr: rate(kube_pod_container_status_restarts_total[5m]) > 0for: 10mlabels:severity: warningannotations:summary: Pod is being restarteddescription: Pod {{ $labels.pod }} in {{ $labels.namespace }} has a container {{ $labels.container }} which is being restarted

总结

在本文中,我们了解到CrashLoopBackOff本身并不是一个错误,而只是表示Pod中正在发生重试循环的通知。

我们看到了它经历的各个状态的描述,以及如何使用kubectl命令来跟踪它。

此外,我们还看到了可能导致这种状态的常见配置错误,以及您可以用来调试的工具。

最后,我们回顾了Prometheus如何帮助我们跟踪Pod中的CrashLoopBackOff事件。

尽管CrashLoopBackOff并不是一个很直观的错误信息展示,但它是一个有意义的功能,至少我们在这个期间进行具体问题的排查。

如果想进一步交流的话,欢迎加我 V:kubedata

我们宗旨:分享创造价值、交流促进成长,欢迎关注:云原生大数据技术荟

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Hive3.0新特性:Materialized Views 物化视图

Materialized Views 物化视图 在 Apache Hive 3.0 中引入了物化视图(Materialized Views)的支持,它们是预先计算并缓存了查询结果的数据结构,以提高查询性能和降低延迟。物化视图通过将查询的结果存储在物理表中来实现&#xff0…

武汉星起航:五对一服务体系,助力创业者成功进军跨境电商市场

随着全球化的深入发展和互联网的普及,跨境电商已成为越来越多国内创业者的首选。然而,跨境电商市场的复杂性和多变性使得许多新手创业者望而却步。在这样的背景下,武汉星起航电子商务有限公司以其独特的五对一服务体系,为创业者提…

为什么企业高管更偏爱中外合办硕士?人大女王金融硕士为你解析

在当今全球化的商业环境中,企业高管们对于自身的职业发展和知识更新提出了越来越高的要求。这其中,中外合办硕士项目因其独特的优势,逐渐受到了企业高管的青睐。那么,为什么企业高管更偏爱中外合办硕士呢?下面我们以人…

微软“叛变”了!本月或将推出5000亿新AI模型MAI-1,对抗谷歌和OpenAI | 最新快讯

(图片来源:钛媒体 App 编辑拍摄) 钛媒体 App 5 月 6 日消息,据 The information 报道,美国科技巨头微软公司(Microsoft)将推出一款参数达 5000 亿的全新 AI 模型产品,内部称为 MAI-1…

2024 cleanmymac有没有必要买呢,全反面分析

在使用mac时,小编遇到了运行内存不足、硬盘空间不足的情况。遇到这种情况,我们可以借助经典的电脑深度清理软件——CleanMyMac X,清理不常用的软件和系统垃圾,非常好用!不过,有许多网友发现CleanMyMac X有免…

【PyTorch单点知识】深入理解与应用转置卷积ConvTranspose2d模块

文章目录 0. 前言1. 转置卷积概述2. nn.ConvTranspose2d 模块详解2.1 主要参数2.2 属性与方法 3. 计算过程(重点)3.1 基本过程3.2 调整stride3.3 调整dilation3.4 调整padding3.5 调整output_padding 4. 应用实例5. 总结 0. 前言 按照国际惯例&#xff0…

Amazon Q Business现已正式上市!利用生成式人工智能协助提高员工生产力

在 2023 年度 AWS re:Invent 大会上,我们预览了 Amazon Q Business,这是一款基于生成式人工智能的助手,可以根据企业系统中的数据和信息回答问题、提供摘要、生成内容额安全地完成任务。 借助 Amazon Q Business,您可以部署安全、…

[性能优化工具类] 批量Mesh网格压缩

问题描述: 对于3D游戏工程来说,美术资源的存储几乎占据了绝大多数的空间,而对于一个3d 模型文件,MeshFilter(网格过滤器)负责存储物体的网格 以及贴图。依靠MeshRender(网格渲染器)跟据MeshFilter的信息去…

使用pandas的merge()和join()函数进行数据处理

目录 一、引言 二、pandas的merge()函数 基本用法 实战案例 三、pandas的join()函数 基本用法 实战案例 四、merge()与join()的比较与选择 使用场景: 灵活性: 选择建议: 五、进阶案例与代码 六、总结 一、引言 在数据分析和处理…

stripe支付

使用第一个示例 1、示例中的PRICE_ID需要去Stripe控制台->产品目录创建产品 1、 添加产品 2、点击查看创建的产品详情 4、这个API ID就是demo中的PRICE_ID 注意:需要注意的是,测试模式和生产模式中的 $stripeSecretKey 需要对应上。简而言之就是不能生…

AI实景自动无人直播软件:引领直播行业智能化革命;提升直播效果,无人直播软件助力智能讲解

随着科技的快速发展,AI实景自动无人直播软件正在引领直播行业迈向智能化革命。它通过智能讲解、一键开播和智能回复等功能,为商家提供了更高效、便捷的直播体验。此外,软件还支持手机拍摄真实场景或搭建虚拟场景,使直播画面更好看…

如何将数据导入python

Python导入数据的三种方式: 1、通过标准的Python库导入CSV文件 Python提供了一个标准的类库CSV文件。这个类库中的reader()函数用来导入CSV文件。当CSV文件被读入后,可以利用这些数据生成一个NumPy数组,用来训练算法模型。 from csv import…

如何使用dockerfile文件将项目打包成镜像

要根据Dockerfile文件来打包一个Docker镜像,你需要遵循以下步骤。这里假设你已经安装了Docker环境。 1. 准备Dockerfile 确保你的Dockerfile文件已经准备就绪,并且位于你希望构建上下文的目录中。Dockerfile是一个文本文件,包含了用户可以调…

软件系统工程建设全套资料(交付清单)

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

RTSP/Onvif安防监控系统EasyNVR级联视频上云系统EasyNVS报错“Login error”的原因排查与解决

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力,能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、W…

多行字符串水平相加

题目来源与2023河南省ccpc ls [ ........ ........ .0000000 .0.....0 .0.....0 .0.....0 .0.....0 .0.....0 .0000000 ........ , ........ ........ .......1 .......1 .......1 .......1 .......1 .......1 .......1 ........, ......... ......... .2222222. .......2. .…

扩展学习|一文读懂知识图谱

一、知识图谱的技术实现流程及相关应用 文献来源:曹倩,赵一鸣.知识图谱的技术实现流程及相关应用[J].情报理论与实践,2015, 38(12):127-132. (一)知识图谱的特征及功能 知识图谱是为了适应新的网络信息环境而产生的一种语义知识组织和服务的方…

什么是SSL?SSL安全证书一定要有吗?

什么是SSL证书? SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发&…

基于POSIX标准库的读者-写者问题的简单实现

文章目录 实验要求分析保证读写、写写互斥保证多个读者同时进行读操作 读者优先实例代码分析 写者优先示例代码分析 实验要求 创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制…

AI模型:windows本地运行下载安装ollama运行Google CodeGemma【自留记录】

AI模型:windows本地运行下载安装ollama运行Google CodeGemma【自留记录】 1、下载: 官网下载:https://ollama.com/download,很慢,原因不解释。 阿里云盘下载:https://www.alipan.com/s/jiwVVjc7eYb 提取码…