Kubelet 使用的本地文件和路径

kubelet 主要是一个无状态进程,运行在 Kubernetes 节点上。本文档概述了 kubelet 读取和写入的文件。

Kubelet 通常使用控制平面作为节点上需要运行内容的真相来源,并使用容器运行时来检索容器的当前状态。只要你向 kubelet 提供了 kubeconfig(API 客户端配置),kubelet 就会连接到你的控制平面;否则,节点将运行在 独立模式 下。

在 Linux 节点上,kubelet 也依赖于读取 cgroups 和各种系统文件来收集指标。

在 Windows 节点上,kubelet 通过不依赖于路径的不同机制来收集指标。

Kubelet 还使用其他一些文件,因为 kubelet 使用本地 Unix 域套接字进行通信。有些是 kubelet 监听的套接字,而对于其他套接字,kubelet 会发现它们,然后作为客户端连接。

配置

Kubelet 配置文件

可以使用命令行参数 --config 配置 kubelet 配置文件的路径。kubelet 还支持补充配置(drop-in configuration files)来增强配置。

证书

证书和私钥通常位于 /var/lib/kubelet/pki,但可以使用 --cert-dir kubelet 命令行参数进行配置。证书文件的名称也是可配置的。

Manifest 文件

静态 Pod 的 Manifest 文件通常位于 /etc/kubernetes/manifests。可以使用 staticPodPath kubelet 配置选项配置位置。

Systemd 单元设置

当 kubelet 作为 systemd 单元运行时,某些 kubelet 配置可以在 systemd 单元设置文件中声明。通常包括:

状态

资源管理器的检查点文件

所有资源管理器都将 Pod 与分配的资源之间的映射保存在状态文件中。状态文件位于 kubelet 的基本目录(也称为 根目录,但与节点根目录 / 不同)中。可以使用 kubelet 命令行参数 --root-dir 配置 kubelet 的基本目录。

文件名

设备管理器的检查点文件

设备管理器在与套接字文件相同的目录 /var/lib/kubelet/device-plugins/ 中创建检查点。对于设备管理器,检查点文件名为 kubelet_internal_checkpoint

Pod 资源检查点

功能状态: Kubernetes v1.33 [beta](默认启用:true)

如果节点启用了 InPlacePodVerticalScaling 功能门,kubelet 会存储 已分配已生效 的 Pod 资源的本地记录。有关这些记录如何使用的更多详细信息,请参见调整分配给容器的 CPU 和内存资源

文件名

  • allocated_pods_state 记录分配给节点上每个运行中 Pod 的资源
  • actuated_pods_state 记录运行时已为节点上每个运行中 Pod 接受的资源

这些文件位于 kubelet 基本目录中(在 Linux 上默认是 /var/lib/kubelet;可以使用 --root-dir 配置)。

容器运行时

Kubelet 使用通过配置参数配置的套接字与容器运行时通信:

  • 用于运行时操作的 containerRuntimeEndpoint
  • 用于镜像管理操作的 imageServiceEndpoint

这些端点的实际值取决于所使用的容器运行时。

设备插件

Kubelet 在路径 /var/lib/kubelet/device-plugins/kubelet.sock 暴露一个套接字,供各种设备插件注册

当设备插件注册自身时,它会提供其套接字路径供 kubelet 连接。

设备插件的套接字应位于 kubelet 基本目录下的 device-plugins 目录中。在一个典型的 Linux 节点上,这意味着 /var/lib/kubelet/device-plugins

Pod 资源 API

Pod 资源 API 将在路径 /var/lib/kubelet/pod-resources 上暴露。

DRA、CSI 和设备插件

Kubelet 查找通过 DRA、设备管理器或存储插件管理的设备插件创建的套接字文件,然后尝试连接到这些套接字。kubelet 查找的目录是 kubelet 基本目录中的 plugins_registry,因此在典型的 Linux 节点上,这意味着 /var/lib/kubelet/plugins_registry

注意,对于设备插件,有两种替代注册机制。对于给定的插件,只能使用其中一种。

可以将套接字文件放入该目录的插件类型包括:

  • CSI 插件
  • DRA 插件
  • 设备管理器插件

(通常是 /var/lib/kubelet/plugins_registry)。

优雅的节点关机

功能状态: Kubernetes v1.21 [beta](默认启用:true)

优雅的节点关机 将状态本地存储在 /var/lib/kubelet/graceful_node_shutdown_state

镜像拉取记录

功能状态: Kubernetes v1.33 [alpha](默认启用:false)

Kubelet 存储尝试和成功拉取镜像的记录,并使用这些记录来验证该镜像之前是否使用相同的凭据成功拉取过。

这些记录作为文件缓存在 kubelet 基本目录下的 image_manager 目录中。在典型的 Linux 节点上,这意味着 /var/lib/kubelet/image_managerimage_manager 有两个子目录:

  • pulling - 存储 Kubelet 正在尝试拉取的镜像的记录。
  • pulled - 存储 Kubelet 成功拉取的镜像的记录,以及用于拉取操作的凭据元数据。

有关详细信息,请参阅确保镜像拉取凭据验证

安全配置文件和配置

Seccomp

从 Pod 引用的 Seccomp 配置文件应放置在 /var/lib/kubelet/seccomp 中。有关详细信息,请参阅 seccomp 参考

AppArmor

Kubelet 不会通过 Kubernetes 特定的路径加载或引用 AppArmor 配置文件。AppArmor 配置文件是通过节点操作系统加载的,而不是通过其路径引用。

锁定

功能状态: Kubernetes v1.2 [alpha]

kubelet 的一个锁文件;通常是 /var/run/kubelet.lock。kubelet 使用它来确保两个不同的 kubelet 不会相互冲突地运行。可以使用 --lock-file kubelet 命令行参数配置锁文件的路径。

如果同一节点上的两个 kubelet 使用不同的锁文件路径值,则当它们同时运行时,将无法检测到冲突。

下一步

最后修改于 2025 年 4 月 7 日太平洋标准时间 上午 9:46:更新 v1.33 beta 版本的 InPlacePodVerticalScaling 文档 (#50290) (c014f72fbb)