k8s源码分析-----kubelet(2)dockerClient

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

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

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

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

源码为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的封装

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木头编程 - moTzxx

Laravel5下自定义错误页面的配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

584
来自专栏琯琯博客

Yii2 学习笔记之 Gii

2424
来自专栏BeJavaGod

使用shiro自定义过滤器,拦截ajax请求,可用于动静分离

shiro,不多说了,都知道是权限框架 用过shiro的都知道shiro自己有各种过滤器,只要配置好了就可以自动过滤,自动跳转到对应的页面,比如:认证,授权,退...

3895
来自专栏一个爱瞎折腾的程序猿

vs2012升级vs2017后的一些坑

391
来自专栏林德熙的博客

Roslyn 使用 WriteLinesToFile 解决参数过长无法传入

在写 Roslyn 的时候,经常需要辅助编译的工具,而这些工具需要传入一些参数,在项目很大的时候,会发现自己传入的参数比微软限制控制台可以传入的参数大很多,这时...

412
来自专栏林德熙的博客

Roslyn 通过 Target 修改编译的文件

本文也是带着一个任务来开始。任务就是本渣是一个腹黑的开发者,想要在开发的过程替换一个文件,让开发者在编译出来的文件和他调用的文件是两个不同的文件。

372
来自专栏JavaQ

深入Spring Boot (七):静态资源使用详解

Web应用经常需要使用大量的静态资源,如图片、css、js等,Spring Boot对这些静态资源的使用提供了默认配置。本篇将详细介绍如何使用默认配置和如何修改...

3378
来自专栏JAVA技术站

JDoc1.0发布 文档生成利器 原

JDoc是基于JAVA开发的,针对主流web框架做的接口文档生成利器,只需极简配置就可以实现文档的生成,且对项目零入侵,主要目的是解决协作开发中接口文档及时更新...

682
来自专栏北京马哥教育

Python爬虫基础知识:urllib2使用初阶

糖豆贴心提醒,本文阅读时间8分钟 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 类似于使用程序模拟IE浏览器的功能,把UR...

3387
来自专栏不想当开发的产品不是好测试

查看jar包的jdk版本并降级

用解压工具打开jar包(例子都是用7zip) ? 进入到META-INF目录,查看MANIFEST.MF文件,查看Bulid-Jdk,下图就为1.7.0_55版...

2127

扫描关注云+社区