网站名称有哪些,淮安网站建设个人博客,深圳建网站哪个公司好,网站成本情况描述
接到反馈有一台虚拟机HA迁移了#xff0c;需要检查一下上面业务是否正常#xff0c;由于是K8S node节点#xff0c;正常情况下重启会自动恢复的#xff0c;不过抱着严谨的态度#xff0c;上去看了一眼。
问题#xff1a;发现docker运行正常#xff0c;但是业…情况描述
接到反馈有一台虚拟机HA迁移了需要检查一下上面业务是否正常由于是K8S node节点正常情况下重启会自动恢复的不过抱着严谨的态度上去看了一眼。
问题发现docker运行正常但是业务POD一直在exit重启
排查处理
1docker ps 都是正常启动的容器但是没看到业务容器
2docker 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版本控制不同内核模块通常有版本控制在加载时会检查模块的版本是否与内核兼容