安装条件
- go:版本 v1.23.0+
- docker:版本 17.03+。
- kubectl:版本 v1.11.3+。
- Kubernetes :版本v1.11.3+ 。
安装
curl -L -o kubebuilder "<https://go.kubebuilder.io/dl/latest/$>(go env GOOS)/$(go env GOARCH)"
chmod +x kubebuilder && sudo mv kubebuilder /usr/local/bin/
创建项目
mkdir -p ~/projects/guestbook
cd ~/projects/guestbook
kubebuilder init --domain my.domain --repo my.domain/guestbook
1. domain
- 作用: 指定项目的 API 域名(domain)。这个域名会作为自定义资源(Custom Resource)的 Group 的一部分,用于定义 Kubernetes API 的命名空间。
- 用法: 在 Kubernetes 中,自定义资源的完整 API 组名通常是 <group>.<domain> 的形式。例如,--domain my.domain 会生成类似 guestbook.my.domain 的 API 组名。
- 实际影响:
- 这个值会出现在生成的 CRD(Custom Resource Definition)的 spec.group 字段中。
- 它定义了你的自定义资源在 Kubernetes 集群中的唯一标识范围,避免与其他资源冲突。
- 示例: 如果你设置 --domain my.domain,并且后续创建一个名为 guestbook 的资源组,那么你的资源可能看起来像 guestbook.my.domain/v1。
2. repo
- 作用: 指定项目的 Go 模块路径(module path),通常与代码的版本控制仓库路径一致。这是 Go 模块系统用来标识项目的基础路径。
- 用法: --repo 的值会写入项目的 go.mod 文件中,作为模块的名称。它还会被用作生成代码的包路径基础。
- 实际影响:
- 决定了项目中 Go 代码的导入路径。例如,--repo my.domain/guestbook 会生成类似 my.domain/guestbook/api/v1 的包路径。
- 如果你计划将代码托管在远程仓库(如 GitHub),这个值通常与仓库的 URL 对应(例如 github.com/username/guestbook)。
- 示例: 如果你设置 --repo my.domain/guestbook,生成的 go.mod 文件会包含 module my.domain/guestbook,并且后续生成的控制器、API 等代码都会基于这个路径。
创建API