kubelet 是运行在每个节点上的主要的“节点代理”,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务,按照 PodSpec 描述来管理Pod 和其中的容器(PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象)。
kubelet 通过各种机制(主要通过 apiserver )获取一组 PodSpec 并保证在这些 PodSpec 中描述的容器健康运行。
1、kubelet 默认监听四个端口,分别为 10250 、10255、10248、4194。
LISTEN 0 128 *:10250 *:* users:(("kubelet",pid=48500,fd=28))
LISTEN 0 128 *:10255 *:* users:(("kubelet",pid=48500,fd=26))
LISTEN 0 128 *:4194 *:* users:(("kubelet",pid=48500,fd=13))
LISTEN 0 128 127.0.0.1:10248 *:* users:(("kubelet",pid=48500,fd=23))
--healthz-port
和 --healthz-bind-address
来指定监听的地址和端口。 $ curl http://127.0.0.1:10248/healthz
ok--cadvisor-port
可以指定启动的端口。 $ curl http://127.0.0.1:4194/metrics
// 节点信息接口,提供磁盘、网络、CPU、内存等信息
$ curl http://127.0.0.1:10255/spec/
2、kubelet 主要功能:
上图展示了 kubelet 组件中的模块以及模块间的划分。
--eviction-hard=
来决定 evict 的策略值。--image-gc-high-threshold
和 --image-gc-low-threshold
来设置。--cgroups-per-qos
的时候,kubelet 会启动 goroutine 来周期性的更新 pod 的 cgroup 信息,维护其正确性,该参数默认为 true
,实现了 pod 的Guaranteed/BestEffort/Burstable 三种级别的 Qos。--container-runtime
来定义是使用docker 还是 rkt,默认是 docker
。在 v1.12 中,kubelet 组件有18个 manager:
certificateManager
cgroupManager
containerManager
cpuManager
nodeContainerManager
configmapManager
containerReferenceManager
evictionManager
nvidiaGpuManager
imageGCManager
kuberuntimeManager
hostportManager
podManager
proberManager
secretManager
statusManager
volumeManager
tokenManager
其中比较重要的模块后面会进行一一分析。
参考:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。