说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。
申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。
龚浩华,QQ 29185807,月牙寂 道长
第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang
源码为k8s v1.1.1稳定版本
kubelet代码比较复杂,主要是因为其担负的任务比较多。下面我们将慢慢的分析
代码在k8s.io/kubernetes/cmd/kubelet/app中
type KubeletServer struct {
...
DockerEndpoint string
....
}
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的地址配置项
func (s *KubeletServer) KubeletConfig() (*KubeletConfig, error) {
k8s.io\kubernetes\pkg\kubelet\dockertools\docker.go
很简单看代码就好
github.com\fsouza\go-dockerclient
这里主要是一个开源的第三方的go-dockerclient
从下面的来看其实就是封装了一个httpclient
下面是结构体
我们看看client都提供了那些操作(截图不全,只是示例)
我们看看creatcontainer的操作
其实就是构建一个post请求,然后调用client.do
下面是client.do,我们看到了其实就是个一httpRequest,然后调用了httpclient.Do(Request)
将封装好的go-dockerclient传递到了Kubelet中
func createAndInitKubelet
然后又进行了一层包装
func NewMainKubelet(
将其包装成我们需要的
k8s.io\kubernetes\pkg\kubelet\dockertools\docker.go
主要的接口如下
我们看看下面提供的接口,与上面的接口一致
我们再看看CreaterContainer
其实就是调用了go-dockerclient中的Createcontainer
dockerclient,就是一个httpclient的封装,其中做了两层的封装。
第一层是github.com\fsouza\go-dockerclient开源的dockerclient
第二层是DockerInterface的封装