快速入门
快速入门包含如下内容:
依赖组件
- 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 的工作原理。