当前位置: 首页 > news >正文

ipvlan: operation not supported 导致的POD不断重启

情况描述

接到反馈有一台虚拟机HA迁移了,需要检查一下上面业务是否正常,由于是K8S node节点,正常情况下重启会自动恢复的,不过抱着严谨的态度,上去看了一眼。

问题:发现docker运行正常,但是业务POD一直在exit重启

排查处理

1)docker ps 都是正常启动的容器,但是没看到业务容器

2)docker ps -a 看到业务容器不断在重启,多实例加负载均衡,不影响正常访问,进一步处理

3)由于容器不断重启,考虑从系统日志查看是否存在异常,检查messages发现如下报错

CNI failed to retrieve network namespace path: cannot find network namespace for the terminated container "xxxxxxx3e26c018ad5becxxxxxx05784747xxx0xxx23"
Error adding xxxxxxx-xxxx_xxxx-26672-deploy-856886c77-sfmj4/40993xxxx73c915ad0xxxx1b9exxxb46ad2xxx091xxx24b to network xxxx-ipvlan/xxxx_k8s_network: failed to create ipvlan: operation not supported

5)上述报错提示无法加载CNI,因为不支持 ipvlan: operation not supported ,考虑应该是无法加载ipvlan导致POD不断重启

6)搜索发现这报错是ipvlan模块未加载或者不支持,系统重启不应该影响到系统模块的,很奇怪

7)按搜索内容检查模块,发现确实没有,其他机器都是正常能返回ipvlan

lsmod |grep ipvlan 
modinfo ipvlan

8)尝试加载ipvlan,报错提示没有找到这个模块

modprobe ipvlan
modprobe: FATAL: Module ipvlan not found.

9)尝试去找这个模块的提供软件,发现已经安装了,但是就是没有

yum provides ipvlan 

解决办法

10)找领导帮忙分析,发现该主机存在多个内核版本的记录,某一个版本是存在这个模块的,当前内核版本没有,将模块的ko文件拷贝到当前内核对应目录过去,然后安装

insmod  /lib/modules/3.xx.x-xxxx.1.1.el7.x86_64/extra/ipvlan/ipvlan.ko

11)加载后,就能找到这个模块了,此时POD已经能正常启动,问题解决

总结分析

这个问题发生的根本原因是内核存在多个版本,升级不彻底,导致重启后内核模块缺失。

1)这个问题很容易定位到是模块缺失导致的,但是modprobe提示缺失这个模块需要怎么处理在此之前还不了解

2)这个案例实际已经通过对比找到差异,但是没有恢复的手段,不是单一文件拷贝就能恢复的

3)内核升级操作前,还是建议备份数据,然后尝试重启验证的,否则后期重启出现问题摸不着头脑

4)对于内核模块还是不了解,只知道查询,不记得安装和查看,这个需要加强(查看、安装、关联、相关文件、验证、哪些可用)

信息补充

处理这个问题,顺带加深了一下关于内核模块以及动态库的知识,补充如下:

Linux中的动态链接库.so文件和内核模块.ko文件都是用于在运行时动态加载的代码

内核模块主要用于在内核中添加或修改功能,而动态链接库用于在用户程序中添加或修改功能

内核模块与动态链接库的区别:

1)加载位置不同:.so文件是在用户空间加载的.ko文件是在内核空间加载的
2)加载方式不同:.so文件通常通过dlopen等函数在运行时动态加载内核模块可以通过insmod命令加载,或者在系统启动时作为内核启动参数指定
3)对依赖的处理不同:内核模块之间可能有依赖关系,必须先加载依赖的模块用户空间的.so文件可以通过动态链接器来解决依赖
4)编译方式不同:内核模块需要专门的内核编译环境用户空间的.so文件可以使用普通的编译器和链接器
5)版本控制不同:内核模块通常有版本控制,在加载时会检查模块的版本是否与内核兼容

http://www.lryc.cn/news/412024.html

相关文章:

  • 组蛋白乳酸化和RNA甲基化如何联动?请大数据把这个思路推给科研人
  • 操作文件-Path
  • RAC(Teamcenter )开发,Bom行解包和打包的方法
  • log4j2漏洞练习
  • OpenEuler安装部署教程
  • Canto - hackmyvm
  • 【数据结构进阶】手撕红黑树
  • 【C++从小白到大牛】类和对象
  • Kafka 为什么这么快的七大秘诀,涨知识了
  • 一文解决3D车道线检测:最新单目3D车道线检测综述
  • 稳中向好,今年新招6000人
  • 使用kettle开源工具进行跨库数据同步
  • Golang | Leetcode Golang题解之第307题区域和检索-数组可修改
  • Golang | Leetcode Golang题解之第301题删除无效的括号
  • 【Story】《程序员面试的“八股文”辩论:技术基础与实际能力的博弈》
  • 初步了解泛型
  • 【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据
  • C++推荐的oj网站
  • springmvc处理http请求的底层逻辑
  • 干货满满,从零到一:编程小白如何在大学成为编程大神?
  • 前端-如何通过docker打包Vue服务成镜像并在本地运行(本地可以通过http://localhost:8080/访问前端服务)
  • 零基础学习【Mybatis】这一篇就够了
  • Shell入门(保姆级教学)
  • 【JDK11和JDK8并行与切换】
  • vue大数据量列表渲染性能优化:虚拟滚动原理
  • 昇思25天学习打卡营第1天|快速入门
  • LinkedList 实现 LRU 缓存
  • ubuntu安装workon
  • (面试必看!)锁策略
  • RAGflow:开源AI框架的创新与应用