Kubebuilder是一个使用自定义资源定义(CRD)来构建Kubernetes API的框架。
与Ruby on Rails和SpringBoot等Web开发框架类似,Kubebuilder提高了速度,降低了开发人员在Go中快速构建和发布Kubernetes API所管理的复杂性。它建立在用于构建Kubernetes核心API的典型技术之上,提供简单的抽象,以减少模板和劳作。
**注意:**Kubebuilder并不是作为一个可以复制粘贴的例子而存在的,而是提供强大的库和工具来简化从头开始构建和发布Kubernetes API。
Kubebuilder是在controller-runtime和controller-tools库的基础上开发的。
安装
强烈建议你使用已发布的版本。发布的二进制文件可以在发布页面上找到。请按照说明来安装Kubebuilder。
入门
请参阅入门文档。
文档
查看Kubebuilder的书。
资源
- Kubebuilder书:book.kubebuilder.io
- GitHub Repo:kubernetes-sigs/kubebuilder
- Slack 频道。#kubebuilder
- 谷歌小组:kubebuilder@googlegroups.com
- 计划中的工作。Sprint Dashboard
- 设计文件:设计。
动机
构建Kubernetes工具和API需要做出很多决定并编写大量的模板。
为了方便使用经典方法轻松构建Kubernetes API和工具,本框架提供了一个Kubernetes开发工具的集合,以减少劳累。
Kubebuilder试图促进以下开发人员构建API的工作流程
- 创建一个新的项目目录
- 创建一个或多个资源API作为CRD,然后向资源添加字段
- 在控制器中实施调和循环,并观察额外的资源
- 通过针对集群运行进行测试(自我安装CRD并自动启动控制器)
- 更新引导的集成测试,以测试新字段和业务逻辑
- 从提供的Docker文件中构建并发布一个容器
范围
使用CRD、控制器和接纳Webhooks构建API。
理念
参见DESIGN.md,了解各种Kubebuilder项目的指导原则。
TL;DR。
提供干净的库抽象,并有清晰和良好的检查 godocs。
- 更倾向于使用Go接口和库,而不是依赖代码生成。
- 倾向于使用代码生成而不是一次性启动存根
- 倾向于一次性启动存根而不是分叉和修改模板
- 永远不要分叉和修改模板
技术
- 在低级别的客户端库之上提供高级别的库
- 保护开发者免受低级库的破坏性修改
- 从最小的开始,提供渐进式的功能发现
- 提供合理的默认值,并允许用户在存在这些默认值时进行覆盖
- 提供代码生成器来维护接口无法解决的通用模板
- 从
//+注释中获得驱动力
- 从
- 提供引导命令来初始化新的软件包
版本管理和发布
故障排除
-
错误和功能请求。
如果你有一个看起来像错误的东西,或者你想提出一个功能请求,请使用Github问题跟踪系统。在你提交问题之前,请搜索现有的问题,看看你的问题是否已经被覆盖。
-
Slack
对于实时讨论,你可以加入#kubebuilderSlack频道。Slack需要注册,但Kubernetes团队公开邀请任何人在此注册。欢迎来问任何问题。
贡献
我们非常感谢大家的贡献。维护者们积极管理问题列表,并努力突出适合新人的问题。该项目遵循典型的GitHub拉动请求模式。更多细节见CONTRIBUTING.md。在开始任何工作之前,请对现有的问题进行评论,或提交一个新的问题。
支持性
目前,Kubebuilder正式支持OSX和Linux平台。因此,如果你使用的是Windows操作系统,你可能会发现问题。我们欢迎对支持Windows的贡献。