带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.2 Kubebuilder 模块分析(二)-阿里云开发者社区

开发者社区> 人民邮电出版社> 正文

带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.2 Kubebuilder 模块分析(二)

简介: 带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.2 Kubebuilder 模块分析
+关注继续查看

3.2.1       Manager初始化

通过构建 CRD的 API、Controller,我们已经明确,CRD 是用户自定义的资源,用户自定义它的协调逻辑。那么要想实现自定义 CRDController 协调逻辑的安装、运行,这离不开 Manager结构对象。那么Manager 是如何来初始化的呢?在介绍之前,我们先明确Kubernetes是一套以Go语言来实现的 PaaS编排平台。因此,这里实现的Controller主程序也是 Go语言支持的,它的入口方法是 main文件中的main()方法。

通过 Kubebuilder工具创建的 API资源,除了创建 CRD文件外,还生成了运行Controller文件的入口方法的 main文件。CRDmain文件的产生过程还是比较简单的,感兴趣的读者可以自行阅读Kubebuilder的源码(github上)。通过 main 的模板,根据定义的CRD类型、版本等信息,渲染出 main文件的内容。它的内容大致包含 Manager的初始化、CRD的安装、Manager的启动。

下面我们通过截取部分代码片段来帮助读者理解 Manager的初始化过程(不是连续的文件)。Manager初始化是借助于ctrl.NewManager 方法实现的,而这个方法的位置指向Controller-runtime包的 manager.New方法,在New 的方法中,实际是根据传入的参数进行 Manager对象的 Scheme、Cache、Client 等模块的初始化构建。这也是在前面介绍Kubebuilder框架时,我们提到的 Client、Cache等内容。而 Manager的New方法中的Scheme变量,是借助Kubebuilder工具,根据用户 CRD生成主程序main.go 的入口函数main方法传入的,即这里的Scheme已经绑定了用户 CRD。然后,初始化 Manager对象构建出来后,通过 Manager的Cache监听 CRD,一旦 CRD在集群中创建了,Cache监听到发生了变化,就会触发Controller的协调程序 Reconcile工作,具体内容见代码清单3-7。

//Kubebuilder初始化 Manager对象


 

mgr,err:=ctrl.NewManager(ctrl.GetConfigOrDie(),ctrl.Options{

Scheme:   scheme,MetricsBindAddress:metricsAddr,Port:       9443,

LeaderElection:        enableLeaderElection,

LeaderElectionID:       "{{hashFNV.Repo}}.{{.Domain}}",

})

//初始化失败,退出主程序

iferr!=nil{

setupLog.Error(err,"unabletostartmanager")os.Exit(1)

}

 

//controller-runtime/pkg/manager/manager.go⽂件中的New⽅法

funcNew(config*rest.Config,optionsOptions)(Manager,error){

return&controllerManager{

scheme:          options.Scheme,

cache:           cache,

client:          writeObj,

...

}

}

 

//Options定义了创建⼀个 Manager对象的参数结构体

typeOptionsstruct{Scheme*runtime.Scheme

...

}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS开发中 关于阿里云服务器的使用与安全策略 韩俊强的博客
使用背景:         云服务已经很多年了,早期没能加入使用云大军中的一员,后来后悔莫及。2015年记得当时没办法租用的虚拟主机三天两天挂了,导致我认认真真的考虑了一次,觉得还是要使用云服务器! 从免费的主机屋学习版到各种虚拟机的实验,再到之前是用300元左右买的别人的虚拟主机,空间有几G,感觉还行,正好又值他们搞活动,买两年送一年!预存还有返还!心动了,就没有任何考虑就预存了一千块! 开始的几个月感觉还行,速度什么的还过得去,就没去管网站的事了。
1277 0
阿里巴巴的云原生与开发者 | 10月15号栖夜读
今天的首篇文章,讲述了 : 利用云原生技术构建应用简便快捷,部署应用轻松自如,运行应用按需伸缩。如今,云原生已经成为下一代技术发展的趋势。在 2019 杭州云栖大会开发者峰会上,阿里巴巴资深技术专家李响就为大家分享了阿里巴巴的云原生技术与开发者的那些故事。
2883 0
KubeMeet 杭州站报名:「云原生应用管理」开发者专场来啦!
4月17日杭州,云原生基金会CNCF和阿里巴巴联合主办的「KubeMeet 开发者沙龙·云原生应用管理专场」来啦!这里有Kubernetes 生态开发者都在关注的开源项目,以及阿里巴巴、携程、第四范式的一线云原生落地实践。赶紧报名吧!
782 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
8268 0
extjs desktop 应用项目:教学资源库云平台
采用extjs desktop  界面截图网址: http://www.linbsoft.com/LinBSoft/zykpreview/ demo网址: http://demo.
950 0
这个云原生开发的痛点你遇到了吗?
上云从来都不是一片坦途,在此过程中我们总会遇到一些困难和挑战,得益于云原生技术的日益成熟,这些问题一定会有相应的解法。
8247 0
【云开发小课】云原生体系下Serverless弹性探索与实践
篇内容分享了云开发小课的云原生体系下serverless弹性探索与实践。
111 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载