导航:首页 > 源码编译 > kubelet源码解析

kubelet源码解析

发布时间:2022-07-25 19:56:10

1. 如何启动kubelet service

kubelet启动流程

func main() {
runtime.GOMAXPROCS(runtime.NumCPU())//多核cpu,增加系统吞吐量

s := options.NewKubeletServer() //新建一个kubeletserver对象,kubeletserver结构体
s.AddFlags(pflag.CommandLine) //添加用户命令行输入
util.InitFlags() // 解析并格式化传入的参数,填充kubeletserver结构体
util.InitLogs() // 初始化log配置
defer util.FlushLogs() //延迟函数,保证了kubeletserver异常崩溃时能够将内存中的log信息保存到磁盘文件中
verflag.PrintAndExitIfRequested()
if err := app.Run(s, nil); err != nil { //run运行kubelet,
fmt.Fprintf(os.Stderr, "%v\n", err)
os.Exit(1)
}
}

kubelet run流程
1.初始化配置读取认证文件,认证
2.加载kubeconfig文件
3.CreateAPIServer

4.InitCloudProvider初始化IaaS

5.初始化CAdvisorInterface
6.初始化ContainerManager
7.cAdvisor获取node节点信息
8.配置docker路径 Using root directory:
9.设置进程的oom_adj参数
运行RunKubelet
1.获取hostname
2.发送事情到apiserver Sending events to api server.把自己的事件通知apiserver
3.获取nodelist servicelsit podlist
4.watch node pod service
5.注册证书
6.加载存储插件
7.向apiserver注册节点信息 registerWithApiserver Attempting to register node node3
8.CreateAndInitKubelet . makePodSourceConfig //创建pod source对象
9.监测Watching apiserver
10.开启垃圾回收协程
启动kubelet startKubelet
1.start the kubelet //处理podsource的pod update消息
2.start the kubelet server
循环get put node状态status

2. kubernetes 指定在哪个node启动镜像

Kubelet运行Kubernetes Minion Node. container agent逻辑继任者(使用golang重写)GCE镜像部. Kubelet二进制程序负责维护特定主机运行组容器配置文件或etcd 服务器同步容器配置清单容器配置清单描述pod文件Kubelet采用组使用各种机制提供清单并确保些清单描述容器启并持续运行. 几种式提供给kubelet容器清单:文件 通命令行参数传递文件每20秒(配置)重新检查.HTTP URL 通命令行参数传递HTTP URL参数 端点每20秒检查(配置), 通查询获容器清单.Etcd服务器 Kubelet发现etcd服务器并watch相关keywatchetcd key /registry/nodes/$(hostname -f)由于种etcd watch机制注意改变并采取相应行非迅速. Kubelet 组元素代码-Kubelet结构体定义看:// Kubelet 结构体描述kubelet使用重要元素. type Kubelet struct { hostname string dockerClient dockertools.DockerInterface rootDirectory string networkContainerImage string podWorkers *podWorkers resyncInterval time.Duration pods []api.BoundPod etcdClient tools.EtcdClient ... cadvisorClient cadvisorInterface ... }其重要几元素:dockerClient : 使用github.com/fsouza/go-dockerclient 作docker client.etcdClient : 使用 coreos/go-etcd/etcd 作etcd client.rootDirectory : 维护kubelet文件(volume mounts,etc) 目录.默认值/var/lib/kubeletpodWorkers : 记录面运行工作workerspod信息cAdvisorClient : google cAdvisor 用监测minion机器容器资源使用情况. 使用github.com/google/cadvisor/client其配置Kubelet结构体,名KubeletConfig, 启命令行参数构造,作启kubelet参数传入,源代码,具体参见文描述.type KubeletConfig struct { EtcdClient tools.EtcdClient DockerClient dockertools.DockerInterface CAdvisorPort uint Address util.IP ... AllowPrivileged bool HostnameOverride string RootDirectory string ... ManifestURL string FileCheckFrequency time.Duration HttpCheckFrequency time.Duration Hostname string ...

3. kubernetes 指定在哪个node启动镜像

Kubelet运行在Kubernetes Minion Node上. 它是container agent的逻辑继任者(使用golang重写),它是GCE镜像的一部分. Kubelet二进制程序负责维护在特定主机上运行的一组容器。它从配置文件或是从etcd 服务器上同步容器配置清单。容器配置清单是描述一个pod的文件。Kubelet采用一组使用各种机制提供的清单并确保这些清单描述的容器被启动并持续运行. 有以下几种方式提供给kubelet一个容器清单:
文件 通过一个命令行参数传递。此文件每20秒(可配置)重新检查.
HTTP URL 通过命令行参数传递HTTP URL参数。 此端点每20秒检查(也可配置), 通过查询获得容器清单.
Etcd服务器 Kubelet发现etcd服务器并watch相关的key。watch的etcd key是 /registry/nodes/$(hostname -f)。由于这是一种etcd watch机制,注意到改变并采取相应的行动非常迅速. Kubelet 的组成元素可以从如下代码-Kubelet结构体定义看出:

// Kubelet 结构体描述了kubelet使用到的重要元素.
type Kubelet struct {
hostname string
dockerClient dockertools.DockerInterface
rootDirectory string
networkContainerImage string
podWorkers *podWorkers
resyncInterval time.Duration
pods []api.BoundPod
etcdClient tools.EtcdClient
...
cadvisorClient cadvisorInterface
...
}

其中重要的是如下的几个元素:
dockerClient : 使用github.com/fsouza/go-dockerclient 作为docker client.
etcdClient : 使用 coreos/go-etcd/etcd 作为etcd client.
rootDirectory : 维护kubelet文件(volume mounts,etc) 的目录.默认值是/var/lib/kubelet
podWorkers : 记录上面有正在运行工作的workers的pod信息
cAdvisorClient : google cAdvisor 用来监测minion机器和之上容器的资源使用情况. 使用github.com/google/cadvisor/client
其中还有一个配置Kubelet的结构体,名为KubeletConfig, 他从启动命令行参数构造,最后作为启动kubelet的参数传入,源代码如下,具体可以参见后文的描述.

type KubeletConfig struct {
EtcdClient tools.EtcdClient
DockerClient dockertools.DockerInterface
CAdvisorPort uint
Address util.IP
...
AllowPrivileged bool
HostnameOverride string
RootDirectory string
...
ManifestURL string
FileCheckFrequency time.Duration
HttpCheckFrequency time.Duration
Hostname string
...
}

阅读全文

与kubelet源码解析相关的资料

热点内容
安卓软件商店如何评分 浏览:653
linuxexecv 浏览:612
苹果照片视频文件夹 浏览:388
cdes加密解密算法 浏览:749
app发版如何让运营及时配活动 浏览:797
python结束界面 浏览:481
贵州儿童编程培训 浏览:533
非对称型密码算法 浏览:687
安卓qq分享屏幕怎么分享电视声音 浏览:933
云之家程序员 浏览:623
怎么让表格中的名称生成文件夹 浏览:186
网页控制单片机需要哪些js文件 浏览:670
类似7z002的压缩文件如何解压 浏览:561
移动dsn服务器地址 浏览:691
90后女性嫁给程序员 浏览:304
fcm算法原理 浏览:805
上海兴力压缩机 浏览:701
什么app可以推送小区 浏览:594
韩国解压视频网站 浏览:621
做库管用什么app 浏览:35