目录

Kubebuilder系列-01-开发自定义API

概述

Controller 也就是控制器是 Operator 的核心。开发 Operator 主要包含下面几个步骤。

  1. 下载kubebuilder
  2. 创建项目project
  3. 创建API
  4. 充分测试
  5. 在Kubernetes集群安装自定义资源
  6. 安装Operator

操作

按照上一篇操作之后,已经创建好 Controller 的代码框架了,那么接下来的核心就是如何按照业务逻辑来构建自定义的 Controller 了。

/kubebuilder%E7%B3%BB%E5%88%97-01-%E5%BC%80%E5%8F%91%E8%87%AA%E5%AE%9A%E4%B9%89api/img.png

index

The reconciler fetches all jobs owned by the cronjob for the status. As our number of cronjobs increases, looking these up can become quite slow as we have to filter through all of them. For a more efficient lookup, these jobs will be indexed locally on the controller’s name. A jobOwnerKey field is added to the cached job objects. This key references the owning controller and functions as the index. Later in this document we will configure the manager to actually index this field.

镜像

从 Dockerfile 看,整个 Controller 的编译也是在容器中实习的,所以在做 docker build 的时候,需要注意容器网络需要拉取到 Go 的一些依赖包。

/kubebuilder%E7%B3%BB%E5%88%97-01-%E5%BC%80%E5%8F%91%E8%87%AA%E5%AE%9A%E4%B9%89api/img_1.png

部署

kubebuilder 给出的默认的部署文件是通过 kustomize 来构建的,如果部署的时候,需要注意环境是否已经有 kustomize,高版本的 kubectl 应该是自带的,就可以不关注了。通常来说,Controller 的部署就是用 Deployment 的,注意一下副本数即可。

/kubebuilder%E7%B3%BB%E5%88%97-01-%E5%BC%80%E5%8F%91%E8%87%AA%E5%AE%9A%E4%B9%89api/img_2.png

监控

现在构建出来的 Controller 把 Metrics 接口都内置了,因此部署的时候,也提供了 ServiceMonitor 的模板。

/kubebuilder%E7%B3%BB%E5%88%97-01-%E5%BC%80%E5%8F%91%E8%87%AA%E5%AE%9A%E4%B9%89api/img_3.png

Makefile

Makefile 中可以看到 build 之前需要通过 generate 这个 target 来生成一些代码文件,也就是之前所说的,用 Go 代码生成 Go 代码,这也是创建 Controller 的脚手架代码,这些代码一般来说是通过配置获取的,生成出来之后不建议直接手动修改。

其中 controller-gen 是最核心的工具,通过这个 CLI 可以简化很多 Controller 编写的工作。

/kubebuilder%E7%B3%BB%E5%88%97-01-%E5%BC%80%E5%8F%91%E8%87%AA%E5%AE%9A%E4%B9%89api/img_4.png

参考资料

  1. What’s in a controller?
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。