kubernetes-sigs/kubebuilder
GitHub: kubernetes-sigs/kubebuilder
基于 Go 语言构建 Kubernetes API 和 CRDs 的开发框架,提供脚手架工具以简化 Operator 和控制器的创建过程。
Stars: 9085 | Forks: 1643

[](https://scorecard.dev/viewer/?uri=github.com/kubernetes-sigs/kubebuilder)
[](https://github.com/kubernetes-sigs/kubebuilder/actions/workflows/verify-all.yml)
[](https://goreportcard.com/report/sigs.k8s.io/kubebuilder)
[](https://coveralls.io/github/kubernetes-sigs/kubebuilder?branch=master)
[](https://github.com/kubernetes-sigs/kubebuilder/releases)
[](https://pkg.go.dev/sigs.k8s.io/kubebuilder/v4)
Kubebuilder 是一个使用 [自定义资源定义 (CRDs)](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions) 构建 Kubernetes API 的框架。
类似于 *Ruby on Rails* 和 *SpringBoot* 等 Web 开发框架,
Kubebuilder 提高了开发速度,并减少了开发人员在 Go 语言中快速构建和发布 Kubernetes API 时所管理的复杂性。
它建立在用于构建核心 Kubernetes API 的规范技术之上,提供了简单的抽象,以减少样板代码和繁琐工作。
Kubebuilder **不**作为一个*复制粘贴*的示例存在,而是提供了强大的库和工具
来简化从零开始构建和发布 Kubernetes API。它
提供了插件架构,允许用户利用可选的帮助程序
和功能。要了解更多信息,请参阅 [插件部分][plugin-section]。
Kubebuilder 是在 [controller-runtime][controller-runtime] 和 [controller-tools][controller-tools] 库之上开发的。
### Kubebuilder 也是一个库
Kubebuilder 是可扩展的,可以用作其他项目中的库。
[Operator-SDK][operator-sdk] 是一个使用 Kubebuilder 作为库的项目的很好的例子。
[Operator-SDK][operator-sdk] 使用插件功能来包含非 Go 运算符,*例如 operator-sdk 的 Ansible 和基于语言的 Helm 运算符*。
要了解更多信息,请参阅[如何创建您自己的插件][your-own-plugins]。
### 安装说明
强烈建议您使用已发布的版本。发布版本二进制文件可在 [发布](https://github.com/kubernetes-sigs/kubebuilder/releases) 页面上找到。
按照[说明](https://book.kubebuilder.io/quick-start.html#installation) 安装 Kubebuilder。
## 快速入门
请参阅 [快速入门](https://book.kubebuilder.io/quick-start.html) 文档。
此外,请务必查看 [部署镜像](./docs/book/src/plugins/available/deploy-image-plugin-v1-alpha.md)
插件。该插件允许用户搭建 API/控制器,以便按照指南和最佳实践在集群上部署和管理
操作数(image)。它抽象了实现此目标的复杂性,同时允许用户自定义生成的代码。
## 文档
查看 Kubebuilder [书籍](https://book.kubebuilder.io)。
## 资源
- Kubebuilder Book:[book.kubebuilder.io](https://book.kubebuilder.io)
- GitHub 仓库:[kubernetes-sigs/kubebuilder](https://github.com/kubernetes-sigs/kubebuilder)
- Slack 频道:[#kubebuilder](https://kubernetes.slack.com/messages/#kubebuilder)
- Google Group:[kubebuilder@googlegroups.com](https://groups.google.com/forum/#!forum/kubebuilder)
- 设计文档:[designs](designs/)
- 插件:[plugins][plugin-section]
## 动机
构建 Kubernetes 工具和 API 涉及做出大量决策和编写大量样板代码。
为了方便使用规范方法轻松构建 Kubernetes API 和工具,该框架
提供了一组 Kubernetes 开发工具以最大限度地减少繁琐工作。
Kubebuilder 试图促进以下用于构建 API 的开发者工作流程
1. 创建一个新的项目目录
2. 创建一个或多个资源 API 作为 CRD,然后向资源添加字段
3. 在控制器中实现协调循环并监视其他资源
4. 通过针对集群运行来进行测试(自动安装 CRD 并启动控制器)
5. 更新引导集成测试以测试新字段和业务逻辑
6. 使用提供的 Dockerfile 构建并发布容器
## 范围
使用 CRDs、Controllers 和 Admission Webhooks 构建 API。
## 理念
有关各种 Kubebuilder 项目的指导原则,请参阅 [DESIGN.md](DESIGN.md)。
TL;DR:
提供干净的库抽象,并提供清晰且示例丰富的 go docs。
- 优先使用 go *interfaces* 和 *libraries*,而不是依赖 *code generation*
- 优先使用 *code generation*,而不是存根的 *1 time init*
- 优先使用存根的 *1 time init*,而不是分叉和修改的样板代码
- 永远不要分叉和修改样板代码
## 技术
- 在底层客户端库之上提供更高级别的库
- 保护开发者免受底层库中破坏性更改的影响
- 从最小化开始,并提供功能的渐进式发现
- 提供合理的默认值,并允许用户在存在时覆盖它们
- 提供代码生成器来维护接口无法解决的常见样板代码
- 由 `// +` 注释驱动
- 提供引导命令以初始化新包
## 版本控制和发布
请参阅 [VERSIONING.md](VERSIONING.md)。
## 故障排除
- Bug 和功能请求:
如果您看起来发现了 bug,或者您想提出功能请求,请使用 [Github issue 追踪系统。](https://github.com/kubernetes-sigs/kubebuilder/issues)
在提交 issue 之前,请搜索现有的 issue,以查看您的问题是否已被涵盖。
- Slack
对于实时讨论,您可以加入 [#kubebuilder](https://slack.k8s.io/#kubebuilder) slack 频道。Slack 需要注册,但 Kubernetes 团队邀请任何人在此注册。欢迎随时来提出任何问题。
## 贡献
非常感谢贡献。维护人员积极管理 issue 列表,并尝试突出适合新加入者的问题。
该项目遵循典型的 GitHub 拉取请求模型。有关更多详细信息,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
在开始任何工作之前,请评论现有 issue 或提交新 issue。
## 支持的操作系统
目前,Kubebuilder 官方支持 macOS 和 Linux 平台。如果您使用的是 Windows 操作系统,我们建议您阅读[此处](docs/windows.md)的说明。
没有计划支持 Windows 的贡献。
## 版本兼容性和可支持性
由 Kubebuilder 创建的项目包含一个 `Makefile`,它安装项目创建期间定义的版本的工具。包含的主要工具有:
- [kustomize](https://github.com/kubernetes-sigs/kustomize)
- [controller-gen](https://github.com/kubernetes-sigs/controller-tools)
- [setup-envtest](https://github.com/kubernetes-sigs/controller-runtime/tree/main/tools/setup-envtest)
此外,这些项目包含一个 `go.mod` 文件,指定依赖版本。
Kubebuilder 依赖于 [controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) 及其 Go 和 Kubernetes 依赖项。
因此,`Makefile` 和 `go.mod` 文件中定义的版本是经过测试、支持和推荐的版本。
Kubebuilder 的每个次要版本都与 client-go 的特定次要版本一起测试。
虽然 Kubebuilder 次要版本*可能*与其他 client-go 次要版本或其他工具兼容,但这种兼容性不保证、不支持或未测试。
Kubebuilder 要求的最低 Go 版本由其依赖项要求的最高最低
Go 版本决定。这通常与相应的
`k8s.io/*` 依赖项要求的最低 Go 版本一致。
可以在为每个 [tag release](https://github.com/kubernetes-sigs/kubebuilder/tags) 搭建的每个项目的 `go.mod`
文件中找到兼容的 `k8s.io/*` 版本、client-go 版本和最低 Go 版本。
**示例:**对于 `4.1.1` 版本,最低 Go 版本兼容性为 `1.22`。
您可以参考在标签发布 [v4.1.1](https://github.com/kubernetes-sigs/kubebuilder/tree/v4.1.1/testdata) 的 testdata 目录中的示例,
例如 `project-v4` 的 [go.mod](https://github.com/kubernetes-sigs/kubebuilder/blob/v4.1.1/testdata/project-v4/go.mod#L3) 文件。您还可以通过检查 [Makefile](https://github.com/kubernetes-sigs/kubebuilder/blob/v4.1.1/testdata/project-v4/Makefile#L160-L165) 来查看此版本支持和测试的工具版本。
## 社区会议
以下会议每两周举行一次:
- Kubebuilder 会议
非常欢迎您参加。欲了解更多信息,请加入 [kubebuilder@googlegroups.com](https://groups.google.com/g/kubebuilder)。
每个月,我们的团队会在第一个星期四上午 11:00 PT(太平洋时间)开会讨论我们的进展并规划接下来的几周。
请注意,最近我们经常通过 Slack 进行离线同步。但是,如果您向议程中添加主题,我们将按计划举行会议。
此外,我们可以使用此渠道来演示新功能。
标签:API开发, DNS解析, EVTX分析, Go语言, K8s扩展, Kubebuilder, Operator框架, SOC Prime, 代码生成, 子域名突变, 容器编排, 开发工具, 开源项目, 控制器, 日志审计, 渗透测试工具, 程序破解, 脚手架, 自动化运维, 自定义资源, 请求拦截