K8s核心资源对象-CRD
K8s核心资源对象-CRD
基于1.25
什么是CRD
K8s的拓展主要通过几类实现:
- 客户端拓展:实现kubectl插件
- API拓展:包含使用CRD
- API访问拓展:在请求到达kube-apiserver之前,经过的认证、授权、动态准入都可以拓展
- 基础设施拓展:设备拓展啊发现新的节点资源、存储插件、网络插件
最广泛使用的目前还是从1.7版本出现的CRD,属于资源组apiextension.k8s.io
// +genclient |
Operator
Operator是特定的应用程序控制器,通过K8s拓展的API实现K8s的的实例管理
Controller-runtime
Controller-runtime是一组用于构建K8s控制器的Go库。被Kubebuilder和OperatorSDK利用,目的是快速构建Operator
核心数据结构
Controller-runtime的核心数据结构如下:
- Manager定义了管理多个控制器的接口,controllerManager是具体实现类
- controllerManager包含了多种类型的runnables,每种类型的runnables可以存放多个Controller
- 每种CRD资源对应一个Controller,Controller实现了Reconciler接口
- Reconciler支持控制器循环,主要是实现Reconciler中的Reconcilefunc
- Builder负责构建Controller,并且吧controllerManager和COntroller联系起来
关键流程
- ctrl.NewManager func初始化controllerManager
- SetupWithManager func内部初始化了Builder构造器,通过Builder构造器的Complete func完成Controller的创建,以及把Controller添加到Manager中,最后完成Informer初始化并且注册监听函数
- mgr.Start启动Manager,内部依次启动注册所有的Controller,最后调用客户实现的Reconcile
Kubebuilder
Kubebuilder是用于创建K8s API以及运行时的框架
Kubeilder:使用Go语言的Templdate框架实现,内部实现也是调用controller-runtime实现
初始化流程图
基于3.9.1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论