【原创】k8s源码分析------第三方库etcd client分析
2016-03-21 14:39
211 查看
此博客从本人空间中转载过来, http://user.qzone.qq.com/29185807/blog/1458542207 代码为github.com/coreos/go-etcd/etcd 注: 此版本为k8s v1.1.1 中所使用的etcd client。 首先我看下k8s中是如何使用的。位置在k8s.io\kubernetes\cmd\kube-apiserver\app\server.go 代码目录,从这里来看,代码还是非常清晰的 那么我们就从此处入口,先看client.go 先看结构体 结构体里面,比较重要的东西 1、cluster,集群管理 2、httpclient,这个将是最终的入口 我们继续 这里面主要是初始化了cluster,httpclient 其中cluster后面再详细介绍,这里我们接着看httpclient 很明显这里就是构造了一个标准库net/http中的Client 大致的初始化很简单。其实还有一个tls的初始化。为NewTLSClient,对应的httpclient初始化为initHTTPSClient 下面我们看看etcd client都提供了那些操作。 Get操作 我们看get.go 很明显,我们看到Get调用了RawGet,而RawGet调用了get 我们再跟踪get 在request.go中 继续getCancelable 还是在request.go中 主要有NewRawRequest。request.go中 其实就是对request的一些包装,包含了一些参数 我们继续看SendRequest。这个才是整个代码的核心 在下面我们看到这里当RawRequest中的Cancel不为nil的时候,会启动一个协程来接收cancel消息。 但目前我们分析的Get是没有设置的 我们继续这里有个for循环,attempt为尝试次数统计,当成功则会退出for循环,失败则会继续尝试。其中有个变量为httpPath是个关键 我们现在跟进去看看 requet.go中 我们看到了cluster,我们继续跟进去看看 从上面的cluster的代码来看其实pick就是返回cluster中的一台主机,而pick的机器则是一个随机的主机,在初始化的时候有随机,在failure的时候,又会重新随机 我们回到之前的sendrequest 这里主要的地方就是构造一个标准库net/http中的Request 再继续 我们看到我们之前提到的httpclient,接收刚刚构建的Request,然后Do。就是发起了http的请求。 进行校验头部,如果是正常的,则退出for循环 退出for循环之后,返回了一个RawResponse结构体 最后我们返回到 我们看到了结果 其实就是一个解码的过程 至此Get操作就解析完了 还有一些操作如: AddChildDir 其实跟踪进去,最后也是到了SendRequest函数中 还有一些其他的操作,就不一一介绍了,其代码的流程是基本一致的。 龚浩华 qq 月牙寂 29185807 2016年3月21日 (版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。) |
相关文章推荐
- iOS webview 上拉出现灰色背景
- object有哪些公用方法
- 子list中的顺序会影响list的顺序问题
- SQlite 数据库的简单操作
- framelayout中fragment的切换
- 1041. Be Unique (20)
- NSBundle 类
- Python读取目录所有文件名并保存
- Linux网络编程--epoll模型之LT触发模式和ET触发模式
- 翻译_iOS视图编程指南(View Programming Guide for iOS)之介绍
- 关于Java对象复制(Clone、深度Clone以及序列化与反序列化的使用)
- git添加远程库
- 43. Multiply Strings
- 【poj 2488】A Knight's Journey 中文题意&题解&代码(C++)
- 本地 eclipse 远程调试服务器上的 tomcat
- [leetcode] 247. Strobogrammatic Number II 解题报告
- curl 模仿上传文件
- Oracle 11g的 7个服务 说明
- Vijos1653 疯狂的方格取数
- Ubuntu 设置开机启动项 超级简单