kubelet 所使用的本地文件和路径

此文档中的信息可能已过时

此文档的更新日期比原文晚,因此其中的信息可能已过时。如果能阅读英文,请查看英文版本以获取最新信息: Local Files And Paths Used By The Kubelet

kubelet 所使用的本地文件和路径

kubelet 是一个运行在 Kubernetes 节点上的无状态进程。本文简要介绍了 kubelet 读写的文件。

说明:

本文仅供参考,而非描述保证会发生的行为或 API。 本文档列举 kubelet 所使用的资源。所给的信息属于实现细节,可能会在后续版本中发生变更。

kubelet 通常使用控制面作为需要在 Node 上运行的事物的真实来源,并使用容器运行时获取容器的当前状态。 只要你向 kubelet 提供 kubeconfig(API 客户端配置),kubelet 就会连接到你的控制面; 否则,节点将以**独立(Standalone)**模式运行。

在 Linux 节点上,kubelet 还需要读取 cgroups 和各种系统文件来收集指标。

在 Windows 节点上,kubelet 不依赖于路径,而是通过其他机制来收集指标。

kubelet 所使用的还有其他文件,包括其使用本地 Unix 域套接字进行通信的文件。 有些文件是 kubelet 要监听的套接字,而其他套接字则是 kubelet 先发现后作为客户端连接的。

说明:

本页列举的路径为 Linux 路径,若要映射到 Windows,你可以添加根磁盘 C:\ 替换 /(除非另行指定)。 例如,/var/lib/kubelet/device-plugins 映射到 C:\var\lib\kubelet\device-plugins

配置

kubelet 配置文件

你可以使用命令行参数 --config 指定 kubelet 配置文件的路径。kubelet 还支持插件(Drop-in)配置文件来增强配置。

证书

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

清单

静态 Pod 的清单通常位于 /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 状态检查点

特性状态: GA since Kubernetes v1.35
More information about this feature

This is a stable feature in Kubernetes, and has been since version v1.35. It was first available in the v1.27 release. You can no longer disable or opt out of this feature or behavior (it is locked); if you explicitly set a value for the associated feature gate InPlacePodVerticalScaling, Kubernetes ignores it but does not report any error.

如果某个节点已启用了 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 Resources API

Pod Resources 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)。

节点体面关闭

特性状态: Beta since Kubernetes v1.21; (默认启用)

节点体面关闭将状态存储在本地目录 /var/lib/kubelet/graceful_node_shutdown_state

镜像拉取记录

特性状态: Beta since Kubernetes v1.35; (默认启用)

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

这些记录作为文件缓存在 kubelet 基础目录下的 image_registry 目录中。 在典型的 Linux 节点上,这个路径通常为 /var/lib/kubelet/image_manager
image_manager 目录下包含两个子目录:

  • pulling:存储 kubelet 正在尝试拉取的镜像的相关记录。
  • pulled:存储 kubelet 成功拉取的镜像记录,以及与拉取所用凭据相关的元数据。

更多细节请参阅确保镜像拉取凭据验证

安全配置文件和配置

Seccomp

被 Pod 引用的 Seccomp 配置文件应放置在 /var/lib/kubelet/seccomp。 有关细节请参见 Seccomp 参考

AppArmor

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

加锁

特性状态: Alpha since Kubernetes v1.2

kubelet 的锁文件;通常为 /var/run/kubelet.lock。 kubelet 使用此文件确保尝试运行两个不同的、彼此冲突的 kubelet。 你可以使用 --lock-file kubelet 命令行参数来配置这个锁文件的路径。

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

接下来