Web开发框架kubebuilder入门教程(附资源)

838 阅读3分钟

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

Ruby on RailsSpringBoot等Web开发框架类似,Kubebuilder提高了速度,降低了开发人员在Go中快速构建和发布Kubernetes API所管理的复杂性。它建立在用于构建Kubernetes核心API的典型技术之上,提供简单的抽象,以减少模板和劳作。

**注意:**Kubebuilder并不是作为一个可以复制粘贴的例子而存在的,而是提供强大的库和工具来简化从头开始构建和发布Kubernetes API。

Kubebuilder是在controller-runtime和controller-tools库的基础上开发的。

安装

强烈建议你使用已发布的版本。发布的二进制文件可以在发布页面上找到。请按照说明来安装Kubebuilder。

入门

请参阅入门文档。

Quick Start

文档

查看Kubebuilder的书

资源

动机

构建Kubernetes工具和API需要做出很多决定并编写大量的模板。

为了方便使用经典方法轻松构建Kubernetes API和工具,本框架提供了一个Kubernetes开发工具的集合,以减少劳累。

Kubebuilder试图促进以下开发人员构建API的工作流程

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

范围

使用CRD、控制器和接纳Webhooks构建API。

理念

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

TL;DR。

提供干净的库抽象,并有清晰和良好的检查 godocs。

  • 更倾向于使用Go接口,而不是依赖代码生成
  • 倾向于使用代码生成而不是一次性启动存根
  • 倾向于一次性启动存根而不是分叉和修改模板
  • 永远不要分叉和修改模板

技术

  • 在低级别的客户端库之上提供高级别的库
    • 保护开发者免受低级库的破坏性修改
    • 从最小的开始,提供渐进式的功能发现
    • 提供合理的默认值,并允许用户在存在这些默认值时进行覆盖
  • 提供代码生成器来维护接口无法解决的通用模板
    • //+ 注释中获得驱动力
  • 提供引导命令来初始化新的软件包

版本管理和发布

参见VERSIONING.md

故障排除

  • 错误和功能请求。

    如果你有一个看起来像错误的东西,或者你想提出一个功能请求,请使用Github问题跟踪系统。在你提交问题之前,请搜索现有的问题,看看你的问题是否已经被覆盖。

  • Slack

    对于实时讨论,你可以加入#kubebuilderSlack频道。Slack需要注册,但Kubernetes团队公开邀请任何人在此注册。欢迎来问任何问题。

贡献

我们非常感谢大家的贡献。维护者们积极管理问题列表,并努力突出适合新人的问题。该项目遵循典型的GitHub拉动请求模式。更多细节见CONTRIBUTING.md。在开始任何工作之前,请对现有的问题进行评论,或提交一个新的问题。

支持性

目前,Kubebuilder正式支持OSX和Linux平台。因此,如果你使用的是Windows操作系统,你可能会发现问题。我们欢迎对支持Windows的贡献。