带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.1 Kubebuilder 介绍与架构(一)-阿里云开发者社区

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

带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.1 Kubebuilder 介绍与架构(一)

简介: 带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.1 Kubebuilder 介绍与架构
+关注继续查看

3.1.1         什么是 Kubebuilder

通过前面章节的介绍,我们了解到 Kubebuilder是一个用 Go语言构建 KubernetesAPIs的框架,通过使用Kubebuilder,用户可以遵循一套简单的编程框架,使用 CRD构建 API、Controllers和 AdmissionWebHooks,实现对 k8s的扩展。

Kubebuilder中 的 主 要 组 件 包 含 Manager、Cache、Client与 Finalizers。 其 中,Manager组件主要实现管理外层,负责初始化Controller、Cache、Client的工作;Cache组件负责生成SharedInformer,Watch关注的GVK下的GVR 的变化(增、删、改),以触发 Controller的 Reconcile逻辑;Client组件在工作中实现对资源进行 CURD操作,CURD操作封装到 Client 中进行,其中的写操作(增、删、改)直接访问 APIServer,读操作(查)对接的是本地的 Cache;Finalizers组件主要用于处理 Kubernetes资源的预删除逻辑,保障资源被删除后能够从 Cache中读取到,清理相关的其他资源。

3.1.2       Kubebuilder 架构

Kubebuilder 这 种“ 脚手架”工具,将 Kubernetes的可扩展能力 CRD 进 行了简化封装, 那么它是如何实现的呢? 下面来介绍Kubebuilder的架构及实现原理。Kubebuilder架构如图 3-1所示。

Kubebuil-der 总体上将它涉及的资源所属位置划分为四大块:UserDefined、APIScaffolds、ControllerRuntime、

Kubernetes集群。                                            

KubebuilderScaffolds是实现这个脚手架最核心的逻辑,它借助 APIScaffolder对象模块,实现了 CRD的 Template和 Controller的核心代码块。

CRD的定义和 Controller 两个最核心的内容构建完成后,Userdefined 的模块开始发挥作用,主要是用户根据实际场景,设计 CRD的结构定义,当然这里的 CRD的数量可以有多个;另外,用户需要实现 Reconcile的逻辑,Reconcile 有什么用?为什么要实现它?这是我们即将介绍的ControllerRuntime模块的重点工作。这里,首先了解 Reconcile的含义,用户自定义了CRD结构,而在 Kubernetes集群中,想要实现这样的 CRD 结构定义,Reconcile 需要协调逻辑。举例来说,假设用户定义了 MysqlCluster{Name:demo,Num:3} 这样的结构体,而希望在系统中创建MySQL的集群,而构造 MySQL 集群的构造过程,就是 Reconcile过程做的工作。

用户自定义的部分能工作的前提是要有一个 Kubernetes集群,即架构中最下面的部分,它负责安装 CRD及运行 Controller。而如何运行 Controller及其核心逻辑?通过ControllerRuntime库可以实现。

在 ControllerRuntime模块中,Kubebuilder构建出来的 CRD会注册到 Scheme模块,它提供了 Kinds与对应的 GoType的映射,即给定了 GoType,就能够知道它的GKV(GroupKindVerision),这也是Kubernetes所有资源的注册模式。举例来说,我们给定了一个Scheme,“demo1.example.org/v1”.Demo{},这个GoType映射到demo1. example.org/v1的 DemoGVK,从 Kubernetes的 APIServer获取的部分 JSON内容见代码清单 3-1。

{

"apiVersion":"demo1.example.org/v1","kind":"Demo",

"metadata":{

...


}

 

通过这个 GoType,能够正确地获取 GVR的信息,从而提供给 Controller, 获取期望的状态,即协调的逻辑。而在ControllerRuntime中Controller最依赖的除了Scheme之外,还包括 Manager 的初始化、安装和启动工作。Manager 的初始化依赖 ControllerRuntime库初始化 Manager对象,包括 Client、Cache 等模块的生成工作。然后 Client就可以实现对CRD的“增、删、改、查,即创建、删除、更新、查询等过程,而查询的逻辑是通过本地的Cache 模块实现的。这里的Cache 负责监听CRD 的变化,它是通过监听Scheme,从而收集所有与 Controller有关的GVR 资源,并创建对应的监听器,从而实现当监听到Kubernetes集群中的CRD发生变化触发 Controller的协调进程Reconcile工作。

除此之外,Kuberbuilder工具生成的内容还包括 Finalizer,它用于处理   Kubernetes资源的预删除逻辑,保障资源被删除后能够从 Cache中读取到,清理相关的其他资源;OwnerReference用于清理资源时, 对于任何一个对象, 若它的 OwnerReference字段值为待删除对象,则这个对象也会被清理,支持对象的变更,也会触发 Owner对象的Controller 的协调过程;Index 用于提供资源的缓存,提升客户端资源的查询效率。

 

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

相关文章
【译】Databricks使用Spark Streaming和Delta Lake对流式数据进行数据质量监控介绍
本文主要对Databricks如何使用Spark Streaming和Delta Lake对流式数据进行数据质量监控的方法和架构进行了介绍,本文探讨了一种数据管理架构,该架构可以在数据到达时,通过主动监控和分析来检测流式数据中损坏或不良的数据,并且不会造成瓶颈。
1087 0
Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍
原文地址:http://android.xsoftlab.net/training/transitions/index.html 引言 Activity所呈现的UI经常会由用户的输入或者其它事件而发生变化。
815 0
iOS开发中 关于阿里云服务器的使用与安全策略 韩俊强的博客
使用背景:         云服务已经很多年了,早期没能加入使用云大军中的一员,后来后悔莫及。2015年记得当时没办法租用的虚拟主机三天两天挂了,导致我认认真真的考虑了一次,觉得还是要使用云服务器! 从免费的主机屋学习版到各种虚拟机的实验,再到之前是用300元左右买的别人的虚拟主机,空间有几G,感觉还行,正好又值他们搞活动,买两年送一年!预存还有返还!心动了,就没有任何考虑就预存了一千块! 开始的几个月感觉还行,速度什么的还过得去,就没去管网站的事了。
1267 0
《阿里巴巴Java开发规约》插件使用介绍
一、简介     阿里巴巴于10月14日在杭州云栖大会上,正式发布了《阿里巴巴Java开发规约》扫描插件!该插件基于《阿里巴巴Java开发规约》手册内容,在扫描代码后,将不符合规约的代码按Blocker/Critical/Major三个等级显示在下方,甚至在IDEA上,还基于Inspection机制提供了实时检测功能,编写代码的同时也能快速发现问题所在。
2047 0
单片机复位电路原理介绍
复位电路的工作原理在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2us就可以实现,那这个过程是如何实现的呢?在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。
1586 0
Android StrictMode介绍
转:http://www.blueowls.net/android-strictmode%E4%BB%8B%E7%BB%8D/   /** * enables "strict mode" for testing - should NEVER be used in release builds */ @TargetApi(Build.
613 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载