快速开始
本快速开始将涵盖:
前置条件
安装
安装 kubebuilder:
# download kubebuilder and install locally.
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/
创建项目
创建一个目录,并在其中运行 init 命令来初始化新项目。示例如下:
mkdir -p ~/projects/guestbook
cd ~/projects/guestbook
kubebuilder init --domain my.domain --repo my.domain/guestbook
创建 API
运行以下命令创建一个新的 API(group/version 为 webapp/v1)以及其上的新 Kind(CRD)Guestbook:
kubebuilder create api --group webapp --version v1 --kind Guestbook
(可选)编辑 API 定义与调谐业务逻辑。更多信息见 设计一个 API 与控制器包含什么。
如果编辑了 API 定义,请生成诸如自定义资源(CR)或自定义资源定义(CRD)等清单:
make manifests
点击查看示例。(api/v1/guestbook_types.go)
// GuestbookSpec defines the desired state of Guestbook
type GuestbookSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file
// Quantity of instances
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=10
Size int32 `json:"size"`
// Name of the ConfigMap for GuestbookSpec's configuration
// +kubebuilder:validation:MaxLength=15
// +kubebuilder:validation:MinLength=1
ConfigMapName string `json:"configMapName"`
// +kubebuilder:validation:Enum=Phone;Address;Name
Type string `json:"type,omitempty"`
}
// GuestbookStatus defines the observed state of Guestbook
type GuestbookStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
// Important: Run "make" to regenerate code after modifying this file
// PodName of the active Guestbook node.
Active string `json:"active"`
// PodNames of the standby Guestbook nodes.
Standby []string `json:"standby"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// Guestbook is the Schema for the guestbooks API
type Guestbook struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec GuestbookSpec `json:"spec,omitempty"`
Status GuestbookStatus `json:"status,omitempty"`
}
试运行
你需要一个 Kubernetes 集群来作为运行目标。可以使用 KinD 获取一个用于测试的本地集群,或者针对远程集群运行。
在集群中安装 CRD:
make install
为获得快速反馈与代码级调试,运行控制器(它会在前台运行;如需保持运行,请切换到新的终端):
make run
安装自定义资源的实例
如果你在 Create Resource [y/n] 处输入了 y,则在 samples 中已为该 CRD 创建了一个 CR(如果你更改过 API 定义,请先编辑样例):
kubectl apply -k config/samples/
在集群中运行
当控制器准备好进行打包并在其他集群中测试时:
构建并将镜像推送到 IMG 指定的位置:
make docker-build docker-push IMG=<some-registry>/<project-name>:tag
使用 IMG 指定的镜像将控制器部署到集群:
make deploy IMG=<some-registry>/<project-name>:tag
卸载 CRD
从集群删除你的 CRD:
make uninstall
取消部署控制器
从集群中取消部署控制器:
make undeploy
使用插件
Kubebuilder 的设计基于插件,你可以使用可用插件为项目添加可选特性。
生成用于管理镜像的 API 与控制器
例如,你可以使用 deploy-image 插件 生成一个用于管理容器镜像的 API 与控制器:
kubebuilder create api --group webapp --version v1alpha1 --kind Busybox --image=busybox:1.36.1 --plugins="deploy-image/v1-alpha"
该命令会生成:
api/v1alpha1/busybox_types.go中的 API 定义internal/controllers/busybox_controller.go中的控制器逻辑internal/controllers/busybox_controller_test.go中的测试脚手架(使用 EnvTest 进行集成式测试)
让你的项目与生态变化保持同步
Kubebuilder 提供了 AutoUpdate 插件,帮助你的项目与最新的生态变化保持一致。当有新版本发布时,该插件会打开一个包含 Pull Request 对比链接的 Issue。你可以审阅更新,并在需要时使用 GitHub AI models 来理解保持项目最新所需的变更。
kubebuilder edit --plugins="autoupdate/v1-alpha"
该命令会在 .github/workflows/autoupdate.yml 生成一个 GitHub workflow 文件。
下一步
- 继续阅读入门指南(不超过 30 分钟),以打下坚实基础。
- 随后深入CronJob 教程,通过开发示例项目加深理解。
- 在设计你自己的 API 与项目之前,确保你理解 Groups、Versions 与 Kinds,哇哦! 中关于 API 与 Group 的概念。
