【原创】k8s源码分析-----kubelet(7)containerRuntime
来源:互联网 发布:手机淘宝有什么活动 编辑:程序博客网 时间:2024/05/26 20:21
本文QQ空间链接:http://user.qzone.qq.com/29185807/blog/1460533683
本文csdn博客链接:http://blog.csdn.net/screscent/article/details/51144087
源码为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日
(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)
- 【原创】k8s源码分析-----kubelet(7)containerRuntime
- 【原创】k8s源码分析-----kubelet(1)主要流程
- 【原创】k8s源码分析-----kubelet(2)dockerClient
- 【原创】k8s源码分析-----kubelet(3)ContainerGC
- 【原创】k8s源码分析-----kubelet(4)imageManager
- 【原创】k8s源码分析-----kubelet(5)diskSpaceManager
- 【原创】k8s源码分析-----kubelet(6)statusManager
- 【原创】k8s源码分析-----kubelet(8)pod管理
- 【原创】k8s源码分析-----kubelet(9)podWorkers
- k8s源码分析-----kubelet启动流程分析
- k8s源码分析-----kubelet协程分析
- k8s源码分析-----kubelet pod处理流程
- k8s源码分析-----kubelet启动流程分析(续)
- k8s源码分析--kubelet中docker-manager分析
- k8s源码分析--kubelet中pod处理流程(续)
- 【原创】k8s源码分析-----EndpointController
- 【原创】k8s源码分析------kube-apiserver分析(1)
- 【原创】k8s源码分析------kube-apiserver分析(2)
- 用Xcode自带的svn搭建本地SVN服务器
- ListView中的CheckBox全选反选
- 链表实现
- eclipse运行报Setting property 'source' to 'org.eclipse.jst.jee.server:project' did not find a matching
- Linux修改进程名称(setproctitle())
- 【原创】k8s源码分析-----kubelet(7)containerRuntime
- 长按listview弹出菜单
- jQuery Validate 教程
- StringBuilder和stringBuffer的区别
- 资源推荐:MATLAB特征选择
- 正则表达式
- 《UML for Java Programmers》读书笔记——第二章
- 在结构体中根据名字调用对应的函数
- 求取迷宫所有路径