快速开始

本快速入门指南将涵盖:

前提条件

  • go 版本 v1.23.0+
  • 您已安装的 docker 版本为 17.03 或更高。
  • kubectl 版本 v1.11.3 及以上。
  • 访问 Kubernetes v1.11.3+ 集群。

安装

安装 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 教程,通过开发一个示例项目来加深您的理解。