快速开始
本快速入门指南将涵盖:
前提条件
安装
安装 kubebuilder:
# 下载 kubebuilder 并在本地安装。
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
创建一个API
运行以下命令以创建一个新的 API(组/版本)webapp/v1
,并在其上创建新的 Kind(CRD)Guestbook
:
kubebuilder create api --group webapp --version v1 --kind Guestbook
可选: 编辑 API 定义和调整业务逻辑。有关更多信息,请参见 设计 API 和 控制器中的内容。
如果您正在编辑 API 定义,请使用生成清单,例如自定义资源(CRs)或自定义资源定义(CRDs)。
make manifests
Click here to see an example. (api/v1/guestbook_types.go)
// GuestbookSpec 定义了 Guestbook 的期望状态
type GuestbookSpec struct {
// 插入额外的规格字段 - 集群的期望状态
// 注意:修改此文件后,运行"make"以重新生成代码
// 实例数量
// +kubebuilder:validation:Minimum=1
// +kubebuilder:validation:Maximum=10
Size int32 `json:"size"`
// GuestbookSpec 配置的 ConfigMap 名称
// +kubebuilder:validation:MaxLength=15
// +kubebuilder:validation:MinLength=1
ConfigMapName string `json:"configMapName"`
// +kubebuilder:validation:Enum=电话;地址;名称
Type string `json:"type,omitempty"`
}
// GuestbookStatus 定义了 Guestbook 的观察状态
type GuestbookStatus struct {
// 插入额外的状态字段 - 定义集群的观察状态
// 重要:在修改此文件后,请运行 "make" 以重新生成代码
// 活动的 Guestbook 节点的 Pod 名称。
Active string `json:"active"`
// 待命 Guestbook 节点的 Pod 名称。
Standby []string `json:"standby"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// Guestbook 是 guestbooks API 的 Schematype 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
安装自定义资源的实例
如果你按下 y
来创建资源(Create Resource) [y/n],那么你就在你的示例中为你的 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
下一步
- 现在,请查看架构概念图以获得更清晰的概述。
- 接下来,请阅读 入门指南,这应该不会超过 30 分钟,并且会提供扎实的基础。之后,请深入阅读 CronJob 教程,通过开发一个示例项目来加深您的理解。