前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s源码分析-----kubelet(2)dockerClient

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

作者头像
月牙寂道长
修改2018-04-03 11:37:35
7710
修改2018-04-03 11:37:35
举报
文章被收录于专栏:月牙寂月牙寂

说明:此文章为腾讯云机器自动从本人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的封装

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年04月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、模块分析
    • 2.1 、dockerClient
      • 1、结构体中
      • 2、flag解析
      • 3、第一步初始化
      • 4、继续传递
      • 5、继续包装
      • 6、总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档