生成代码
因为kubebuilder 命令工具需要依赖linux环境 所以本例方法使用git 同步代码
在window开发后提交 linux项目里拉代码运行的方式
创建go mod 项目
go mod init kubebuild_demo
初始化项目 生成基础框架 domain 生成group用的
kubebuilder init --domain example.com
创建api 也就是生成自定义资源相关代码 包括crd 跟controller
kubebuilder create api --group ingress --version v1beta1 --kind App
创建webhook 准入控制 可以验证也可以修改用户提交后的值 defaulting 指定默认值 programmatic-validation 校验 conversion 不同版本转换
kubebuilder create webhook --group ingress --version v1beta1 --kind App --defaulting --programmatic-validation --conversion
写代码
定义字段
api/v1beta1/app_types.go
增加字段
type AppSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run “make” to regenerate code after modifying this file
// Foo is an example field of App. Edit app_types.go to remove/update
//是否创建ingress
EnableIngress bool `json:"enable_ingress,omitempty"`
//是否创建service
EnableService bool `json:"enable_service"`
//创建deployment的副本数量
Replicas int32 `json:"replicas"`
//创建deployment的镜像数量
Image string `json:"image"`
}
根据修改生成对应代码及配置文件
make manifests
在internal\controller\app_controller.go中写对应逻辑代码
Reconcile方法 里是调谐逻辑
SetupWithManager方法 注册要监听的资源对象Owns 监听的资源 并与控制器所管理的主资源进行关联 这样就可以在删除主资源时同时删除关联资源
安装crd到集群
make install
linux上本地运行程序进行调试
make run
部署
1 构建镜像
make docker-build IMG=kubebuilddemo:v1.0