博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】k8s源码分析------第三方库etcd client分析
阅读量:4032 次
发布时间:2019-05-24

本文共 1361 字,大约阅读时间需要 4 分钟。

此博客从本人空间中转载过来, 

代码为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日

  (版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

 

你可能感兴趣的文章
VMware Workstation Pro虚拟机不可用解决方法
查看>>
最简单的使用redis自带程序实现c程序远程访问redis服务
查看>>
redis学习总结-- 内部数据 字符串 链表 字典 跳跃表
查看>>
iOS 对象序列化与反序列化
查看>>
iOS 序列化与反序列化(runtime) 01
查看>>
iOS AFN 3.0版本前后区别 01
查看>>
iOS ASI和AFN有什么区别
查看>>
iOS QQ侧滑菜单(高仿)
查看>>
iOS 扫一扫功能开发
查看>>
iOS app之间的跳转以及传参数
查看>>
iOS __block和__weak的区别
查看>>
Android(三)数据存储之XML解析技术
查看>>
Spring JTA应用之JOTM配置
查看>>
spring JdbcTemplate 的若干问题
查看>>
Servlet和JSP的线程安全问题
查看>>
GBK编码下jQuery Ajax中文乱码终极暴力解决方案
查看>>
jQuery性能优化指南
查看>>
Oracle 物化视图
查看>>
PHP那点小事--三元运算符
查看>>
解决国内NPM安装依赖速度慢问题
查看>>