这篇文章主要介绍“生成CRD与自定义控制器的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“生成CRD与自定义控制器的方法”文章能帮助大家解决问题。我们可以使用code-generator 以及controller-tools来进行代码自动生成,通过代码自动生成可以帮我们自动生成 CRD 资源对象,以及客户端访问的 ClientSet、Informer、Lister 等工具包,接下来我们就来了解下如何编写一个自定义的控制器。首先初始化项目:在该文件夹下新建doc.go
文件,内容如下所示:根据 CRD 的规范定义,这里我们定义的 group 为example.com
,版本为v1
,在顶部添加了一个代码自动生成的deepcopy-gen
的 tag,为整个包中的类型生成深拷贝方法。然后就是非常重要的资源对象的结构体定义,新建types.go
文件,types.go内容可以使用type-scaffpld
自动生成,具体文件内容如下:然后可以参考系统内置的资源对象,还需要提供 AddToScheme 与 R免费云主机域名esource 两个变量供 client 注册,新建 register.go 文件,内容如下所示:使用controller-gen
生成crd:生成example.com_bars.yaml文件如下所示:最终项目结构如下所示:上面我们准备好资源的 API 资源类型后,就可以使用开始生成 CRD 资源的客户端使用的相关代码了。首先创建生成代码的脚本,下面这些脚本均来源于sample-controller提供的示例:在该目录下面新建 tools.go 文件,添加 code-generator 依赖,因为在没有代码使用 code-generator 时,go module 默认不会为我们依赖此包。文件内容如下所示:然后新建 update-codegen.sh 脚本,用来配置代码生成的脚本:同样还有 verify-codegen.sh 脚本,用来校验生成的代码是否是最新的:还有一个为生成的代码文件添加头部内容的 boilerplate.go.txt 文件,内容如下所示,其实就是为每个生成的代码文件头部添加上下面的开源协议声明:接下来我们就可以来执行代码生成的脚本了,首先将依赖包放置到 vendor 目录中去:然后执行脚本生成代码:代码生成后,整个项目的 pkg 包变成了下面的样子:仔细观察可以发现pkg/apis/example.com/v1目录下面多了一个zz_generated.deepcopy.go文件,在pkg/client文件夹下生成了 clientset和 informers 和 listers 三个目录,有了这几个自动生成的客户端相关操作包,我们就可以去访问 CRD 资源了,可以和使用内置的资源对象一样去对 Bar 进行 List 和 Watch 操作了。首先要先获取访问资源对象的 ClientSet,在项目根目录下面新建 main.go 文件。首先初始化一个用于访问 Bar 资源的 ClientSet 对象,然后同样新建一个 Bar 的 InformerFactory 实例,通过这个工厂实例可以去启动 Informer 开始对 Bar 的 List 和 Watch 操作,然后同样我们要自己去封装一个自定义的控制器,在这个控制器里面去实现一个控制循环,不断对 Bar 的状态进行调谐。在项目根目录下新建controller.go文件,内容如下所示:我们这里自定义的控制器只封装了一个 Informer 和一个限速队列,我们当然也可以在里面添加一个用于访问本地缓存的 Indexer,但实际上 Informer 中已经包含了 Lister,对于 List 和 Get 操作都会去通过 Indexer 从本地缓存中获取数据,所以只用一个 Informer 也是完全可行的。同样在 Informer 中注册了3个事件处理器,将监听的事件获取到后送入 workqueue 队列,然后通过控制器的控制循环不断从队列中消费数据,根据获取的 key 来获取数据判断对象是需要删除还是需要进行其他业务处理,这里我们同样也只是打印出了对应的操作日志,对于实际的项目则进行相应的业务逻辑处理即可。到这里一个完整的自定义 API 对象和它所对应的自定义控制器就编写完毕了。接下来我们直接运行我们的main函数:现在我们创建一个Bar资源对象:直接创建上面的对象,注意观察控制器的日志:可以看到,我们上面创建 bar.yaml 的操作,触发了 EventHandler 的添加事件,从而被放进了工作队列。然后控制器的控制循环从队列里拿到这个对象,并且打印出了正在处理这个 bar 对象的日志信息。同样我们删除这个资源的时候,也会有对应的提示。关于“生成CRD与自定义控制器的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。
相关推荐: Windows Server2012 R2安装Docker的方法
本篇内容主要讲解“WindowsServer2012R2安装Docker的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“WindowsServer2012R2安装Docker的方法”吧!windows10、Wi…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。