Kube-OVN源码解析 | pod IP地址管理

Kube-OVN源码解析 | pod IP地址管理_第1张图片

Kube-OVN源码解析 | pod IP地址管理_第2张图片

作者介绍:Kube-OVN社区贡献者 Mr.Li  

作者说:上文“kube-ovn源码解析(一)kube-ovn-controller”中我们提到kube-ovn-controller组件有一个重要的功能是负责管理pod的IP地址分配、回收,本文就主要介绍下这部分逻辑。

简单来说,就是用户创建pod的时候会显式或隐式指明这个pod需要使用哪个网络(subnet),kube-ovn-controller通过list-watch机制获取到pod add事件,然后取出相关信息为pod分配IP/mac。当pod删除的时候,获取pod del事件释放对应IP/mac。

当然kube-ovn-controller不仅仅是为pod分配IP而已,也会为pod网卡创建对应的ovn port、路由等信息,我们在后续的代码走读中也会看到。


 Controller相关流程 

pod事件list-watch

controller初始化的时候会初始化pod事件的监听者,同时初始化事件队列。当有pod事件如add、update、delete事件触发时,会将pod信息入队到事件队列中,后续由controller启动的worker从队列中取出事件处理。

Kube-OVN源码解析 | pod IP地址管理_第3张图片

Kube-OVN源码解析 | pod IP地址管理_第4张图片

Kube-OVN源码解析 | pod IP地址管理_第5张图片

worker启动

Kube-OVN源码解析 | pod IP地址管理_第6张图片

worker处理pod add事件

Kube-OVN源码解析 | pod IP地址管理_第7张图片

handleAddPod:实际的处理函数

Kube-OVN源码解析 | pod IP地址管理_第8张图片

关键函数1:getPodKubeovnNets

Kube-OVN源码解析 | pod IP地址管理_第9张图片

getPodAttachmentNet函数根据2个annotation获取pod的所有网络信息,分别是"v1.multus-cni.io/default-network"指定默认主网卡的网络,"k8s.v1.cni.cncf.io/networks"指定pod使用的其他副网卡网络。

Kube-OVN源码解析 | pod IP地址管理_第10张图片

Kube-OVN源码解析 | pod IP地址管理_第11张图片

Kube-OVN源码解析 | pod IP地址管理_第12张图片

Kube-OVN源码解析 | pod IP地址管理_第13张图片

继续返回handleAddPod处理,从上文我们可以知道podNets是个数组,保存了pod所有网卡对应的网络信息,

Kube-OVN源码解析 | pod IP地址管理_第14张图片

Kube-OVN源码解析 | pod IP地址管理_第15张图片

Kube-OVN源码解析 | pod IP地址管理_第16张图片

Kube-OVN源码解析 | pod IP地址管理_第17张图片

Kube-OVN源码解析系列由社区成员倾情奉献

手把手教你征服Kube-OVN

下期:我们讲  “ pod 网卡管理(CNI插件)”  

敬请期待!

加小助手VX号(KubeOVN)进入Kube-OVN 交流群!

你可能感兴趣的:(Kube-OVN源码解析,tcp/ip,网络协议,网络,云原生,容器)