带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(九)-阿里云开发者社区

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

带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(九)

简介: 带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理
+关注继续查看

前面我们介绍的是标准的 DiscoveryClient,由于 GVR 信息变动很少,因此,可以将KubernetesAPIServer 返回的 GVR 信息缓存在本地,以此减轻 KubernetesAPIServer的压力,这里可以使用 Discover/Cached目录下的两个客户端:CachedDiscoveryClient和 memCacheClient,分别将 GVR 信息缓存到本地文件(~/.kube/cache和 ~/.kube/http-cache)和内存中。

Kubectl的 apiVersions命令就是利用 CachedDiscoveryClient来实现的, 如 API-VersionsOptions结构体中 discoveryClient 变量是 CachedDiscoveryInterface 类型,而CachedDiscoveryClient结构体实现了该接口,且在 APIVersionsOptions的 Complete方法中会将CachedDiscoveryClient客户端赋值到discoveryClient变量(见代码清单2-30)。


//APIVersionsOptionshavethedatarequiredforAPIversionstypeAPIVersionsOptionsstruct{

discoveryClientdiscovery.CachedDiscoveryInterface

 

genericclioptions.IOStreams

}


 

CachedDiscoveryClient获取Group、Version和 Resource的流程与 DiscoveryClient类似,只是在 ServerResourcesForGroupVersion 方法的实现上存在差异。

(1)  CachedDiscoveryClient首先通过 getCachedFile 方法查找本地缓存。

(2)  如果信息不存在(未命中)或超时时才会通过 CachedDiscoveryClient结构体成员 delegate的 ServerResourcesForGroupVersion方法访问 KubernetesAPIServer,此时相当于通过DiscoveryClient访问(见代码清代2-31)。

typeCachedDiscoveryClientstruct{delegatediscovery.DiscoveryInterface

//...


}

 

(3) 最后通过 writeCachedFile方法将 KubernetesAPIServer 返回的数据存储在本地硬盘。

具体代码分析见代码清单 2-32

func(d*CachedDiscoveryClient)ServerResourcesForGroupVersion(groupVersion

string)(*metav1.APIResourceList,error){

//查找本地缓存

filename:=filepath.Join(d.cacheDirectory,groupVersion,"serverresources.

json")

cachedBytes,err:=d.getCachedFile(filename)

 

//...

//利⽤ DiscoveryClient中的 RESTClient访问KubernetesAPIServer

liveResources,err:=d.delegate.ServerResourcesForGroupVersion(groupVersion)

 

//...

//将 KubernetesAPIServer响应的数据缓存到本地硬盘

iferr:=d.writeCachedFile(filename,liveResources);err!=nil{

//...


}

 

另一种实现方法 memCacheClient与之类似,只是将数据缓存在 map[string]*cacheEntry类型中。


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

相关文章
NLP之TopicModel:朴素贝叶斯NB的先验概率之Dirichlet分布的应用
NLP之TopicModel:朴素贝叶斯NB的先验概率之Dirichlet分布的应用
11 0
Spring Cloud Alibaba系列(六)sentinel的实际应用
上一章中我们通过Dashboard来为Sentinel客户端设置各种各样的规则,但是这些规则默认是存放在内存中,极不稳定,无法用于生成环境,所以需要将其持久化。
613 0
数十万应用结点全息监控,ARMS新上线的应用监控神器到底有多牛?
就在不久前,2017年阿里双11刚刚创下电商史上的新销售奇迹,24小时交易金额达1682亿,每秒交易创建峰值325000,每秒支付峰值256000!在这个海量交易背后是数十万个结点规模的应用的高效运行。
6684 0
extjs desktop 应用项目:教学资源库云平台
采用extjs desktop  界面截图网址: http://www.linbsoft.com/LinBSoft/zykpreview/ demo网址: http://demo.
950 0
Elasticsearch Top5典型应用场景
题记 刚接触Elasticsearch的朋友,或多或少会遇到一个问题,Elasticsearch在实际公司应用中除了搜索到底能做什么? 本文给出了答案。 除了“You Know, for Search”,Elasticsearch的使用会不断增长和变化。ObjectRocket作为一家托管云计算公司,已经在ObjectRocket平台上提供托管Elasticsearch一段时间了,并且能够看到我们客户之间的一些明确趋势以及他们如何使用该产品。以下是我们在平台上看到的Top5场景用例:
8 0
【云开发小课】云原生体系下Serverless弹性探索与实践
篇内容分享了云开发小课的云原生体系下serverless弹性探索与实践。
110 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载