准备工作
找个合适的ide
- 比如goland
下载k8s源码
项目地址
- https:///kubernetes/kubernetes
- 可以git下载,也可以下载zip包,还可以go get 下载
git clone https:///kubernetes/kubernetes.git本教程基于k8s 1.21 版本
k8s组件代码仓库地址(选择下载)
各个组件仓库地址
- k8s.io/api
- k8s.io/apiextensions-apiserver
- k8s.io/apimachinery
- k8s.io/apiserver
- k8s.io/cli-runtime
- k8s.io/client-go
- k8s.io/cloud-provider
- k8s.io/cluster-bootstrap
- k8s.io/code-generator
- k8s.io/component-base
- k8s.io/controller-manager
- k8s.io/cri-api
- k8s.io/csi-api
- k8s.io/csi-translation-lib
- k8s.io/kube-aggregator
- k8s.io/kube-controller-manager
- k8s.io/kube-proxy
- k8s.io/kube-scheduler
- k8s.io/kubectl
- k8s.io/kubelet
- k8s.io/legacy-cloud-providers
- k8s.io/metrics
- k8s.io/mount-utils
- k8s.io/pod-security-admission
- k8s.io/sample-apiserver
- k8s.io/sample-cli-plugin
- k8s.io/sample-controller
go get 下载路径 k8s.io/xxxx
- 举例 :go get -d k8s.io/kube-controller-manager
阅读源码的注意事项
先理解功能
- 首先理解某一项功能,带着功能去看源码事半功倍,在某些晦涩难懂的地方还可以根据功能的实现反推代码目的
换位思考,如果你实现怎么做
- 可以时长反问自己,如果是你来实现这里怎么做
假设某一块方法去掉,会有什么效果
- 遇到不好理解的方法或者模块时,思考为什么要加这个,去掉会有什么问题就可以更好的理解
多看架构图,多总结
















