ITADN
kubernetes-sigs/kubebuilder
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
kubebuilder logo

OpenSSF Scorecard Verify All Go Report Card Coverage Status Latest release Go Reference

Kubebuilder 是一个使用 自定义资源定义 (CRDs) 构建 Kubernetes API 的框架。

类似于 Ruby on RailsSpringBoot 等 Web 开发框架, Kubebuilder 提高了开发速度,并降低了开发者在快速构建和发布 Go 语言编写的 Kubernetes API 时所管理的复杂性。 它基于构建核心 Kubernetes API 所使用的标准技术,提供了简单的抽象,以减少样板代码和繁琐工作。

Kubebuilder 并非 一个供 复制粘贴 的示例,而是提供了强大的库和工具, 以简化从零开始构建和发布 Kubernetes API 的过程。它 提供了一种插件架构,允许用户利用可选的辅助功能和特性。要了解更多信息,请参阅 插件部分

Kubebuilder 基于 controller-runtimecontroller-tools 库开发。

Kubebuilder 也是一个库

Kubebuilder 是可扩展的,可以作为库用于其他项目中。 Operator-SDK 是一个使用 Kubebuilder 作为库的项目的良好示例。 Operator-SDK 使用插件功能来包含非 Go 语言的操作器 例如 operator-sdk 的基于 Ansible 和 Helm 的语言操作器

要了解更多信息,请参阅 如何创建自己的插件

安装

强烈建议您使用已发布的版本。发布二进制文件可在 releases 页面获取。 请按照 instructions 安装 Kubebuilder。

Getting Started

请参阅 Getting Started 文档。

此外,请确保查看 Deploy Image 插件。该插件允许用户搭建 API/Controllers 脚手架,以按照指南和最佳实践在集群上部署和管理 Operand(镜像)。它在允许用户自定义生成代码的同时,抽象了实现此目标的复杂性。

Documentation

查看 Kubebuilder book

Resources

Motivation

构建 Kubernetes 工具和 API 涉及做出大量决策并编写大量样板代码。

为了便于使用标准方法轻松构建 Kubernetes API 和工具,该框架 提供了一系列 Kubernetes 开发工具,以最大限度地减少繁琐工作。

Kubebuilder 试图促进以下用于构建 API 的开发者工作流

  1. 创建一个新的项目目录
  2. 创建一个或多个资源 API 作为 CRD,然后为资源添加字段
  3. 在控制器中实现 reconcile 循环并监视额外的资源
  4. 通过针对集群运行进行测试(自动安装 CRD 并启动控制器)
  5. 更新引导生成的集成测试以测试新字段和业务逻辑
  6. 使用提供的 Dockerfile 构建并发布容器

范围

使用 CRD、控制器和准入 Webhook 构建 API。

理念

参见 DESIGN.md 了解各个 Kubebuilder 项目的指导原则。

简而言之:

提供清晰的库抽象,并附带清晰且示例充分的 go 文档。

  • 优先使用 go 接口,而不是过度依赖 代码生成
  • 优先使用 代码生成,而不是对存根进行 一次性初始化
  • 优先对存根进行 一次性初始化,而不是分叉和修改样板代码
  • 绝不分叉和修改样板代码

技术

  • 在低级客户端库之上提供高级库
    • 保护开发者免受低级库中破坏性变更的影响
    • 从最小化开始,并提供功能的渐进式发现
    • 提供合理的默认值,并在存在时允许用户覆盖
  • 提供代码生成器以维护无法通过接口解决的常见样板代码
    • // + 注释驱动
  • 提供引导命令以初始化新包

版本控制和发布

参见 VERSIONING.md

故障排除

  • 错误与功能请求:

    如果您发现疑似错误,或者希望提出功能请求,请使用 Github 问题跟踪系统。 在提交问题之前,请搜索现有问题,查看您的问题是否已被涵盖。

  • Slack

    如需实时讨论,您可以加入 #kubebuilder slack 频道。Slack 需要注册,但 Kubernetes 团队向任何人开放注册邀请,您可以在此处注册。欢迎随时前来提问。

贡献

我们非常感谢大家的贡献。维护者积极管理问题列表,并尝试突出适合新人的问题。 该项目遵循典型的 GitHub 拉取请求模式。有关更多详细信息,请参阅 CONTRIBUTING.md。 在开始任何工作之前,请评论现有问题或提交新问题。

支持的操作系统

目前,Kubebuilder 官方支持 macOS 和 Linux 平台。如果您使用的是 Windows 操作系统,我们建议您阅读 此处 的说明。

目前不计划贡献以支持 Windows。

版本兼容性与可支持性

由 Kubebuilder 创建的项目包含一个 Makefile,用于安装在项目创建期间定义版本的各种工具。主要包含的工具如下:

此外,这些项目包含一个 go.mod 文件,用于指定依赖项的版本。 Kubebuilder 依赖于 controller-runtime 及其 Go 和 Kubernetes 依赖项。 因此,Makefilego.mod 文件中定义的版本是经过测试、支持并推荐的版本。

Kubebuilder 的每个次要版本都会与特定次要版本的 client-go 进行测试。 虽然 Kubebuilder 的某个次要版本可能与其他 client-go 次要版本 或其他工具兼容,但这种兼容性并不保证、不支持或经过测试。

Kubebuilder 所需的最低 Go 版本由其依赖项所需的最高最低 Go 版本决定。这通常与相应 k8s.io/* 依赖项所需的最低 Go 版本保持一致。

兼容的 k8s.io/* 版本、client-go 版本和最低 Go 版本可以在为每个项目的每个 tag release 生成的 go.mod 文件中找到。

示例: 对于 4.1.1 版本,最低 Go 版本兼容性为 1.22。 您可以参考 tag 发布的 v4.1.1 中 testdata 目录下的示例, 例如 project-v4go.mod 文件。您还可以通过检查 Makefile 来查看此版本支持并 测试的工具版本。

社区会议

以下会议每两周举行一次:

  • Kubebuilder 会议

您非常欢迎参加。如需更多信息,请加入 kubebuilder@googlegroups.com。 每月,我们的团队会在第一个星期四太平洋时间(Pacific Time)11:00 开会,讨论我们的进展并规划接下来的几周。 请注意,我们最近通过 Slack 更频繁地进行线下同步。但是,如果您在议程中添加一个主题,我们将按计划举行会议。 此外,我们可以使用此频道来演示新功能。