使用kubebuilder开发自定义controller
目录
- 声明式API
- CRD开发
- CRD定义
- 自动代码生成
- generator.sh
- kubeuilder
- controller开发
- CREAT
- DELETE
- GET
- UPDATE
声明式API
- 声明式API概念是什么?
- 声明式API / 命令式API 各自的优缺点?
- 声明式:关注最终的期望状态
- mysql/mongoDB:不关心你怎么去连接,只要最终的数据。
- “声明式 API”允许有多个 API 写端,以 PATCH 的方式对 API 对象进行修改,而无需关心本地原始 YAML 文件的内容。
- 命令式:给出一个个命令,指导如何step by step达到期望状态
- 声明式:关注最终的期望状态
- k8s总体架构
CRD开发-自动代码生成
前言:这两个东西是为了更好的帮助用户专注业务,开发控制器本身而自动生成代码的模块。一个很重要的问题:
实现 CRD 扩展主要做两件事:
-
编写 CRD 并将其部署到 K8s 集群里。
这一步的作用就是让 K8s 知道有这个资源及其结构属性,在用户提交该自定义资源的定义时(通常是 YAML 文件定义),K8s 能够成功校验该资源并创建出对应的 Go struct 进行持久化,同时触发控制器的调谐逻辑。 -
编写 Controller 并将其部署到 K8s 集群里。这一步的作用就是实现控制逻辑。
自动生成代码工具就是帮我们简化上述两个过程
- 它自动生成了哪些代码?
- 他们的功能是什么?
- 各自用法?
generator.sh
- 混合kubebuilder与code generator编写CRD
- Resouce + Controller = Operator
- kubebuilder生成CRD和manifests yaml
- code-generator生成informers、listers、clientsets
- 这些组件发挥的作用是什么?(需要进一步调研)
kubebuilder
- 官方中文资料
- 深入解析 Kubebuilder:让编写 CRD 变得更简单
- 中文参考资料
- 基本概念与架构
- GVK &GVRs
- scheme
- Manager
- Cache
- Controller
- Clients
- Index
- Finalizer
- OwnerReference
- 工作流程