阅读k8s源码也有一小段时间了,从最开始的一脸懵逼到现在的几乎轻车熟路,也算是有一点小小的感悟,记录一下,希望能对看到这篇博文的同学有点帮助。
- 《kubernetes权威指南》这本书内容还算不错,在阅读源码前可以先快速过滤下对应章节,熟悉一下源码的基础结构和关键概念。但这本书有一个缺陷就是,对关键的代码分析没有一个很清晰的图表或者介绍将要讲的内容串联起来,所以实际上你可能需要阅读一点源码后才能明白书上讲的是什么。还有一点,kubernetes当前处于一个快速迭代的过程中,书中的讲解的内容已经落后了几个版本了。
- k8s源码中毫不吝啬对go routine的使用。一个go routine只完成一件事情,不同go routine之间使用channel交互。
- 阅读源码的时候使用思维导图记录下函数的调用关系会很有帮助,原因如上,使用效果如下:
- 有目的的去阅读源码效果会更好。k8s为了可扩展性、API兼容性等,代码中有非常多的处理逻辑。如果是针对某个特定的问题,直接去查找对应的源码的话,应该也能有很高的效率。
- 请开启代码折行,k8s有些地方一行代码中就隐藏启动了数个go routine,如果因为编辑器的原因没有注意到被hide的
Run()
话,那有些东西真的就是死活都找不到了:)。 - k8s用到了大量的第三方开源库,小心别陷进去。