博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】k8s源码分析-----kubelet(2)dockerClient
阅读量:4031 次
发布时间:2019-05-24

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

 

 

 

 

 

 

 

 

本人空间链接:

源码为k8s v1.1.1稳定版本

kubelet代码比较复杂,主要是因为其担负的任务比较多。下面我们将慢慢的分析

 

二、模块分析

2.1 、dockerClient

代码在k8s.io/kubernetes/cmd/kubelet/app中

1、结构体中

type KubeletServer struct {

...

DockerEndpoint                 string

....

}

2、flag解析

func (s *KubeletServer) AddFlags(fs *pflag.FlagSet) {

...

    fs.StringVar(&s.DockerEndpoint, "docker-endpoint", s.DockerEndpoint, "If non-empty, use this for the docker endpoint to communicate with")

...

}

 

其实就是dockerEndpoint的地址配置项

 

3、第一步初始化

func (s *KubeletServer) KubeletConfig() (*KubeletConfig, error) {

3.1 dockertools

k8s.io\kubernetes\pkg\kubelet\dockertools\docker.go

很简单看代码就好

  

3.2 go-dockerclient

github.com\fsouza\go-dockerclient

这里主要是一个开源的第三方的go-dockerclient

从下面的来看其实就是封装了一个httpclient

下面是结构体

我们看看client都提供了那些操作(截图不全,只是示例)

我们看看creatcontainer的操作

其实就是构建一个post请求,然后调用client.do

下面是client.do,我们看到了其实就是个一httpRequest,然后调用了httpclient.Do(Request)

4、继续传递

将封装好的go-dockerclient传递到了Kubelet中

func createAndInitKubelet

然后又进行了一层包装

func NewMainKubelet(

 

5、继续包装

将其包装成我们需要的

k8s.io\kubernetes\pkg\kubelet\dockertools\docker.go

主要的接口如下

我们看看下面提供的接口,与上面的接口一致

我们再看看CreaterContainer

其实就是调用了go-dockerclient中的Createcontainer

6、总结

dockerclient,就是一个httpclient的封装,其中做了两层的封装。

第一层是github.com\fsouza\go-dockerclient开源的dockerclient

第二层是DockerInterface的封装

 

 

龚浩华

qq 月牙寂 道长 29185807

2016年4月7日

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

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

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

 

 

 

 

你可能感兴趣的文章
朴素贝叶斯算法
查看>>
逻辑回归
查看>>
感知机 - 支持向量机
查看>>
决策树算法(ID3、C4.5、CART)
查看>>
集成学习(Bagging、Boosting、Stacking)
查看>>
无监督学习
查看>>
K均值算法(K-means)
查看>>
机器学习中的损失函数
查看>>
机器学习中的性能度量
查看>>
机器学习中的优化问题
查看>>
机器学习中的参数估计方法
查看>>
机器学习中的特征工程
查看>>
Softmax数值不稳定问题
查看>>
Spark学习笔记(一)——Spark编程
查看>>
奇异值分解(Singular Value Decomposition, SVD)
查看>>
文本处理—LSA、 LDA
查看>>
文本匹配(Text Matching)
查看>>
机器学习中的正则化方法
查看>>
广告学与在线广告
查看>>
计算广告
查看>>