kubebuilder 中文文档由云原生社区主导翻译。任何问题可以在这儿提issue。issue模版可以参考这个

快速入门

快速入门包含如下内容:

依赖组件

  • go version v1.15+.
  • docker version 17.03+.
  • kubectl version v1.11.3+.
  • kustomize v3.1.0+
  • 能够访问 Kubernetes v1.11.3+ 集群

安装

安装 kubebuilder:

os=$(go env GOOS)
arch=$(go env GOARCH)

# 下载 kubebuilder 并解压到 tmp 目录中
curl -L https://go.kubebuilder.io/dl/2.3.1/${os}/${arch} | tar -xz -C /tmp/

If you are using a Kubebuilder plugin version less than version v3+, you must configure the Kubernetes binaries required for the envtest, run:

# 将 kubebuilder 移动到一个长期的路径,并将其加入环境变量 path 中
# (如果你把 kubebuilder 放在别的地方,你需要额外设置 KUBEBUILDER_ASSETS 环境变量)

sudo mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder
export PATH=$PATH:/usr/local/kubebuilder/bin

Kubebuilder 通过 kubebuilder completion <bash|zsh> 命令为 Bash 和 Zsh 提供了自动完成的支持,这可以节省你大量的重复编码工作。更多信息请参见 completion 文档。

创建一个项目

创建一个目录,然后在里面运行 kubebuilder init 命令,初始化一个新项目。示例如下。

mkdir $GOPATH/src/example
cd $GOPATH/src/example
kubebuilder init --domain my.domain

创建一个 API

运行下面的命令,创建一个新的 API(组/版本)为 “webapp/v1”,并在上面创建新的 Kind(CRD) “Guestbook”。

kubebuilder create api --group webapp --version v1 --kind Guestbook

可选项: 编辑 API 定义和对账业务逻辑。更多信息请参见 设计一个 API控制器

示例 `(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:"alias,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

安装 CR 实例

如果你按了 y 创建资源 [y/n],那么你就为示例中的自定义资源定义 CRD 创建了一个自定义资源 CR (如果你更改了 API 定义,请务必先编辑它们)。

kubectl apply -f 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 教程,通过开发一个演示示例项目更好地理解 kubebuilder 的工作原理。