searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

multus-cni 开源软件导致网卡丢失原因分析

2023-09-26 03:49:16
25
0

背景知识梳理

1. multus 原理图如下

 

00-multus-cni效果图.jpg

    2. k8s系统和multus-cni 的交互过程:

kubelet与cni可执行二进制文件的调用关系.jpg

排查过程梳理

 

一. 怀疑是不是multus-cni的配置文件不完整,导致启动时,kubelet 读取multus-cni 配置文件不完整,直接跳过执行multus,直接执行其他cni 插件,导致多网卡没有创建成功。

复现思路:

       首先修改启动脚本把配置文件只在multus-cni 启动时只刷一次,修改为无时无刻都在刷新,保持一直刷新,然后反复创建pod。这频率应该比线上应该要频繁的多,但是没复现网卡丢失。

 

二. 没有其他办法,看日志,分析问题

  1. 打开multus 的debug 日志,观察multus 的工作过程。日志等级设置debug, 输出日志到文件

 2. 看到日志中,是读取了某个配置文件后,然后才能获取pod 信息

 3.分析这个配置文件, 这个配置文件是给multus 调用k8s-api 使用的

 4. 查看源码,发现在获取pod 信息失败,直接返回,后面的流程不再走了。那后面其他网卡信息肯定加载不成功,并且pod 还能正常启动。

 5. 复现问题,模拟k8s-client 获取不到pod 信息,果然网卡丢失,并且pod 成功启动。

6. 通常这种应该有重试,获取停止pod 启动流程。看最新版本的multus代码。发现确实最新的版本在获取pod 信息时,加了重试,并且阻断pod 启动流程。

7. 升级multus 到最新 稳定版,观察现象。发现在最新版,获取不到pod信息,multus 会重试,并且如果最终不成功,pod 一直启动不起来。

 

总结

1. 3.4 版本的multus 在网络抖动时,在multus  cni 调用k8s api 获取pod 信息,如果一次失败,将跳过,不再读取pod 信息,配置多网卡,直接创建pod。
2. 3.6 后的版本的增加了重试(retry 10 times with 0.5 sec interval)。并且如果一直读取不到pod 信息,pod 一直不启动。  

 

解决办法:


1. 升级multus 到最新稳定版。

0条评论
0 / 1000
一个正经的博主
2文章数
0粉丝数
一个正经的博主
2 文章 | 0 粉丝