介绍
Kubebuilder是一个用于快速开发Kubernetes API和控制器的SDK(软件开发工具包)。它提供了一套工具和库,帮助开发者以最小的努力构建、发布和运行Kubernetes自定义控制器和API。Kubebuilder利用Custom Resource Definitions(CRDs)来扩展Kubernetes API,使得开发者可以创建自定义资源(Custom Resources),这些资源就像Kubernetes原生资源(如Pods、Deployments等)一样,可以通过kubectl命令行工具或API进行管理。
官方文档V3版本地址:https://book.kubebuilder.io/
中文文档V2版本地址:https://cloudnative.to/kubebuilder/
github地址:https://github.com/kubernetes-sigs/kubebuilder
主要特点
- 声明式API设计:Kubebuilder鼓励使用声明式API设计,这意味着开发者定义资源的“期望状态”,而控制器则负责使当前状态与期望状态一致。
- 代码生成:Kubebuilder能够自动生成大量的代码和配置,这些代码和配置是创建CRDs和控制器所必需的。这减少了重复工作,让开发者能够专注于业务逻辑。
- 简化的测试:提供了工具和库来帮助开发者编写单元和集成测试,简化了测试过程。
- 版本控制:支持API的版本控制,使得在不破坏现有API的情况下进行迭代成为可能。
- Webhook支持:Kubebuilder支持创建Admission Webhooks,这是一种拦截对Kubernetes API的请求并在它们持久化之前修改或拒绝它们的机制。
工作流程
使用Kubebuilder的典型工作流程包括以下步骤:
- 初始化项目:通过Kubebuilder提供的命令初始化一个新的项目结构。
- 创建API和控制器:定义自定义资源(CRDs)和相应的控制器。Kubebuilder会自动生成相关的代码框架。
- 添加业务逻辑:在控制器的Reconcile方法中实现业务逻辑,以响应资源状态的变化。
- 运行和测试:本地运行和测试控制器,确保它按预期工作。
- 打包和部署:将控制器打包为Docker镜像,然后部署到Kubernetes集群中。
安装
我这是使用的是v3版本,v3版本使用有前提条件:
- go version:v1.20.0+ Go 版本 v1.20.0+
- docker version:17.03+. Docker 版本 17.03+。
- kubectl version:v1.11.3+.
我的环境是go:1.20.14,没有使用docker使用的是coontainerd,版本是1.6.9,kubectl版本是1.24.16。下面开始安装:
# download kubebuilder and install locally.
curl -L -o kubebuilder "https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)"
# 也可以使用master分支,下载地址是https://go.kubebuilder.io/dl/master/$(go env GOOS)/$(go env GOARCH)
chmod +x kubebuilder && mv kubebuilder /usr/local/bin/
kubebuilder version
Available Commands:
alpha Alpha-stage subcommands
completion Load completions for the specified shell
create Scaffold a Kubernetes API or webhook
edit Update the project configuration
help Help about any command
init Initialize a new project
version Print the kubebuilder version
启用shell自动补全
kubebuilder completion bash > /etc/bash_completion.d/kubebuilder
source /etc/bash_completion.d/kubebuilder