核心二进制组件源码之kubelet

  什么是kubelet

kubelet 是在每个 Node 节点上运行的主要 “节点代理”。Kubelet 可以通过设置启动参数 --register-node 来确定是否向 kube-apiserver 注册自己
Kubelet 在启动时通过 API Server 注册节点信息,并定时向 API Server 发送节点新消息,API Server 在接收到新消息后,将信息写入 etcd。
kubelet 是基于PodSpec来工作的。
PodSpec is a description of a pod
每个PodSpec是一个描述Pod的YAML或JSON对象。
kubelet接受通过各种机制(主要是通过 apiserver)提供的一组 PodSpec,
并确保这些 PodSpec 中描述的容器处于运行状态且运行状况良好。
kubelet不管理不是由Kubernetes创建的容器。 除了来自kube-apiserver的PodSpec之外,还可以通过以下三种方式将容器manifest提供给kubelet。 1.文件(File):利用命令行参数传递路径。kubelet 周期性地监视此路径下的文件是否有更新。监视周期默认为 20s,且可通过参数进行配置。 2.HTTP 端点(HTTP endpoint):利用命令行参数指定HTTP端点。 此端点的监视周期默认为
20秒,也可以使用参数进行配置。 3.HTTP 服务器(HTTP server):kubelet还可以侦听HTTP并响应简单的 API (目前没有完整规范)来提交新的清单。
我们下载kubernetes的源码进行整体编译之后就会生成一个kubelet二进制的程序.
PodSpec 请参看: https://www.cnblogs.com/aozhejin/p/16277526.html

  每个Node节点上都运行一个 Kubelet 服务进程,默认监听 10250 端口,接收并执行 Master 发来的指令,管理 Pod 及 Pod 中的容器。
  每个 Kubelet 进程会在 API Server 上注册所在Node节点的信息,定期向 Master 节点汇报该节点的资源使用情况。


二进制的kubelet源码主要放在了

//启动入口
E:\k8s源码\kubernetes-1.10.13\kubernetes-1.10.13\cmd\kubelet
//具体的功能实现 E:\k8s源码\kubernetes
-1.10.13\kubernetes-1.18.0\pkg\kubelet

特殊说明:

1.staging下的kubelet:他是外部的kubelet配置文件,一旦采用外部的kubelet配置选项,则一旦启动kubelet二进制程序,就会干预kubelet的行为,
 但是我们不能认为kubelt的源码就是在这里,他这种被kubernetes官方认为是单独的kubernetes子项目.
https://github.com/kubernetes/kubernetes/tree/master/staging/src/k8s.io/kubelet
在https://github.com/kubernetes/kubelet这里有段话,阐述的很清楚
This repo provides external, versioned ComponentConfig API types for configuring the kubelet.
These external types can easily be vendored and used by any third-party tool writing Kubernetes ComponentConfig objects.

 

一. cmd/kubelet为kuernetes二进制kubelet程序源码的main入口
  
E:\k8s源码\kubernetes-1.10.13\kubernetes-1.10.13\cmd\kubectl\kubectl.go

E:\k8s源码\kubernetes-1.10.13\kubernetes-1.10.13\cmd\kubectl\app目录则是通过cobra生成的.

E:\k8s源码\kubernetes-1.10.13\kubernetes-1.10.13\cmd\kubectl\kubectl.go 源码
//
The kubelet binary is responsible for maintaining a set of containers on a particular host VM. // It syncs data from both configuration file(s) as well as from a quorum of etcd servers. // It then queries Docker to see what is currently running. It synchronizes the configuration data, // with the running set of containers by starting or stopping Docker containers. package main import ( "math/rand" "os" "time" "k8s.io/component-base/logs" _ "k8s.io/component-base/metrics/prometheus/restclient" _ "k8s.io/component-base/metrics/prometheus/version" // for version metric registration "k8s.io/kubernetes/cmd/kubelet/app" ) func main() { rand.Seed(time.Now().UnixNano()) command := app.NewKubeletCommand() logs.InitLogs() defer logs.FlushLogs() if err := command.Execute(); err != nil { os.Exit(1) } }

二.pkg/kubelet为kubelet主要功能细节运行逻辑代码

posted @ 2022-05-25 17:29  jinzi  阅读(4)  评论(0编辑  收藏  举报