本快速入门指南将涵盖以下内容:
- go version v1.13+.
- 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/
# 将 kubebuilder 移动到一个长期的路径,并将其加入环境变量 path 中
# (如果你把 kubebuilder 放在别的地方,你需要额外设置 KUBEBUILDER_ASSETS 环境变量)
sudo mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder
export PATH=$PATH:/usr/local/kubebuilder/bin
请使用 master 分支的 kubebuilder 进行构建
另外,你可以从
https://go.kubebuilder.io/dl/latest/${os}/${arch}
下载安装包
创建一个目录,然后在里面运行 kubebuilder init
命令,初始化一个新项目。示例如下。
mkdir $GOPATH/src/example
cd $GOPATH/src/example
kubebuilder init --domain my.domain
如果你的 kubebuilder 安装目录不在 $GOPATH
中,你需要运行 go mod init <modulename>
来告诉 kubebuilder 和 Go module 的基本导入路径。
若要进一步了解 GOPATH
,参阅 如何编写Go代码 页面文档中的 GOPATH 环境变量 章节。
确保你已经执行 $ export GO111MODULE=on
命令来激活模块支持,以解决像 cannot find package .... (from $GOROOT)
这样的问题。
运行下面的命令,创建一个新的API(组/版本)为 "webapp/v1",并在上面创建新的 Kind(CRD) "Guestbook"。
kubebuilder create api --group webapp --version v1 --kind Guestbook
如果你在 Create Resource [y/n] 和 Create Controller [y/n] 中按y
,那么这将创建文件 api/v1/guestbook_types.go
,该文件中定义相关 API ,而针对于这一类型 (CRD) 的对账业务逻辑生成在 controller/guestbook_controller.go
文件中。
可选项: 编辑API定义和对账业务逻辑。更多信息请参见设计一个API和控制器。
// 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"`
}
type Guestbook struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec GuestbookSpec `json:"spec,omitempty"`
Status GuestbookStatus `json:"status,omitempty"`
}
你需要一个Kubernetes集群来运行。 你可以使用KIND来获取一个本地集群进行测试,也可以在远程集群上运行。
你的控制器将自动使用你的 kubeconfig
文件中的当前上下文(即无论群集 kubectl cluster-info
显示的是什么群集)。
将CRD安装到集群中
make install
运行控制器(这将在前台运行,如果你想让它一直运行,请切换到新的终端)。
make run
如果你按了 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
如果你遇到RBAC错误,你可能需要授予自己集群管理员权限或以管理员身份登录。请参考在GKE集群 v1.11.x 及以上版本上使用 Kubernetes RBAC 的组件依赖可能是你的情况。
从你的集群中删除 CRD
make uninstall
现在,参照CronJob教程,通过开发一个演示示例项目更好地理解 kubebuilder 的工作原理。