核心二进制组件源码之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主要功能细节运行逻辑代码
分类:
k8s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类