2025年kubelet组件功能(kubelet config)

kubelet组件功能(kubelet config)简单地说 kubelet 的主要功能就是定时从某个地方获取节点上 pod container 的期望状态 运行什么容器 运行的副本数量 网络或者存储如何配置等等 并调用对应的容器平台接口达到这个状态 集群状态下 kubelet 会从 master 上读取信息 但其实 kubelet 还可以从其他地方获取节点的 pod 信息 目前 kubelet 支持三种数据源 本地文件 通过 url

大家好,我是讯享网,很高兴认识大家。



简单地说,kubelet的主要功能就是定时从某个地方获取节点上 pod/container 的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态。

集群状态下,kubelet 会从 master 上读取信息,但其实 kubelet 还可以从其他地方获取节点的 pod 信息。目前 kubelet 支持三种数据源:

kubelet architecture
讯享网

  1. 本地文件
  2. 通过 url 从网络上某个地址来获取信息
  3. API Server:从 kubernetes master 节点获取信息

从管理的对象来说,kubelet 目前支持docker和rkt,默认情况下使用的 docker。

在 kubernetes 的设计中,最基本的管理单位是 pod,而不是 container。pod 是 kubernetes 在容器上的一层封装,由一组运行在同一主机的一个或者多个容器组成。如果把容器比喻成传统机器上的一个进程(它可以执行任务,对外提供某种功能),那么 pod 可以类比为传统的主机:它包含了多个容器,为它们提供共享的一些资源。

之所以费功夫提供这一层封装,主要是因为容器推荐的用法是里面只运行一个进程,而一般情况下某个应用都由多个组件构成的。

pod 中所有的容器最大的特性也是最大的好处就是共享了很多资源,比如网络空间。pod 下所有容器共享网络和端口空间,也就是它们之间可以通过localhost访问和通信,对外的通信方式也是一样的,省去了很多容器通信的麻烦。

除了网络之外,定义在 pod 里的 volume 也可以 mount 到多个容器里,以实现共享的目的。

最后,定义在 pod 的资源限制(比如 CPU 和 Memory) 也是所有容器共享的。

创建了容器之后,kubelet 还要查看容器是否正常运行,如果容器运行出错,就要根据设置的重启策略进行处理。检查容器是否健康主要有两种方式:在容器中执行命令和通过 HTTP 访问预定义的 endpoint。

先来说说执行命令的方式,简单来说就是在容器中执行某个 shell 命令,根据它的 exit code 来判断容器是否正常工作:

另外一种就是 HTTP 的方式,通过向某个 url 路径发送 HTTP GET 请求,根据 response code 判断容器是否正常工作:

不管用什么方式,如果检测到容器不健康,kubelet 会删除该容器,并根据容器的重启策略进行处理(比如重启,或者什么都不做)。

kubelet 还有一个重要的责任,就是监控所在节点的资源使用情况,并定时向 master 报告。知道整个集群所有节点的资源情况,对于 pod 的调度和正常运行至关重要。

kubelet 使用cAdvisor进行资源使用率的监控。cAdvisor 是 google 开源的分析容器资源使用和性能特性的工具,在 kubernetes 项目中被集成到 kubelet 里,无需额外配置。默认情况下,你可以在http://<host_ip>:4194地址看到 cAdvisor 的管理界面。

Analyzes resource usage and performance characteristics of running containers.

除了系统使用的 CPU,Memory,存储和网络之外,cAdvisor 还记录了每个容器使用的上述资源情况。

对于 kubelet 的配置,基本上都可以通过命令行启动时候的参数进行控制。因为 kubernetes 处于快速开发过程中,参数也可能会发生变化,这里给出1.4版本一些重要的参数含义:

参数解释默认值 –address kubelet 服务监听的地址 0.0.0.0 –port kubelet 服务监听的端口 10250 –read-only-port 只读端口,可以不用验证和授权机制,直接访问 10255 –allow-privileged 是否允许容器运行在 privileged 模式 false –api-servers 以逗号分割的 API Server 地址,用于和集群中数据交互 [] –cadvisor-port 当前节点 cadvisor 运行的端口 4194 –config 本地 manifest 文件的路径或者目录 ”” –file-check-frequency 轮询本地 manifest 文件的时间间隔 20s –container-runtime 后端容器 runtime,支持 docker 和 rkt docker –enable-server 是否启动 kubelet HTTP server true –healthz-bind-address 健康检查服务绑定的地址,设置成 0.0.0.0 可以监听在所有网络接口 127.0.0.1 –healthz-port 健康检查服务的端口 10248 –hostname-override 指定 hostname,如果非空会使用这个值作为节点在集群中的标识 ”” –log-dir 日志文件,如果非空,会把 log 写到该文件 ”” –logtostderr 是否打印 log 到终端 true –max-open-files 允许 kubelet 打开文件的最大值 –max-pods 允许 kubelet 运行 pod 的最大值 110 –pod-infra-container-image 基础镜像地址,每个 pod 最先启动的容器,会配置共享的网络 gcr.io/google_containers/pause-amd64:3.0 –root-dir kubelet 保存数据的目录 /var/lib/kubelet –runonce 从本地 manifest 或者 URL 指定的 manifest 读取并运行结束就退出,和–api-servers、–enable-server参数不兼容 &nbsp; –v 日志 level 0

在这篇教程中,我们会单独运行 kubelet,选择从本地目录中读取 pod manifest 信息去启动 pod。[Unit]

小讯
上一篇 2025-06-05 23:16
下一篇 2025-05-25 20:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/185323.html