这篇文章已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已发生变化或不准确。
介绍 Kubebuilder:一个使用 CRD 构建 Kubernetes API 的 SDK
我们如何让 MySQL、Spark 和 Cassandra 等应用像 Kubernetes Deployments 和 Pods 一样自我管理?我们如何将这些应用配置成它们自己的一等 API,而不是一堆 StatefulSets、Services 和 ConfigMaps 的集合?
我们一直在努力寻找解决方案,并很高兴推出 kubebuilder,这是一个全面的开发工具包,用于使用 CRD 快速构建和发布 Kubernetes API 和 Controller。Kubebuilder 可以搭建项目和 API 定义框架,并构建在 controller-runtime 库之上。
为什么选择 Kubebuilder 和 Kubernetes API?
应用和集群资源通常需要一些操作工作——无论是用新的副本替换失败的副本,还是在重新分片数据时扩展副本数量。运行 MySQL 应用可能需要安排备份、在扩展后重新配置副本、设置故障检测和修复等。
使用 Kubernetes API 模型,管理逻辑直接嵌入到特定于应用的 Kubernetes API 中,例如“MySQL”API。然后,用户可以使用 kubectl 等工具通过 YAML 配置以声明方式管理应用,就像管理 Kubernetes 对象一样。这种方法被称为应用控制器(Application Controller),也称为 Operator。Controller 是一种强大的技术,支持核心 Kubernetes API,除了应用之外,还可以用于构建多种解决方案;例如自动伸缩器、工作负载 API、配置 API、CI/CD 系统等等。
然而,虽然先驱者们已经可以在原始 API 机制之上构建新的 Controller,但这一直是一种“从零开始”的 DIY 体验,需要开发者学习 Kubernetes 库实现的底层细节,手动编写样板代码,并为集成测试、RBAC 配置、文档等包装自己的解决方案。通过应用构建核心 Kubernetes API 中获得的经验,Kubebuilder 使这一体验变得简单易行。
开始构建应用控制器和 Kubernetes API
通过为创建 Controller 和 Kubernetes API 提供一种有主见且结构化的解决方案,开发者可以获得一种“开箱即用”的工作体验,该体验借鉴了开发核心 Kubernetes API 的经验和最佳实践。使用 kubebuilder
创建一个新的“Hello World”Controller 就像以下步骤一样简单:
- 使用
kubebuilder init
创建项目 - 使用
kubebuilder create api
定义新的 API - 使用
make install & make run
构建并运行提供的主函数
这将为用户搭建 API 和 Controller 的框架供其修改,同时也会搭建集成测试、RBAC 规则、Dockerfile、Makefile 等的框架。在将自己的实现添加到项目后,用户可以通过以下方式创建用于发布其 API 的制品:
- 使用提供的 Dockerfile,通过
make docker-build
和make docker-push
命令构建并推送容器镜像 - 使用
make deploy
命令部署 API
无论你已经是 Controller 爱好者,还是只是想了解其魅力所在,都可以查看 kubebuilder 仓库或参考 kubebuilder 指南中的示例,了解构建 Controller 是多么简单易行。
参与其中
Kubebuilder 是 SIG API Machinery 下的一个项目,目前正由来自 Google、Red Hat、VMware、华为等众多公司的贡献者积极开发。通过以下渠道向我们提供反馈,参与进来:
- Kubebuilder 在 Slack 上的聊天室
- SIG 邮件列表
- GitHub issues
- 在 kubebuilder 仓库中发送 Pull Request