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)版本控制不同:
    内核模块通常有版本控制,在加载时会检查模块的版本是否与内核兼容

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值