Kubebuilder简介:一个使用CRD构建Kubernetes API的SDK

作者:Phillip Wittrock(Google),Sunil Arora(Google)

我们如何像Kubernetes部署和Pod一样使MySQL,Spark和Cassandra等应用程序能够自我管理?我们如何将这些应用程序配置为它们自己的一流API,而不是StatefulSet,Services和ConfigMap的集合?

我们一直在寻找解决方案,很高兴介绍 kubebuilder,是用于使用CRD快速构建和发布Kubernetes API和控制器的综合开发套件。 Kubebuilder脚手架项目和API定义是建立在 控制器运行时 库。

为什么要使用Kubebuilder和Kubernetes API?

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

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

但是,尽管开拓者有可能在原始API机制的基础上构建新的Controller,但这是DIY的“从头开始”的经验,要求开发人员学习有关如何实现Kubernetes库,手写样板代码的低级细节。 ,并包装自己的解决方案以进行集成测试,RBAC配置,文档等。Kubebuilder通过应用从构建核心Kubernetes API中获得的经验教训,使这种体验变得简单而轻松。

入门构建应用程序控制器和Kubernetes API

By providing an opinionated and structured solution for creating Controllers and Kubernetes APIs, developers have a working “out of the box” experience that uses the lessons and best practices learned from developing the core Kubernetes APIs. Creating a new "Hello World" Controller with kubebuilder is as simple as:

  1. 创建一个项目 kubebuilder init
  2. 使用定义新的API kubebuilder create api
  3. 使用以下命令构建并运行提供的主要功能 make install & make run

这将为用户修改API和控制器提供支架,并为支架集成测试,RBAC规则,Dockerfiles,Makefile等提供支持。 将实现添加到项目中之后,用户可以创建工件以通过以下方式发布其API:

  1. Build and push the container image from the provided Dockerfile using make docker-build and make docker-push commands
  2. Deploy the API using make deploy command

无论您已经是Controller的狂热爱好者,还是只想了解嗡嗡声,请查看 kubebuilder回购 或看一下 kubebuilder书 了解构建Controller的简单性。

参与其中

Kubebuilder是一个项目,在 SIG API机械 Google,Red Hat,VMware,Huawei等许多公司的贡献者正在积极开发中。通过以下渠道为我们提供反馈,以参与进来: