源码准备阶段主要介绍k8s源码的获取与本地golang编译环境配置等;测试环境搭建是介绍如何准备一个k8s环境,用于后续组件的代码测试。测试环境可以在大体学习完一个组件源码后进行,用于验证自己在看源码过程中的一些想法和疑惑。单节点还是多节点大家可以自己灵活决定。
看k8s源码的这些日子里遇到过不少困难,前前后后掉过不少坑,有些经验分享给大家:
- 语言基本功不扎实不要开始刷k8s,脚踏实地,从小项目开始练手,至少一两千行的小型开源项目能够完全看懂之后再尝试看k8s,不然会受打击的,k8s不是一个入门级项目,也不是用来入门编程语言的项目。
- 广度优先,大项目一般有很好的层级结构,从高层理解项目的逻辑,再一层一层深入。说个简单的例子,找到main函数后发现main只有10行代码,这时候看完十行代码你得认为自己看完了。确实已经看完了整个流程呀,只是没有深入main里面调用到的几个函数嘛,但是看函数名就知道这个函数的作用了,不知道实现而已。ok,这就是第一遍;然后深入下一层;再举个例子,看调度器的时候第一遍过源码不跟到具体的调度算法,深度优先就陷进去了。第一次应该看整体框架逻辑,找到调用预选、优选代码的入口,知道这个函数完成整个预选过程,就往下继续走。这样一遍过完后心里就有调度器的架子了。然后深入预选逻辑,再看优选逻辑。接着可以看具体的实现算法,可以看调度算法是怎么注册的,怎么初始化的。如果你一开始纠结于调度器如何初始化,可能会很痛苦。广度优先,好好体会。
- 遇到问题先思考,尤其语言层面的问题要能够自己通过网上资料解决。不愿意静下心多思考是肯定看不完k8s的。假如k8s换成C语言实现,涉及到的语言层面的技巧就变了,但是k8s要解决的问题还是一样的,还是一样的思想,一样的流程,这些语言无关的技巧才是k8s特有的,我觉得这才是重点关注的地方。而类似无缓存channel和有缓存channel区别这类问题,配置文件怎么生效这类问题,可以说都和k8s本身无关。
- 把学到知识,提升技能作为目的;把看完源码作为结果。一味追求速度很快就会发现看不下去了,身心疲惫。