源码解析
概述
参考:
- GitHub 项目,kubernetes/kubernetes
- GitHub 项目,kubernetes/design-proposals-archive(K8S 早期设计方案)
- GitHub 项目,kubernetes/enhancements(K8S 当前设计方案)
- 田飞雨博客-这位大佬阅读了大部分 k8s 代码,并在博客中写了笔记
kubernetes 源码目录结构
更新日期:2022 年 2 月 23 日 Kubernetes 的源码目录随着更新迭代,也在不断变化中
$ tree -L 1 -p
.
├── [-rwxrwxrwx] BUILD.bazel
├── [drwxrwxrwx] CHANGELOG
├── [-rwxrwxrwx] CHANGELOG.md
├── [-rwxrwxrwx] CONTRIBUTING.md
├── [-rwxrwxrwx] LICENSE
├── [drwxrwxrwx] LICENSES
├── [-rwxrwxrwx] Makefile
├── [-rwxrwxrwx] Makefile.generated_files
├── [-rwxrwxrwx] OWNERS
├── [-rwxrwxrwx] OWNERS_ALIASES
├── [-rwxrwxrwx] README.md
├── [-rwxrwxrwx] SECURITY_CONTACTS
├── [-rwxrwxrwx] SUPPORT.md
├── [-rwxrwxrwx] WORKSPACE
├── [drwxrwxrwx] api
├── [drwxrwxrwx] build
├── [drwxrwxrwx] cluster
├── [drwxrwxrwx] cmd
├── [-rwxrwxrwx] code-of-conduct.md
├── [drwxrwxrwx] docs
├── [-rwxrwxrwx] go.mod
├── [-rwxrwxrwx] go.sum
├── [drwxrwxrwx] hack
├── [drwxrwxrwx] logo
├── [drwxrwxrwx] pkg
├── [drwxrwxrwx] plugin
├── [drwxrwxrwx] staging
├── [drwxrwxrwx] test
├── [drwxrwxrwx] third_party
├── [drwxrwxrwx] translations
└── [drwxrwxrwx] vendor
Kubernetes 组件的代码运行逻辑集中在 cmd、pkg 这几个目录内,cmd 是通常都是程序运行的入口,然后调用 pkg 里的代码
cmd
$ tree -L 1 -p cmd
cmd
├── [-rwxrwxrwx] BUILD
├── [-rwxrwxrwx] OWNERS
├── [drwxrwxrwx] clicheck
├── [drwxrwxrwx] cloud-controller-manager
├── [drwxrwxrwx] controller-manager
├── [drwxrwxrwx] dependencycheck
├── [drwxrwxrwx] gendocs
├── [drwxrwxrwx] genkubedocs
├── [drwxrwxrwx] genman
├── [drwxrwxrwx] genswaggertypedocs
├── [drwxrwxrwx] genutils
├── [drwxrwxrwx] genyaml
├── [drwxrwxrwx] importverifier
├── [drwxrwxrwx] kube-apiserver
├── [drwxrwxrwx] kube-controller-manager
├── [drwxrwxrwx] kube-proxy
├── [drwxrwxrwx] kube-scheduler
├── [drwxrwxrwx] kubeadm
├── [drwxrwxrwx] kubectl
├── [drwxrwxrwx] kubelet
├── [drwxrwxrwx] kubemark
├── [drwxrwxrwx] linkcheck
├── [drwxrwxrwx] preferredimports
└── [drwxrwxrwx] verifydependencies
pkg
$ tree -L 1 -p pkg
pkg
├── [-rwxrwxrwx] BUILD
├── [-rwxrwxrwx] OWNERS
├── [drwxrwxrwx] api
├── [drwxrwxrwx] apis
├── [drwxrwxrwx] auth
├── [drwxrwxrwx] capabilities
├── [drwxrwxrwx] client
├── [drwxrwxrwx] cloudprovider
├── [drwxrwxrwx] controller
├── [drwxrwxrwx] credentialprovider
├── [drwxrwxrwx] features
├── [drwxrwxrwx] fieldpath
├── [drwxrwxrwx] generated
├── [drwxrwxrwx] kubeapiserver
├── [drwxrwxrwx] kubectl
├── [drwxrwxrwx] kubelet
├── [drwxrwxrwx] kubemark
├── [drwxrwxrwx] master
├── [drwxrwxrwx] printers
├── [drwxrwxrwx] probe
├── [drwxrwxrwx] proxy
├── [drwxrwxrwx] quota
├── [drwxrwxrwx] registry
├── [drwxrwxrwx] routes
├── [drwxrwxrwx] scheduler
├── [drwxrwxrwx] security
├── [drwxrwxrwx] securitycontext
├── [drwxrwxrwx] serviceaccount
├── [drwxrwxrwx] ssh
├── [drwxrwxrwx] util
├── [drwxrwxrwx] volume
├── [drwxrwxrwx] watch
└── [drwxrwxrwx] windows
staging(分级、阶段)
参考:
背景
曾经的 kubernetes 源码都在一个顶级仓库中 ,即 k8s.io/kubernetes(也就是 Github 的<https://github.com/kubernetes/kubernetes)。但是随着项目的发展,功能越来越多,代码量也就越来越大,并且** Kubernetes 的各种包和规范被越来越多的项目引用**,为了避免交叉依赖,所以,从 1.4 版本开始,就出现了 staging 目录,并把这些经常被引用的库单独提取出来,放在一个顶层仓库中,而 staging 则是这些顶层仓库的来源,会定期将这里的代码发布到对应的顶层仓库中。 在 1.4 版本时,该目录仅仅包含了一个 client-go 的代码,并且把 client-go 移出 kubernetes 仓库,成立了一个单独的仓库(https://github.com/kubernetes/client-go),并定期同步代码。随后,就发展成现在这样了~~~~
详解
staging 包含各种 kubernetes 包的代码,并定期将其发布到对应的顶级 k8s.io 库中。
比如 controller-manager 功能的代码,就会从这里同步到 k8s.io/controller-manager 仓库中、kubelet 功能的代码会从这里同步到 k8s.io/kubelet 仓库中,以此类推,随着时间的发展,该目录下的内容将会越来越多,并且 kubernetes 的代码也将会被拆分成各个顶级仓库。
所谓 k8s.io/XXXX,其实就是 https://github.com/kubernetes/XXXX,也就是 github 的 kubernetes 项目下的顶层仓库。
这些顶级仓库包括(随着时间的发展,还会变化):
[k8s.io/api](https://github.com/kubernetes/api)[k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver)[k8s.io/apimachinery](https://github.com/kubernetes/apimachinery)[k8s.io/apiserver](https://github.com/kubernetes/apiserver)[k8s.io/cli-runtime](https://github.com/kubernetes/cli-runtime)[k8s.io/client-go](https://github.com/kubernetes/client-go)[k8s.io/cloud-provider](https://github.com/kubernetes/cloud-provider)[k8s.io/cluster-bootstrap](https://github.com/kubernetes/cluster-bootstrap)[k8s.io/code-generator](https://github.com/kubernetes/code-generator)[k8s.io/component-base](https://github.com/kubernetes/component-base)[k8s.io/controller-manager](https://github.com/kubernetes/controller-manager)[k8s.io/cri-api](https://github.com/kubernetes/cri-api)[k8s.io/csi-api](https://github.com/kubernetes/csi-api)[k8s.io/csi-translation-lib](https://github.com/kubernetes/csi-translation-lib)[k8s.io/kube-aggregator](https://github.com/kubernetes/kube-aggregator)[k8s.io/kube-controller-manager](https://github.com/kubernetes/kube-controller-manager)[k8s.io/kube-proxy](https://github.com/kubernetes/kube-proxy)[k8s.io/kube-scheduler](https://github.com/kubernetes/kube-scheduler)[k8s.io/kubectl](https://github.com/kubernetes/kubectl)[k8s.io/kubelet](https://github.com/kubernetes/kubelet)[k8s.io/legacy-cloud-providers](https://github.com/kubernetes/legacy-cloud-providers)[k8s.io/metrics](https://github.com/kubernetes/metrics)[k8s.io/mount-utils](https://github.com/kubernetes/mount-utils)[k8s.io/sample-apiserver](https://github.com/kubernetes/sample-apiserver)[k8s.io/sample-cli-plugin](https://github.com/kubernetes/sample-cli-plugin)[k8s.io/sample-controller](https://github.com/kubernetes/sample-controller)
源码解析文章
公众号-k8s 技术圈,Kubernetes Pod 删除操作源码解析
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.