【原创】k8s源码分析------第三方库etcd client分析
来源:互联网 发布:苹果翻墙后用什么软件 编辑:程序博客网 时间:2024/04/29 19:12
代码为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日
- 【原创】k8s源码分析------第三方库etcd client分析
- 【原创】k8s源码分析------第三方库go-restful分析
- 【原创】k8s源码分析-----EndpointController
- 【原创】k8s源码分析----apiserver之APIGroupVersion
- 【原创】k8s源码分析-----kube-scheduler
- 【原创】k8s源码分析-----Mux And Broadcaster
- 【原创】k8s源码分析------kube-apiserver分析(1)
- 【原创】k8s源码分析------kube-apiserver分析(2)
- 【原创】k8s源码分析------kube-apiserver分析(3)
- 【原创】k8s源码分析-----kubelet(1)主要流程
- 【原创】k8s源码分析-----kubelet(2)dockerClient
- 【原创】k8s源码分析-----kubelet(3)ContainerGC
- 【原创】k8s源码分析-----kubelet(4)imageManager
- 【原创】k8s源码分析-----kubelet(5)diskSpaceManager
- 【原创】k8s源码分析-----kubelet(6)statusManager
- 【原创】k8s源码分析-----kubelet(7)containerRuntime
- 【原创】k8s源码分析-----kubelet(8)pod管理
- 【原创】k8s源码分析-----kubelet(9)podWorkers
- Ubuntu 安装arm-linux-gcc交叉编译工具
- MySQL各个版本区别
- java xml文件的节点数展示
- 【c++】拼音转数字
- Ubuntu 设置开机启动项 超级简单
- 【原创】k8s源码分析------第三方库etcd client分析
- EXT里formPanel自适应window
- 翻译_iOS视图编程指南(View Programming Guide for iOS)之介绍
- 关于Java对象复制(Clone、深度Clone以及序列化与反序列化的使用)
- 43. Multiply Strings
- Oracle 11g的 7个服务 说明
- 2016年第七届蓝桥杯C/C++程序设计本科B组省赛
- Python读取目录所有文件名并保存
- curl 模仿上传文件