运维人的日常之一次 K8s 磁盘故障的惊魂夜
迷迷糊糊中拿起手机,眼皮还没完全睁开,就看到满屏的告警,Prometheus那边已经炸了——trade-service的错误率飙到了85%以上。没办法拿人钱财与人消灾,操练起来吧。
事件起因
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
23年3月的某个该死的一天,而且是该死的凌晨两点,值班人员忽然来电话,公司主力产品的某大型在线对战游戏部分玩家在拍卖行交易时,界面一直停在“提交中”,页面卡死,整个流程卡住了。”好!知道了~“,迷迷糊糊中拿起手机,眼皮还没完全睁开,就看到满屏的告警,Prometheus那边已经炸了——trade-service的错误率飙到了85%以上。没办法拿人钱财与人消灾,操练起来吧。
废话少说直接来干货!先声明这个K8s集群的版本是v1.24.8。

排查过程
先从集群角度看看都什么情况!
kubectl get nodes -o wide显示worker-node-7状态为DiskPressure该节点运行着交易服务的核心事务处理的Pod。
执行驱逐检查:
kubectl describe node worker-node-7 | grep -i evicted # 发现12个Pod因磁盘压力被驱逐
Elastic Stack日志分析发现连续错误:[FATAL] Transaction commit failed: Input/output error
再从问题节点上看看什么情况。
SSH登录worker-node-7随手就是一个技能:
df -hT /var/lib/kubelet # 显示使用率100%
嚯!~接下来必须看看是哪个或者哪些大文件导致的?:
ncdu -x /var/lib/docker/overlay2 # 发现某容器日志文件占用52GB
那我删?别忙,别动!老运维的直觉,感觉有埋伏.那我必须再一个技能
sudo smartctl -a /dev/nvme0n1 | grep -e 'Media_Wearout_Indicator' -e 'Reallocated_Sector_Ct'
Reallocated_Sector_Ct 0x0033 086 086 000 Pre-fail Always FAILING_NOW 142
我勒个去.迷糊不?子母雷呀!磁盘有142个坏道。
这时候不能处理奥!这时候就想起了IT运维技术圈的博主老杨对我的谆谆教诲:“不要看到一个毛病就下手,一定要尽量的查,全查明白了,然后再反馈,然后再按照领导的决定去执行”记得前一阵子刚升级了k8s集群版本,咋就这么巧出了问题呢?我再仔细摸一下集群的配置.那边总监已经开始在群里各种哀嚎了.不过一定要稳住,稳住!
我再确认一下集群的配置:
ps aux | grep kubelet | grep -o 'eviction-hard=.*' # 输出'imagefs.available<10%,nodefs.available<5%'第三颗雷被我找到了.查了一下K8s v1.24.8的新特性,默认是禁用SMART的journalctl -u kubelet | grep 'eviction_manager'显示日志轮转失效警告
到这可以做阶段总结了:
硬件老化失效:NVMe SSD出现严重坏道,I/O故障直接影响服务。K8s存储感知缺失:集群未启用本地存储容量隔离特性,无法及时预警磁盘异常。资源限额与日志治理缺陷:Pod未设定存储限额,日志文件无轮转,导致磁盘空间被单一容器异常占用。行了,该总监上场了,把自己看到的和认为合理的处理办法告诉它,得到了“汪汪“的回复,并且给出了“汪汪”的建议,以及“汪汪”的指导后,开始操作。
一顿反摇拳
干掉worker-node-7节点,但一定要优雅。
标记节点不可调度:
kubectl taint nodes worker-node-7 diskfailure=true:NoSchedule
驱逐Pod:
kubectl drain worker-node-7 --ignore-daemonsets --grace-period=300
临时用badblocks和e2fsck标记坏块,强行让文件系统跳过这些坑bash badblocks -sv /dev/nvme0n1 # 标记坏块 e2fsck -c /dev/nvme0n1 # 强制文件系统跳过坏道。
日志全清空:
truncate -s 0 /var/lib/docker/containers/*/*-json.log
直接用ArgoCD把trade-service重新部署了一遍。
使用ArgoCD触发自动重部署:
argocd app actions run trade-service --kind Rollout --action restart
数据库那边也没敢大意,特地跑了个一致性校验:
kubectl exec trade-db-0 -- pg_checkconsistency -v
等到凌晨四点半,监控大屏上的交易成功率终于回升,玩家投诉也慢慢消停了。第二天直接休了一天!~
复盘
复盘会上没什么好撕的,根因就上面那些!做了下面的几个方向的改进。
写了个磁盘检查脚本(罗列一下大概意思,不喜勿喷)disk_health_monitor.sh:
#!/bin/bash# 设备自动发现(兼容NVMe/SATA)DEVICES=$(lsblk -d -o NAME,TYPE | grep disk | awk '{print "/dev/"$1}')ALERT_FLAG=0for DEV in$DEVICES; do# SMART健康检查(带重试机制)for i in {1..3}; do SMART_REPORT=$(smartctl -H $DEV 2>/dev/null) [ $? -eq 0 ] && break || sleep 5done# 关键参数解析 REALLOC=$(smartctl -A $DEV | grep 'Reallocated_Sector_Ct' | awk '{print $10}') WEAR_LEVEL=$(smartctl -A $DEV | grep 'Wear_Leveling_Count' | awk '{print $4}' | tr -d '%')# 多维度健康评估ifecho$SMART_REPORT | grep -q "FAILED"; then logger "[DISK CRITICAL] $DEV SMART failed!" ALERT_FLAG=1elif [ $REALLOC -gt 50 ]; then logger "[DISK WARNING] $DEV Realloc sectors: $REALLOC" ALERT_FLAG=1elif [ $WEAR_LEVEL -lt 10 ]; then logger "[DISK WARNING] $DEV Wear level: $WEAR_LEVEL%" ALERT_FLAG=1fidone# 联动K8s节点标记if [ $ALERT_FLAG -eq 1 ]; then NODE_NAME=$(hostname) kubectl label nodes $NODE_NAME disk-status=critical --overwrite curl -X POST -H "Content-Type: application/json" -d '{"text":"磁盘健康告警!"}'$WEBHOOK_URLfi
(1) 修改k8s集群配置
启用特性门控(/etc/kubernetes/kubelet.conf):
featureGates: LocalStorageCapacityIsolation:true
部署存储限额策略:
apiVersion:scheduling.k8s.io/v1kind:PriorityClassmetadata: name:high-storagevalue:1000000ephemeral-storage-limit:5Gi # 每个Pod限制5GB临时存储
(2) 日志生态系统重构
部署Loki+Promtail替代Docker原生日志:
helm upgrade --install loki grafana/loki-stack --set promtail.enabled=true
添加日志自动清理CronJob:
apiVersion:batch/v1kind:CronJobspec:schedule:"0 */4 * * *"jobTemplate: spec: containers: -name:log-cleaner image:alpine:3.14 command: ["find", "/var/log/containers", "-size +500M", "-delete"]
最终状态
后续研发通过Redis事务补偿机制自动修复2,317笔中断交易。叉会腰,这次可给我牛批坏了!
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
99 元小米蓝牙遥控器 2 Pro 发售:兼容小米和 REDMI 智能电视 / 盒子,支持手机 NFC 一触即投
小米蓝牙遥控器2 Pro现货开售:99元升级款,完美适配小米红米智能电视与盒子,新增NFC一触投屏功能 小米官方近期正式推出了全新配件——小米蓝牙遥控器2 Pro(银灰色版本),现已全面上市销售。这款遥控器专为小米及Redmi品牌的智能电视、电视盒子用户设计,官方售价99元,用户可通过小米有品商城直
型号命名打破常规:三星神秘耳机 Able 曝光,预估为助听类设备
型号命名打破常规:三星神秘耳机 Able 曝光,预估为助监听设备 科技圈总是不乏惊喜。就在最近,Android Authority 在4月3日的一篇博文中,揭示了三星一款代号为“Able”的神秘耳机踪迹。消息一出,立刻引发了业内人士的广泛猜测。这款耳机的型号为SM-U600,配套电池型号为EB-BU
创维“G27 SE”27 英寸显示器发售:1080P 144Hz,549 元
创维“G27 SE”显示器明日首销:549元1080P 144Hz值得买吗?深度解析 寻找高性价比入门高刷新率显示器的朋友们请注意,创维最新推出的“G27 SE”27英寸电竞显示器即将于明日0点京东首发。其核心亮点在于1080P高清分辨率与144Hz高刷新率的组合,首发价仅为549元,为预算有限的玩
史诗升级!小米18全系标配2亿像素长焦
小米18系列曝光深度解读:全系升级2亿潜望镜头,影像与芯片实力全面突破 近日,知名科技博主“智慧皮卡丘”持续释放了关于小米下一代数字旗舰——小米18系列的详细配置信息,引起行业内外的广泛关注。其中最引人瞩目的提升,无疑在于其影像系统的全方位革新。 根据最新爆料,小米18系列将实现全系机型标配2亿像素
红米旗舰能否顶住涨价压力!REDMI K90至尊版前瞻
2026上半年手机市场观察:成本压力下的配置博弈 当前智能手机市场正面临关键转折点。由于内存等核心元器件价格持续上涨,手机制造成本显著提升,这直接压缩了各厂商的定价空间与策略灵活性。近期,Redmi旗下多款机型已经率先调整售价,而备受期待的Redmi K90至尊版预计将在四月正式发布,同样难以摆脱行
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

