快速入门
本快速入门指南将涵盖以下内容:
先决条件
安装
安装 kubebuilder:
# 下载 kubebuilder 并在本地安装。
curl -L -o kubebuilder "https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)"
chmod +x kubebuilder && mv kubebuilder /usr/local/bin/
创建项目
创建一个目录,然后在其中运行 init 命令以初始化一个新项目。以下是一个示例。
mkdir -p ~/projects/guestbook
cd ~/projects/guestbook
kubebuilder init --domain my.domain --repo my.domain/guestbook
创建 API
运行以下命令以创建一个名为 webapp/v1
的新 API(组/版本),并在其中创建一个名为 Guestbook
的新 Kind(CRD):
kubebuilder create api --group webapp --version v1 --kind Guestbook
可选步骤: 编辑 API 定义和调和业务逻辑。有关更多信息,请参阅设计 API和控制器概述。
如果您正在编辑 API 定义,可以使用以下命令生成诸如自定义资源(CRs)或自定义资源定义(CRDs)之类的清单:
make manifests
点击此处查看示例。(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=Phone;Address;Name
Type string `json:"alias,omitempty"`
}
// GuestbookStatus 定义了 Guestbook 的观察状态
type GuestbookStatus struct {
// 插入其他状态字段 - 定义集群的观察状态
// 重要提示:在修改此文件后运行 "make" 以重新生成代码
// 活动的 Guestbook 节点的 PodName
Active string `json:"active"`
// 待机的 Guestbook 节点的 PodNames
Standby []string `json:"standby"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// Guestbook 是 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
安装自定义资源实例
如果按 y
键创建资源 [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
下一步
现在,查看架构概念图以获得更好的概述,并跟随CronJob 教程,以便通过开发演示示例项目更好地了解其工作原理。