首页 > 其他分享 >临时存储超限导致的Pod集体驱逐故障排查

临时存储超限导致的Pod集体驱逐故障排查

时间:2024-08-07 20:25:18浏览次数:15  
标签:驱逐 存储 临时 storage ephemeral 排查 Pod 超限

背景

        在某天的下午,我们突然收到告警,埋点服务的接口报大量502,持续了大约2分钟,然后就自动恢复了,于是便开始排查问题所在。

排查过程

        在上面的故障现象中,我们首先怀疑是微服务出现了问题,因此进行了以下排查:

        1.登录KubeSphere控制台后,我们发现埋点服务的所有Pod副本都是刚刚重新生成的,这意味着Pod副本集体挂了,为什么会集体挂掉呢?

        2.接着,通过查看K8s事件日志,我们发现这些Pod都是由于临时存储超限而被驱逐的,而且时间点非常接近。然而,我们已经配置了PDB和优雅停机机制,为什么这些措施没有生效呢?

        尽管我们已经找到了故障的原因,但仍需进一步分析以解决上述疑惑。请继续往下看。

问题分析结果

        经过一番分析和了解,我们终于找到答案,解决上述的困惑,具体如下:

为什么Pod副本几乎同时被驱逐?

因为程序会往Pod的/tmp目录写临时数据,由于密集产生临时文件导致临时存储(ephemeral-storage )使用超限,导致Pod被驱逐(Evicted)。

为什么PDB和优雅停机不生效?

在非自愿中断的情况下,例如节点硬件故障或由于资源压力导致 kubelet 驱逐 Pod,则不受 PDB 控制,所以才导致此次驱逐事件业务感知较大。我根据Pod驱逐是否遵循PDB和优雅停机的主要情况进行梳理,如下图

ephemeral storage知识点

        在 K8s 中,ephemeral storage 是指在 Pod 生命周期内可用的临时存储空间。这些存储空间在 Pod 被删除或重新调度时会被清空。ephemeral storage 包括以下几种类型的临时存储:

Container Writable Layer:容器可写层,用于存储容器中产生的临时文件、缓存等。

Log Storage:K8s 会将容器的标准输出和标准错误日志写入到节点上的日志文件中。这些日志文件也被视为 ephemeral storage 的一部分。

EmptyDir Volume:EmptyDir的默认存储类型为磁盘,属于ephemeral storage,但如果将EmptyDir的medium定义为Memory,则EmptyDir的大小将受Memory Limit限制,如下是官方的文档截图:

结语

        通过此次故障的排查和分析,不仅让我们深入了解Pod的驱逐场景,也让我们更加重视临时存储(ephemeral storage)的使用情况,并迅速补充了对Pod临时存储的监控。本次分享就到这里,谢谢!

 欢迎订阅我的公众号「SRE运维手记」,可扫下方二维码,或者微信搜“SRE运维手记”

e45dc07b6fd04114a9f5fe6f4772a886.jpeg

标签:驱逐,存储,临时,storage,ephemeral,排查,Pod,超限
From: https://blog.csdn.net/weixin_41350845/article/details/141000212

相关文章

  • 【JVM基础19】——实践-CPU飙高排查方案和思路?
    目录1-引言:2-⭐核心:2-1排查方案与思路3-小结:3-1如何排查CPU飙高问题?1-引言:CPU飙高指的是项目在运行过程中导致服务器的CPU内存占用较高。2-⭐核心:2-1排查方案与思路使用top命令查看占用CPU的情况top通过top命令查看后,可以查看是哪一个......
  • Ubuntu系统Redis无法启动的问题排查
    作者:逍遥Sean简介:一个主修Java的Web网站\游戏服务器后端开发者主页:https://blog.csdn.net/Ureliable觉得博主文章不错的话,可以三连支持一下~如有疑问和建议,请私信或评论留言!Redis在Ubuntu系统上无法启动1.检查Redis状态和日志2.检查配置文件3.查看Redis端口是......
  • Kubernetes Pod之间的通信
    Pod之间的通信可以通过以下几种方式实现:1.同一Pod内的容器通信:在同一个Pod内的容器可以通过localhost或者127.0.0.1进行通信,因为它们通过pause容器共享相同的网络命名空间和IP地址。2.Pod之间的通信:Pod之间的通信可以通过Service或者Endpoint来实现。Service是一个抽象的逻辑概......
  • Dzzoffice结合OnlyOffice 报错排查流程总结
    检测OnlyOffice服务是否安装成功首先访问OnlyOffice首页,如下图:出现上图仍旧不能说明你的OnlyOffice服务已经成功安装,我们需要启动OnlyOffice服务测试用例来检测,可以看到上图出现了两条命令,第一条命令是用来启动测试用例服务的,我们只需要在后台执行该命令即可,Win......
  • [POI2015] POD 题解
    前言题目链接:洛谷。题意简述长度为\(n\)的一串项链,每颗珠子是\(k\)种颜色之一。第\(i\)颗与第\(i-1,i+1\)颗珠子相邻,第\(n\)颗与第\(1\)颗也相邻。切两刀,把项链断成两条链。要求每种颜色的珠子只能出现在其中一条链中。求方案数量(保证至少存在一种),以及切成的两段......
  • 05、Pod网络
    4.1Pod网络在K8s集群中,多个节点上的Pod相互通信,要通过网络插件来完成,比如Calico网络插件。使用kubeadm初始化K8s集群时,有指定一个参数--pod-network-cidr=10.18.0.0/16它是用来定义Pod的网段。而我们在配置Calico的时候,同样也定义了一个CALICO_IPV4POOL_CIDR的参数,它的值同......
  • SpringBoot Session共享,配置不生效问题排查 → 你竟然在代码里下毒!
    开心一刻快8点了,街边卖油条的还没来,我只能给他打电话大哥在电话中说到:劳资卖了这么多年油条,从来都是自由自在,自从特么认识了你,居然让我有了上班的感觉!Session共享SpringBootsession共享配置,我相信你们都会,但出于负责的态度,我还是给你们演示一遍添加依赖<?xmlversio......
  • TELNET命令的使用技巧及其在网络故障排查中的作用
    TELNET命令的使用技巧及其在网络故障排查中的作用大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!TELNET是一种简单的网络协议和工具,用于远程访问计算机系统。在网络故障排查中,TELNET可以帮助我们验证网络连接、测试端口、诊断服务问题等。本文将探......
  • 生产(线上)问题排查思路
    目录题外话线上问题应急的原则1.首先第一时间恢复系统2.尽量保留现场和数据3.处理和决断要快速问题排查思路梳理1.首先确定接口2.前后端兵分两路排查2.1前端:2.1.1是否有代码变更,检查变更逻辑是否正确2.1.2字段是否用错2.1.3是否有缓存(应用缓存/cdn缓存)2.1.4是......
  • mysql 慢查询 常时间 执行 问题排查
    1、metadatalock导致大量线程卡住  步骤1:showfullprocesslist命令查看线程状态 步骤2:performance_schema.events_statements_current中的未提交事务 步骤3:   查询正在执行的事务SELECT*FROMinformation_schema.innodb_trx; inn......