一、概念
在了解operator之前,我也是一脸蒙蔽。这玩意是啥,没见书上提到过。后来知道了 就是一个脚手架,在我们开发自定义资源的时候,operator能够帮我们把我们需要的一些文件都准备好,包括CRD的yaml文件、ControllerManager的go文件等等。再详细的原理,我就不贴图片了,大家自己去找吧,反正网上很多相关资料。
二、安装operator
我的本地环境是windows,一开始是尝试的clone代码到本地编译的,后来试了几次都有问题,官方也说他们没有尝试过windows环境的编译,所以也不知道出了什么问题。所以跑了一个新的虚拟机。
https://blog.csdn.net/leehomjan/article/details/90735103
参考这篇文章吧环境搭好了。文章中的operator-sdk版本是RELEASE_VERSION=v0.8.0。我建议用RELEASE_VERSION=v0.15.0,不要用最新的v1.0也不要用什么v0.19.0之类的。因为这东西一直在更新,差一个版本差别好大。然后开发的流程是参考的这个。
https://www.bilibili.com/video/BV1zE411j7ky
这个视频中就是v0.15.0,如果不是这个版本到时候会昏头转向。
三、创建项目和创建CRD
创建项目:
operator-sdk new imoocpod-operator --skip-validation=true --repo=github.com/imooc-com/imoocpod-operator
新增api
operator-sdk add api --api-version=k8s.imooc.com/v1alpha1 --kind=ImoocPod
新增controller
operator-sdk add controller --api-version=k8s.imooc.com/v1alpha1 --kind=ImoocPod
完成后代码如下
.
|-- build
| |-- bin
| | |-- entrypoint
| | `-- user_setup
| |-- Dockerfile
| `-- _output
| `-- bin
| `-- imoocpod-operator
|-- cmd
| `-- manager
| `-- main.go
|-- deploy
| |-- crds
| | |-- k8s.imooc.com_imoocpods_crd.yaml
| | `-- k8s.imooc.com_v1alpha1_imoocpod_cr.yaml
| |-- operator.yaml
| |-- role_binding.yaml
| |-- role.yaml
| `-- service_account.yaml
|-- go.mod
|-- go.sum
|-- pkg
| |-- apis
| | |-- addtoscheme_k8s_v1alpha1.go
| | |-- apis.go
| | `-- k8s
| | |-- group.go
| | `-- v1alpha1
| | |-- doc.go
| | |-- imoocpod_types.go
| | |-- register.go
| | `-- zz_generated.deepcopy.go
| `-- controller
| |-- add_imoocpod.go
| |-- controller.go
| `-- imoocpod
| `-- imoocpod_controller.go
|-- tools.go
`-- version
`-- version.go
15 director