使用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 扩展主要做两件事:

  1. 编写 CRD 并将其部署到 K8s 集群里。
    这一步的作用就是让 K8s 知道有这个资源及其结构属性,在用户提交该自定义资源的定义时(通常是 YAML 文件定义),K8s 能够成功校验该资源并创建出对应的 Go struct 进行持久化,同时触发控制器的调谐逻辑。

  2. 编写 Controller 并将其部署到 K8s 集群里。这一步的作用就是实现控制逻辑。

自动生成代码工具就是帮我们简化上述两个过程

一张有价值的架构图

  • 它自动生成了哪些代码?
  • 他们的功能是什么?
  • 各自用法?

generator.sh

  • 混合kubebuilder与code generator编写CRD
    • Resouce + Controller = Operator
    • kubebuilder生成CRD和manifests yaml
    • code-generator生成informers、listers、clientsets
    • 这些组件发挥的作用是什么?(需要进一步调研)

kubebuilder

CRD开发-controller开发

  • 配置go环境

    • mac环境GOPATH:/usr/local/go
  • 安装kubebuilder

  • Controller逻辑开发

    • 社区设计文档
    • CREATE
      • 只有一个层级队列
      • hierarchical queue和flatted queue不能同时存在
      • Queue name/weight/parent的名字约束
      • nodes in spec.queues must be defined as a hierarchy queue. (?)
    • DELETE
    • UPDATE
    • GET

posted on 2021-12-30 18:37  在苏州的城边  阅读(288)  评论(0编辑  收藏  举报

导航