理解和实现 CNI的尝试

一:CNI和集群核心功能的再理解

之前分析calico 网络时候,发现了知乎上有一位大神,通过代码实现了各种网络通信。后来就想通过实现该过程加深对基础框架的理解。
引用图片 说明cri
结合上图,对于在k8s环境拉起pod过程,有一个直观、深入的额理解;
①CRI的实现最终是通过OCI进行的;
②CRi会调用CSI、CNI接口;
③OCI 拉起sandpod过程其实就是对于pod 的网络、存储资源一个基础化过程,给后续pod拉起提供一个类似底座的功能;

二:CNI的实现过程

1:参考和环境准备

参考大神文章链接:https://zhuanlan.zhihu.com/p/450514389
部署集群的时候要去除网络插件,否则后续实现可能受影响。初始化部署集群以后集群和系统日志截图如下:
在这里插入图片描述在这里插入图片描述
节点notready,系统日志显示cni未初始化;

2:代码实现CNI过程

此过程需要加深对CNI功能、实现方式的理解(太复杂,此处略)。主要实现过程是:将CNI配置文件置于 /etc/cni/net.d/ 目录,将编译cnitool置于  /opt/cni/bin/目录,然后根据代码功能调试CNI功能。

插件和配置文件配置以后节点通信恢复;
podchuang
pod创建失败,需要查找日志分析具体原因
在这里插入图片描述在这里插入图片描述
根绝代码和日志,最后排查etcd没有获取到ippool,排查响应代码,在subnet获取时候掩码配置代码不支持随机位置配置;
Etcd 查询IPpool,到这一步ipam 获取到部分网络配置了,后续再部署pod,node5、node6上pod可分配地址;
在这里插入图片描述

问题解决以后pod 地址分配成功:
在这里插入图片描述

Pod互ping 失败;
在这里插入图片描述

3:路由失败分析

期待继续…

三:问题及总结

1:代码实现核心组件功能这个项目是一个很好的理解和实现容器通信功能的尝试,整个项目代码量对于几个开源项目做了一个简化;
2:实际实现中会碰到各种问题,因为大家的环境不同,代码中固化了很多东西,需要优化,最新版的实现过于复杂,我是在9c207a211b8bfb1c44879caf9eee03602a31c2a6这一单的基础上继续修改验证的;
3:提高自己的代码能力,代码不仅是阅读、理解功能的工具,也是一个实现的路径。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值