源码解析

概述

参考:

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 删除操作源码解析