Kubernetes API
OpenAPI Spec
Kubernetes Open API spec 有两个版本,同时存在
2.0
1 | https://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/swagger.json |
3.0
1 | https://github.com/kubernetes/kubernetes/tree/master/api/openapi-spec |
目前,各个语言的客户端都用 2.0 生成。
kubernetes/kube-openapi 项目,扫描 kubernetes 源代码,根据 // tag
的指示,生成 spec 文件,我个人认为会同时生成 2.0 和 3.0 的文件。
代码自动生成
k8s.io/apimachinery 提供 go 语言的结构体 meta 定义,供 [k8s.io/api] 使用
k8s.io/api 是 Kubernetes API resource 的 scheme
kubernetes/code-generator 根据源代码里的 golang 数据结构生成 CRD 的client,包含 CRD 的 CURD 函数,深拷贝,informer,lister
k8s.io/client-go 用于编写 Kubernetes golang 客户端,包含两种类型的 client:
dynamic (generic,自己输入GVK)
typed (GVK Scheme 已知)
kubernetes-sigs/controller-runtime 第三个 Kubernetes golang 客户端,用于写Operator控制器,kubebuilder 和 OpenShift Operator SDK 底层使用的就是它
kubernetes-sigs/controller-tools 包含 controller-gen,生成 CRD, RBAC 等
写 Operator 的三种方式
1 sample-controller
使用 code-generator 和 client-go
2 Kubebuilder
使用 controller-runtime 和 controller-tools
3 Opeartor SDK
使用 controller-runtime 和 controller-tools
release Operator
Helm
参数化一组 yaml 文件
Kustomize
其它
- sed, awk, jq, yq
- Ansible
- Ksonnet 已经废弃
API Server
k8s.io/apiserver/pkg/registry/rest 定义了 API server 的 REST 接口
k8s.io/apiserver/pkg/registry/generic 在 generic object 上实现了这个接口