news 2026/5/7 21:00:59

Sealos部署K8s集群后Pod全NotReady?别慌,先检查containerd服务状态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sealos部署K8s集群后Pod全NotReady?别慌,先检查containerd服务状态

Kubernetes集群Pod全NotReady故障排查:从日志分析到服务恢复实战

凌晨三点,运维工程师小李的钉钉突然炸出一连串报警——刚用Sealos部署的K8s生产环境所有节点集体罢工,监控大屏上刺眼的NotReady状态像多米诺骨牌般蔓延。这种场景对刚接触容器编排的新手而言无异于噩梦开局,但事实上,90%的类似故障都能通过系统化的日志分析找到突破口。

1. 故障现象速诊:NotReady背后的信号链

kubectl get nodes返回清一色的NotReady状态时,新手常会陷入两种极端:要么盲目重启整个集群,要么在搜索引擎里机械地尝试各种解决方案。专业排障的第一步是建立症状与系统的映射关系

# 查看节点基础状态(重点关注Conditions字段) kubectl describe nodes | grep -A 10 "Conditions:"

典型输出中需要警惕的信号包括:

  • NetworkUnavailable=true(网络插件异常)
  • MemoryPressure/DiskPressure=true(资源不足)
  • KubeletNotReady(节点代理服务异常)

注意:NotReady是表象而非根因,就像发烧是症状而非疾病本身。直接跳转到解决方案而跳过诊断环节,是故障复发的温床。

2. 日志深潜:从kubelet到containerd的调用链追踪

现代容器编排系统的精妙之处在于其分层日志体系,就像剥洋葱般逐层暴露问题本质。以下是关键日志采集点及其解读方法:

2.1 kubelet日志中的黄金线索

# 实时追踪kubelet日志(-u指定服务单元) journalctl -u kubelet -f --no-pager | grep -E 'error|fail|not ready'

当看到类似Container runtime network not readycni plugin not initialized的报错时,说明故障已定位到容器运行时层。这两个错误的组合出现通常意味着:

  1. 网络插件未就绪:CNI配置缺失或插件崩溃
  2. 容器运行时异常:containerd/docker服务无响应
  3. 组件通信故障:kubelet与CRI接口握手失败

2.2 containerd服务状态检查

容器运行时如同K8s的"心脏",其状态直接影响整个集群的"供血"能力。快速诊断命令包括:

# 检查服务活跃状态 systemctl is-active containerd # 查看详细服务日志(重点关注最近5分钟) journalctl -u containerd -S "5 minutes ago" --no-pager

常见异常模式对照表:

症状可能原因验证命令
服务未运行启动失败或崩溃systemctl status containerd
套接字无响应文件权限问题ls -l /run/containerd/containerd.sock
镜像挂载失败存储驱动异常dmesg | grep overlay
CRI接口超时资源不足free -h; df -h

3. 精准打击:containerd服务重启的艺术

当确认问题根源在容器运行时层时,systemctl restart containerd看似简单的操作背后藏着多个需要关注的细节:

3.1 安全重启操作指南

# 优雅重启流程(避免正在运行的容器被强制终止) sudo systemctl stop kubelet sudo systemctl restart containerd sudo systemctl start kubelet # 验证容器运行时健康状态 sudo ctr version

3.2 重启后的连锁反应处理

容器运行时重启会触发一系列连锁反应,需要按顺序验证:

  1. CNI网络重建:检查Calico/Flannel等网络组件的Pod状态
    kubectl -n kube-system get pods -l tier=node
  2. Pod恢复进度:观察原有工作负载的重调度
    watch -n 1 'kubectl get pods -A -o wide'
  3. 节点心跳恢复:等待节点状态更新周期(默认1分钟)

经验提示:生产环境中建议在维护窗口期操作,避免批量Pod重建导致服务中断

4. 防御性运维:构建故障预防体系

解决当次故障只是开始,构建防御体系才能避免重蹈覆辙。以下是三个关键防护层:

4.1 服务存活监控

# 创建containerd服务监控探针(Prometheus格式) metrics_path: /metrics static_configs: - targets: ['localhost:9090'] labels: service: 'containerd'

4.2 自动化恢复脚本

#!/bin/bash # 自动检测并恢复containerd异常 if ! systemctl is-active --quiet containerd; then logger "Containerd service down, attempting restart" systemctl restart containerd sleep 5 if systemctl is-active --quiet containerd; then logger "Containerd restarted successfully" else logger "Containerd restart failed, escalating" exit 1 fi fi

4.3 根因分析检查清单

每次故障后应完成以下检查项:

  • [ ] 系统日志归档(journalctl --vacuum-size=100M
  • [ ] 容器运行时版本检查(containerd --version
  • [ ] 内核参数审计(sysctl -a | grep container
  • [ ] 资源水位评估(内存/IOPS/CPU压力)

在笔者经历过的数十次NotReady事件中,有次发现某节点containerd每隔6小时就崩溃一次。最终定位到是某监控组件的内存泄漏逐渐挤占容器运行时资源。这提醒我们:简单重启治标,根因分析治本

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 21:00:55

VideoDownloadHelper:高性能视频URL嗅探与解析技术架构解析

VideoDownloadHelper:高性能视频URL嗅探与解析技术架构解析 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper VideoDownloadHelper是…

作者头像 李华
网站建设 2026/5/7 21:00:41

手把手教你用Proteus+Arduino仿真DHT11湿度控制(附完整源码与避坑指南)

从零搭建Arduino与Proteus联调环境:DHT11湿度控制仿真全攻略 当第一次接触Arduino与Proteus联调时,多数人会遇到软件配置复杂、虚拟串口通信失败、库文件加载错误等问题。本文将用最直观的方式,带你一步步完成从环境搭建到仿真运行的全过程&a…

作者头像 李华
网站建设 2026/5/7 21:00:29

Arm Cortex-A78AE调试寄存器架构与汽车电子应用

1. Cortex-A78AE调试寄存器架构概述 在Arm Cortex-A78AE处理器中,调试寄存器构成了嵌入式跟踪宏单元(ETMv4)的控制接口。这些寄存器通过外部调试接口访问,主要分为三大功能类别: 计数器管理寄存器 :包括TRCCNTRLDVRn&#xff08…

作者头像 李华
网站建设 2026/5/7 20:59:28

从控制台体验 Taotoken API 调用的低延迟与高稳定性

从控制台体验 Taotoken API 调用的低延迟与高稳定性 对于开发者而言,选择一个大模型 API 服务平台时,服务的响应速度和稳定性是直接影响开发体验与最终应用效果的关键因素。Taotoken 作为一个大模型售卖与聚合分发平台,其控制台内置的在线调…

作者头像 李华
网站建设 2026/5/7 20:55:30

HDQ/1-Wire接口技术解析与嵌入式应用

1. HDQ/1-Wire接口技术深度解析在嵌入式系统开发中,HDQ/1-Wire接口因其独特的单线通信特性,成为连接低速外设的经济高效解决方案。这种接口仅需一根数据线(加上地线)即可实现双向数据传输,大幅简化了硬件设计。其典型应…

作者头像 李华