博客
关于我
Kubernetes故障排查与面试汇总
阅读量:792 次
发布时间:2023-01-29

本文共 1025 字,大约阅读时间需要 3 分钟。

k8s集群Pod一直处于terminating状态的排查方案

现象描述

在k8s集群中,存在Pod持续处于terminating状态的情况,或者Pod删除操作持续时间过长。此外,内核日志中会不断生成以下信息:

unregister_netdevice: waiting for XXX to become free. Usage count = 1

这个问题会严重影响集群的正常运行,需要及时解决。

diagnosable问题

经过分析和排查,发现这是一个与Linux内核相关的bug,具体表现在网络设备无法正确删除注册后的网络接口设备(Logical Interface),导致Pod删除操作卡顿或失败。

排查步骤

  • 确认问题环境

    确认正在运行的k8s集群版本是否存在已知的修复问题。可以通过查看k8s version和检查有关的GitHub问题讨论来确认。

  • 查看相关内核信息

    关注内核日志中的具体错误信息,尤其是涉及unregister_netdevicewaiting for XXX to become free的错误。这会帮助确定具体的设备类型和影响范围。

  • 发现潜在的解决方案

    查阅相关的GitHub讨论和社区文档,可以找到针对这个问题的具体修复方法。通常涉及以下几个方面:

    • 配置kubelet参数
      调整kubelet的配置文件,添加或修改相关的参数以打破死锁。
    • 重启相关网络服务
      重新启动NetworkManagerNetworkScript等网络管理服务,因为它们可能与内核网络层存在不兼容的情况。
    • 移除或修复多余网络设备
      移除不必要的网络设备或修复已经注销的网络接口。
  • 验证解决方案

    在修复完成后,需要验证是否解决了Pod终止问题。这可以通过以下方式实现:

    • 重启Pod节点,观察Pod终止情况的改变。
    • 使用journalctl查看相关内核日志,确认错误信息是否减少或消失。
    • 检查网络设备(RDMA)的健康状态,确保没有残留的未处理设备。
  • Finally建议

    在应用修复方案后,建议定期监控k8s集群的状态,特别是Pod终止相关的日志和网络设备的处理情况。这样可以避免类似问题的再次出现。同时,建议关注Linux内核最新版本的更新,及时修复已知的bug。

    这个问题涉及到内核与容器运行环境的复杂互动,需要结合实际环境进行综合分析和调整。通过上述步骤,应该能够有效解决Pod持续处于terminating状态的问题,确保集群的稳定运行。

    转载地址:http://aqryk.baihongyu.com/

    你可能感兴趣的文章
    laravel 之 Eloquent 模型修改器和序列化
    查看>>
    Laravel 使用 - artisan schedule使用
    查看>>
    Laravel 使用rdkafka
    查看>>
    Laravel 多环境配置
    查看>>
    laravel 学习之第一章
    查看>>
    laravel 学习之第二章
    查看>>
    Laravel 安装上传代码不完整的解决方法
    查看>>
    laravel 安装添加多站点
    查看>>
    Laravel 开源项目 『 糖果盒子 - Web 开发者的书签导航 』
    查看>>
    Laravel 模型
    查看>>
    Laravel 深入理解路由和URL生成
    查看>>
    laravel 生命周期与框架精髓
    查看>>
    laravel 表单验证
    查看>>
    laravel 调试sql
    查看>>
    laravel 路由缓存
    查看>>
    Laravel 连接(Join)
    查看>>
    laravel 通过令牌获取用户ID
    查看>>
    laravel 部署 file_put_contents failed to open stream: No such file or directory
    查看>>
    laravel 验证机制validation
    查看>>
    Laravel5 容器自动加载依赖的原理
    查看>>