快速入门

本快速入门指南将涵盖以下内容:

先决条件

  • go 版本 v1.20.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 && 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 教程,以便通过开发演示示例项目更好地了解其工作原理。