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

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

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

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

(3)r.request方法首先检查是否设置 httpclient,如果没有,则使用 net/http默认的DefaultClient、r.URL.String方法根据配置的请求参数生成请求的 RESTfulURL,示例中生成的请求  URL 应该为  https://xxx/api/v1/namespaces/default/pods?limit=100之后用 net/http标准库构建 req请求并发送该请求,最终fn函数变量对 APIServer返回值进行解析(见代码清单2-14

func(r*Request)request(ctxcontext.Context,fnfunc(*http.Request,*http.Response))error{

  

//...

 

client:=r.c.Clientifclient==nil{

client=http.DefaultClient

}

 

//...for{

 

url:=r.URL().String()

req,err:=http.NewRequest(r.verb,url,r.body)

 

//...

resp,err:=client.Do(req)

 

//...

done:=func()bool{

//...

 


 

 

}()

//...

}

}


fn(req,resp)returntrue


 

总结:KubernetesAPIServer  有很多操作资源的接口,而RESTClient就是对访问这些 API 的封装。

1. ClientSet

 

虽然 RESTClient可以访问 Kubernetes 的任意资源对象,但在使用时需要配置的参数过于烦琐,为了更为优雅地处理,需要进一步封装。ClientSet继承自 RESTClient,使用预生成的 API对象与 APIServer进行交互,方便开发者二次开发。

ClientSet 是一组资源客户端的集合,比如操作Pods、Services、Secrets资源的CoreV1Client,操作 Deployments、ReplicaSets、DaemonSets资源的ExtensionsV1beta1Client等,如图2-5所示,直接通过这些客户端提供的操作方法即可对Kubernetes内置的原生资源进行 Create、Update、Get、List、Delete等多种操作。


 

 

image.png

 

图 2—5CientSet 交互图

 

ClientSet的使用方式在前面已有讲解,这里不再赘述。下面分析核心代码clientset.

CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})的执行流程。

ClientSet包含众多资源客户端,CoreV1方法负责返回 CoreV1Client(见代码清单2-15)。

typeClientsetstruct{

*discovery.DiscoveryClient

//...

coreV1                          *corev1.CoreV1Client

 

//...

}

//...

 

//CoreV1retrievestheCoreV1Client

func(c*Clientset)CoreV1()corev1.CoreV1Interface{returnc.coreV1


}

Pods方法的参数用于设定 Namespace, 内部调用 newPods函数, 该函数返回实现PodInterface的对象(见代码清单2-16)。

func(c*CoreV1Client)Pods(namespacestring)PodInterface{returnnewPods(c,namespace)

}

 

可以看到 PodInterface 包含了操作 Pods 资源的全部方法,newPods 函数构造的 Pods对象内部包含 RESTClient,在 Pods对象的List 方法中,我们看到了熟悉的 RESTClient操作资源的调用流程(见代码清单2-17)。

typePodInterfaceinterface{

Create(ctxcontext.Context,pod*v1.Pod,optsmetav1.CreateOptions)(*v1.Pod,error)

Update(ctxcontext.Context,pod*v1.Pod,optsmetav1.UpdateOptions)(*v1.Pod,error)

UpdateStatus(ctxcontext.Context,pod*v1.Pod,optsmetav1.

UpdateOptions)(*v1.Pod,error)

Delete(ctxcontext.Context,namestring,optsmetav1.DeleteOptions)

error

DeleteCollection(ctxcontext.Context,optsmetav1.DeleteOptions,

listOptsmetav1.ListOptions)error

Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.Pod, error)List(ctxcontext.Context,optsmetav1.ListOptions)(*v1.PodList,error)

//...

}

 

funcnewPods(c*CoreV1Client,namespacestring)*pods{return&pods{

client:c.RESTClient(),ns:namespace,

}

}

 

//...

 

func(c*pods)List(ctxcontext.Context,optsmetav1.ListOptions)(result

*v1.PodList,errerror){

//...

 

result=&v1.PodList{}err=c.client.Get().

Namespace(c.ns).


 

Resource("pods").

VersionedParams(&opts,scheme.ParameterCodec).Timeout(timeout).

Do(ctx).

Into(result)

return

}

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

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
7415 0
阿里巴巴的云原生与开发者 | 10月15号栖夜读
今天的首篇文章,讲述了 : 利用云原生技术构建应用简便快捷,部署应用轻松自如,运行应用按需伸缩。如今,云原生已经成为下一代技术发展的趋势。在 2019 杭州云栖大会开发者峰会上,阿里巴巴资深技术专家李响就为大家分享了阿里巴巴的云原生技术与开发者的那些故事。
2883 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
8266 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场景用例:
13 0
Apache HttpClient 4.3开发指南
《Apache HttpClient 4.3开发指南》 一、概述 Apache HttpClient 4系列已经发布很久了,但由于它与HttpClient 3.x版本完全不兼容,以至于业内采用此库的公司较少,在互联网上也少有相关的文档资料分享。
862 0
【云开发小课】云原生体系下Serverless弹性探索与实践
篇内容分享了云开发小课的云原生体系下serverless弹性探索与实践。
111 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载