k8s源码分析------第三方库etcd client分析

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

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

代码为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函数中

还有一些其他的操作,就不一一介绍了,其代码的流程是基本一致的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏阮一峰的网络日志

全文搜索引擎 Elasticsearch 入门教程

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基...

3469
来自专栏苍云横渡学习笔记

【Elasticsearch 学习笔记】全文搜索引擎简单入门

ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasti...

802
来自专栏大内老A

[WCF安全系列]消息的保护等级[上篇]

到目前为止,对于WCF安全传输的三个方面,我们已经对认证进行了详细的介绍,现在我们来关注另外两个话题:消息的一致性和机密性,两者又统称为消息保护(Message...

17910
来自专栏架构师之路

明明打印到文件了,为啥tail -f看不到

文章《一分钟了解nohup和&的功效》留了一个“nohup.out为啥没有包含stdout输出”的尾巴,今天把坑填了。

1004
来自专栏Jerry的SAP技术分享

在ABAP里实现条件断点的三种方式

有不同的同事问我这个问题:例如下图的LOOP要执行1000次,我只对其中的某一次比如第501次循环感兴趣,我肯定不可能按500次F5然后进入第501次的调试。或...

18110
来自专栏企鹅号快讯

爬虫必备库‘requests’详解(二)

今日分享:requests库详解 上一篇文章爬虫必备库‘requests’主要说了下Pytohn第三方库--Requests库的安装与简单测试,今天详细介绍Re...

2539
来自专栏从零开始学自动化测试

python接口自动化26-发xml格式post请求

post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种)

862
来自专栏抠抠空间

babel简介

1520
来自专栏Python小屋

Python+pywin32批量转换Word文件为PDF文件

代码功能:把当前文件夹中多个Word文件批量转换为PDF文件 技术原理:代码实际上是调用了Word的“导出”功能,模拟了手工转换的操作并实现了自动化,要求已正确...

2515
来自专栏苍云横渡学习笔记

【day 14】python编程:从入门到实践学习笔记-基于Django框架的Web开发-用户账户(一)

学习笔记目录 【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型 【day 2】python编程:从入门到实践学习笔记-列表以及其操...

36612

扫描关注云+社区