您的位置:首页 > 大数据 > 人工智能

【原创】k8s源码分析-----kubelet(7)containerRuntime

2016-04-13 15:57 399 查看
本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460533683

本文csdn博客链接:/article/9299804.html

源码为k8s v1.1.1稳定版本


2.6、containerRuntime


1、参数

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

结构体变量

type KubeletServer struct {

...

PodInfraContainerImage string

RegistryPullQPS float64

RegistryBurst int

NetworkPluginDir string

NetworkPluginName string

DockerExecHandlerName string

CPUCFSQuota bool

// Pull images one at a time.

SerializeImagePulls bool

...

}

默认参数

func NewKubeletServer() *KubeletServer {

return &KubeletServer{

...

PodInfraContainerImage: dockertools.PodInfraContainerImage,

NetworkPluginDir: "/usr/libexec/kubernetes/kubelet-plugins/net/exec/",

NetworkPluginName: "",

DockerExecHandlerName: "native",

CPUCFSQuota: false,

SerializeImagePulls: true,

...

}

}

flag参数

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

...

fs.StringVar(&s.PodInfraContainerImage, "pod-infra-container-image", s.PodInfraContainerImage, "The image whose network/ipc namespaces containers in each pod will use.")
fs.Float64Var(&s.RegistryPullQPS, "registry-qps", s.RegistryPullQPS, "If > 0, limit registry pull QPS to this value. If
0, unlimited. [default=0.0]") fs.IntVar(&s.RegistryBurst, "registry-burst", s.RegistryBurst,
"Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry-qps. Only used if --registry-qps > 0")

fs.StringVar(&s.NetworkPluginName, "network-plugin", s.NetworkPluginName, "<Warning: Alpha feature> The name of the network plugin to be invoked for various events in kubelet/pod lifecycle")

fs.StringVar(&s.NetworkPluginDir, "network-plugin-dir", s.NetworkPluginDir, "<Warning: Alpha feature> The full path of the directory in which to search for network plugins")

fs.StringVar(&s.DockerExecHandlerName, "docker-exec-handler", s.DockerExecHandlerName, "Handler to use when executing a command in a container. Valid values are 'native' and 'nsenter'. Defaults
to 'native'.")

fs.BoolVar(&s.CPUCFSQuota, "cpu-cfs-quota", s.CPUCFSQuota, "Enable CPU CFS quota enforcement for containers that specify CPU limits")

fs.BoolVar(&s.SerializeImagePulls, "serialize-image-pulls", s.SerializeImagePulls, "Pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with
version < 1.9 or an Aufs storage backend. Issue #10959 has more details. [default=true]")

...

}

参数比较多。挑比较主要的说

PodInfraContainerImage:设置image镜像的下载地址,主要是防止被墙,设置私有的下载地址

RegistryPullQPS:限制拉取镜像个数,每秒最大的拉取个数

RegistryBurst:限制并发拉取的数量

NetworkPluginName:网络插件的名字

NetworkPluginDir:网络插件目录

DockerExecHandlerName:docker执行命令的方式,一般都是native


2、传递参数

老方式传递参数

代码依旧在k8s.io\kubernetes\cmd\kubelet\app 中

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

...

return &KubeletConfig{

...

参数较多,此处省略,可以直接去看源码

...

}

}


3、构建

我们直接进入

代码在k8s.io\kubernetes\pkg\kubelet\kubelet.go中

func NewMainKubelet(



runtime支持两种格式,docker和rkt。我们这里只分析docker

我们看看构建containerRuntime的主要参数


3.1、dockerClient,

这个之前文章中已经分析过的了


3.2、readinessManager、containerRefManager



1、readinessManager其实就是一个map

代码在k8s.io\kubernetes\pkg\kubelet\container\ readiness_manager.go





2、containerRefManager,其实也是一个map

k8s.io\kubernetes\pkg\kubelet\container\container_reference_manager.go






3.3、machineInfo

获取MachineInfo,主要是从cadvisor获取






3.4 、dockerExecHandler

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

func (s *KubeletServer) KubeletConfig()



我们这里就看native

代码在k8s.io\kubernetes\pkg\kubelet\dockertools\exec.go





从以上代码来看,其实就是对dockerclient进行了一个exec的封装


4、功能

我们看下DockerManager结构体





下面是对外暴露的接口



从接口来看基本上涵盖了所有的pod的管理操作

挑几个函数看看


ExecInContainer

从下图,我们就可以看到了,最后调用的是execHandler,也就是我们上面3.4讲解的dockerExecHandler




PullImage和IsImagePresent



dockerpuller是在构建的时候初始化的

下面是初始化地方



dockerpuller结构体,其中最主要的参数就是dockerclient



除了检测限速,另外最终的还是调用了dockerclient的PullImage的接口








5、小结

DockerManager作为kuberlet的containerRuntime,承担了很多主要工作的封装,所以代码量非常大,在此本文只是做了一个简单的分析,并没有全部分析。

龚浩华

qq 月牙寂 29185807

2016年4月13日

(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: