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

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

带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(八)

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

3.3.4        Client

 

1. Client的初始化

 

在介绍Client之前,需要引入restClient 结构,它是最底层的基础结构,可以直接通过restClient提供的 RESTful方法 , 如 Get()、Put()、Post()、Delete() 进行交互, 支持 JSON和 protobuf传输数据,以及所有原生资源和 CRD。一般情况下,要先通过 Clientset封装restClient,然后对外提供接口和服务。

那么本节介绍的Client和restClient是什么关系呢?首先我们通过代码清单3-41来分析。当我们启动自定义的CRDController时,一般可以通过如下方式来定义它的结构体。

typeDemoReconcilerstruct{client.Client

Log


}

这里 Client的作用比较清晰,就是在 CRDController 执行协调的过程中,需要通过ClientCRUD(Create、Retrieve、Update、Delete)CRD,即Get、Create等方法。所以 DemoReconciler的结构体第一个元素的对象,指向的是 Controller-runtime包中的 Client接口对象,它设计了必要的方法,如 Get、List、Update 等,见代码清单 3-42。

typeClientinterface{

ReaderWriterStatusClient

}

typeReaderinterface{

Get(ctxcontext.Context,keyObjectKey,objObject)error

 

List(ctxcontext.Context,listObjectList,opts...ListOption)error

}

 

//Writer接⼝定义如何创建、删除、更新Kubernetes对象

typeWriterinterface{

Create(ctx context.Context, obj Object, opts ...CreateOption) errorDelete(ctx context.Context, obj Object, opts ...DeleteOption) errorUpdate(ctxcontext.Context,objObject,opts...UpdateOption)error

}

 

 

2. Client的结构分析

 

有了 Client结构之后,结合我们介绍的restClient,读者能够联想到 Client本质上就是 restClient,只是 Client做了很多上层的封装,便于用户使用。下面我们进一步分析 Client是如何赋值的,即它的实例化对象。首先,我们简单回顾一下前面章节介绍的Manager的作用,它初始化了 Client、注册了 CRDScheme及 Reconciler 的对象。因此,这里的 Client可以通过 Manager初始化产生,可通过 manager.GetClient方法获得,具体方法的实现不作为本节重点,读者可参考 Github。这个方法的实质过程是通过 k8s的kubeconfig文件生成可访问的restClient对象,因此,它具备了对k8s 所有资源的操作方法,即 CRUD的过程。

至此,我们通过分析上述案例,明确了ClientrestClient的关系,那么在Controller-runtime 的包中,Client 实例化后的结构体如何理解各元素呢?见代码清单 3-43。

typeclientstruct{

typedClient                  typedClientunstructuredClientunstructuredClientmetadataClient            metadataClientscheme       *runtime.Scheme

mapper             meta.RESTMapper

}

 

typedClient表明是 k8s内部资源已经封装好的 Client,比如 CoreGroup下的所有资源,包括 Pod、Deploy等,换句话说,如果是自定义的 CRD,则 Client无法处理它。因此,必须设计一个新的 Client,能够处理 CRD的资源对象,UnstructuredClient实现了这一点,它的功能就是通过 restClient,借助 APIServer访问所有的 k8s资源,MetadataClient的作用是操作元数据资源,Scheme对定义的资源对象 GVK等关系进行访问,Mapper用于反射 Meta资源的处理逻辑。

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

相关文章
Android开发中StackOverflowError
<div class="edit_area" id="330486" style="color:rgb(51,51,51); font-family:Arial; font-size:14px; line-height:26px"> <div style="margin:17pt 0cm 16.5pt"><strong><span style="font-size:32px">Andro
1085 0
阿里巴巴的云原生与开发者 | 10月15号栖夜读
今天的首篇文章,讲述了 : 利用云原生技术构建应用简便快捷,部署应用轻松自如,运行应用按需伸缩。如今,云原生已经成为下一代技术发展的趋势。在 2019 杭州云栖大会开发者峰会上,阿里巴巴资深技术专家李响就为大家分享了阿里巴巴的云原生技术与开发者的那些故事。
2880 0
iOS开发笔记 6、View Controllers【MVC】
了解和熟悉这个对后续的开发很重要。   关于这个的参考资料 ■ View Controller Programming Guide for iOS For information about structuring and managing your application’s user interface http://developer.
861 0
C# WinForm多线程开发(二) ThreadPool 与 Timer
原文地址:点击打开链接 [摘要]本文介绍C# WinForm多线程开发之ThreadPool 与 Timer,并提供详细的示例代码供参考。 本文接上文,继续探讨WinForm中的多线程问题,再次主要探讨threadpool 和timer。 一 、ThreadPool 线程池(ThreadPool)是一种相对较简单的方法,它适应于一些需要多个线程而又较短任务(如一些常
1332 0
IOS开发之----UIScrollView滚动条视图的使用
<p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal; color:rgb(73,73,73); font-size:13px; font-family
1162 0
安卓开发之ScrollView
当界面不足以将所有的内容显示出来的时候便导致下面的部分内容无法显示出来 所有加上ScrollView 来讲要显示的内容放入之中便可以实现上下滚动界面内容 但是当要显示多个控件的时候会出错  原因是ScrollView只能有一个子控件  解决方法就是 用一个LinearLayout(或者别的布局)...
545 0
iOS翻页视图控制器UIPageViewController的应用(一)
iOS翻页视图控制器UIPageViewController的应用
13 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载