kubernetes crd operator

kubernetes crd operator 开发
声明:这篇文章主要是我个人开发crd过程中的相关学习以及总结,其中包括网上看到的已有成果和个人心得。
kubernetes相关crd概念不做过多介绍,这里主要介绍开发crd两个相关的framework,包括:operator-sdk和kubebuilder。
operator-sdk 官网:https://sdk.operatorframework...
kubebuilder 官网:https://book.kubebuilder.io/q...

关于operator-sdk编写operator的例子,可以参考以下链接:
https://zhuanlan.zhihu.com/p/...
链接当中已经包括了从安装,到创建一个简单的deployment以及service,链接的中例子应该有一个小小的失误,我已在评论中提出。注意,operator-sdk相关版本不一样可能会导致生成的东西有小小差异。关于operator-sdk的安装也可以参考官网,官网已经做了详细的描述,官网安装链接:
https://sdk.operatorframework...
安装完毕之后,operator-sdk官网有两种不同开发方式:一种是基于ansible;一种是基于golang的,我选择的是基于golang的。基于golang的operator开发,官网已经给出了详细的步骤,不做过多描述。

接下来说一下我个人开发过程中遇到的一些点:
1)开发过程中,如果每次都部署到集群中去调试非常的浪费时间,可以在本地进行调试:
使用以下命令进行本地调试,注意:operator-sdk启动时默认是从本地.kube/config配置文件读取集群配置信息。项目启动命令:
1>首先要部署CRD文件
2>在项目目录下执行命令:operator-sdk run --local
通过上述两步即可启动项目,进行本地调试。

在开发过程中涉及到需要修改所定义类型的spec(即修改*_type.go文件),这是需要执行如下命令重新生成code:
operator-sdk generate k8s
上述是使用operator-sdk开发crd时我个人的一些总结。
注意:我是使用goland开发,由于网络原因,一些包可能下载不下来,在goland中设置go的proxy,我是用的是https://goproxy.cn

使用kubebuilder开发crd。
kubebuilder安装:
官网:
https://book.kubebuilder.io/q...
安装完毕之后,根据官网描述创建项目进行开发,开发之前建议先看一下以下链接的内容:
https://www.cnblogs.com/alisy...
也可以从网上找一个kubebulder创建operator的例子进行参考。

关于operator-sdk以及kubebuilder的区别,参考以下链接:
https://www.zhihu.com/questio...
https://github.com/operator-f...

通过对上述两个不同的framework对crd进行开发,其实需要做的就是在controller的func (r *RedisClusterReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error)方法下添加控制逻辑。

总结以下我个人开发operator的大致思路:
给有状态中间件做编排首先涉及到的就是kubernetes中的statefulset资源对象。
1)根据cr传递的属性值创建符合逻辑的statefulset,其中可能涉及到配置相关的configmap(configmap加载有延时,另外如果程序中如果不支持配置参数的热加载,可能需要在程序中进行处理)以及headless service以及普通service、PDB、PV、pvc等资源。
2)创建完上述资源之后,根据中间件各自的属性进行集群关系的组织

上述是个人开发operator历程的一些总结,其中还有很多没有涉及到方面,如有错误请多多指教。

你可能感兴趣的:(kubernetes)