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