本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

介绍 Kubebuilder:用于使用 CRD 构建 Kubernetes API 的 SDK

我们如何使 MySQL、Spark 和 Cassandra 等应用程序像 Kubernetes Deployments 和 Pods 一样自我管理?我们如何将这些应用程序配置为它们自己的第一类 API,而不是 StatefulSets、服务和 ConfigMaps 的集合?

我们一直在致力于一个解决方案,并很高兴推出 kubebuilder,这是一个全面的开发工具包,用于使用 CRD 快速构建和发布 Kubernetes API 和控制器。Kubebuilder 会生成项目和 API 定义的框架,并基于 controller-runtime 库构建。

为什么选择 Kubebuilder 和 Kubernetes API?

应用程序和集群资源通常需要一些操作工作,无论是用新的副本替换失败的副本,还是在重新分片数据时扩展副本计数。运行 MySQL 应用程序可能需要安排备份、在扩展后重新配置副本、设置故障检测和补救等。

使用 Kubernetes API 模型,管理逻辑直接嵌入到特定于应用程序的 Kubernetes API 中,例如“MySQL”API。然后,用户可以使用 kubectl 等工具通过 YAML 配置以声明方式管理应用程序,就像他们对 Kubernetes 对象所做的那样。这种方法称为应用程序控制器,也称为操作员。控制器是一种强大的技术,支持核心 Kubernetes API,除了应用程序之外,它还可以用于构建多种类型的解决方案;例如自动缩放器、工作负载 API、配置 API、CI/CD 系统等。

然而,尽管开拓者有可能在原始 API 机制之上构建新的控制器,但这样做一直是一种“从头开始”的 DIY 体验,要求开发人员学习有关 Kubernetes 库如何实现的底层细节、手写样板代码,以及为集成测试、RBAC 配置、文档等封装他们自己的解决方案。Kubebuilder 通过应用从构建核心 Kubernetes API 中吸取的经验教训,使这种体验变得简单而容易。

开始构建应用程序控制器和 Kubernetes API

通过为创建控制器和 Kubernetes API 提供有主见且结构化的解决方案,开发人员可以获得“开箱即用”的工作体验,该体验使用从开发核心 Kubernetes API 中获得的经验和最佳实践。使用 kubebuilder 创建一个新的“Hello World”控制器非常简单,只需:

  1. 使用 kubebuilder init 创建一个项目
  2. 使用 kubebuilder create api 定义一个新的 API
  3. 使用 make install & make run 构建并运行提供的 main 函数

这将为用户修改生成 API 和控制器的框架,以及集成测试、RBAC 规则、Dockerfile、Makefile 等的框架。在将他们的实现添加到项目后,用户通过以下方式创建工件来发布他们的 API:

  1. 使用 make docker-buildmake docker-push 命令从提供的 Dockerfile 构建并推送容器镜像
  2. 使用 make deploy 命令部署 API

无论你已经是控制器的爱好者,还是只是想了解一下热议的内容,请查看 kubebuilder 存储库或查看 kubebuilder 书籍中的示例,了解构建控制器是多么简单和容易。

参与其中

Kubebuilder 是 SIG API Machinery 下的一个项目,并且正在由来自 Google、Red Hat、VMware、华为等众多公司的贡献者积极开发。通过以下渠道向我们提供反馈来参与其中: