--- content_type: "reference" title: kubelet 所使用的本地文件和路径 weight: 42 --- {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} 是一个运行在 Kubernetes {{< glossary_tooltip text="节点" term_id="node" >}}上的无状态进程。本文简要介绍了 kubelet 读写的文件。 {{< note >}} 本文仅供参考,而非描述保证会发生的行为或 API。 本文档列举 kubelet 所使用的资源。所给的信息属于实现细节,可能会在后续版本中发生变更。 {{< /note >}} kubelet 通常使用{{< glossary_tooltip text="控制面" term_id="control-plane" >}}作为需要在 Node 上运行的事物的真实来源,并使用{{< glossary_tooltip text="容器运行时" term_id="container-runtime" >}}获取容器的当前状态。 只要你向 kubelet 提供 **kubeconfig**(API 客户端配置),kubelet 就会连接到你的控制面; 否则,节点将以**独立(Standalone)**模式运行。 在 Linux 节点上,kubelet 还需要读取 cgroups 和各种系统文件来收集指标。 在 Windows 节点上,kubelet 不依赖于路径,而是通过其他机制来收集指标。 kubelet 所使用的还有其他文件,包括其使用本地 Unix 域套接字进行通信的文件。 有些文件是 kubelet 要监听的套接字,而其他套接字则是 kubelet 先发现后作为客户端连接的。 {{< note >}} 本页列举的路径为 Linux 路径,若要映射到 Windows,你可以添加根磁盘 `C:\` 替换 `/`(除非另行指定)。 例如,`/var/lib/kubelet/device-plugins` 映射到 `C:\var\lib\kubelet\device-plugins`。 {{< /note >}} ## 配置 {#configuration} ### kubelet 配置文件 {#kubelet-configuration-files} 你可以使用命令行参数 `--config` 指定 kubelet 配置文件的路径。kubelet 还支持[插件(Drop-in)配置文件](/zh-cn/docs/tasks/administer-cluster/kubelet-config-file/#kubelet-conf-d)来增强配置。 ### 证书 {#certificates} 证书和私钥通常位于 `/var/lib/kubelet/pki`,但你可以使用 `--cert-dir` kubelet 命令行参数进行配置。 证书文件的名称也是可以配置的。 ### 清单 {#manifests} 静态 Pod 的清单通常位于 `/etc/kubernetes/manifests`。 你可以使用 `staticPodPath` kubelet 配置选项进行配置。 ### Systemd 单元设置 {#systemd-unit-settings} 当 kubelet 作为 systemd 单元运行时,一些 kubelet 配置可以在 systemd 单元设置文件中声明。 这些配置通常包括: - [运行 kubelet 的命令行参数](/zh-cn/docs/reference/command-line-tools-reference/kubelet/) - kubelet 所使用的环境变量或[配置 Golang 运行时](https://pkg.go.dev/runtime#hdr-Environment_Variables) ## 状态 {#state} ### 资源管理器的检查点文件 {#resource-managers-state} 所有资源管理器将 Pod 与已分配资源之间的映射保存在状态文件中。 状态文件位于 kubelet 的基础目录,也称为**根目录**(但与节点根目录 `/` 不同)之下。 你可以使用 kubelet 命令行参数 `--root-dir` 来配置 kubelet 的基础目录。 文件名称: - `memory_manager_state` 对应[内存管理器](/zh-cn/docs/tasks/administer-cluster/memory-manager/) - `cpu_manager_state` 对应 [CPU 管理器](/zh-cn/docs/tasks/administer-cluster/cpu-management-policies/) - `dra_manager_state` 对应 [DRA](/zh-cn/docs/concepts/scheduling-eviction/dynamic-resource-allocation/) ### 设备管理器的检查点文件 {#device-manager-state} 设备管理器在与套接字文件相同的目录(`/var/lib/kubelet/device-plugins/`)中创建检查点。 对于[设备管理器](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#device-plugin-integration-with-the-topology-manager), 检查点文件的名称为 `kubelet_internal_checkpoint`。 ### Pod 状态检查点存储 {#pod-status-manager-state} {{< feature-state feature_gate_name="InPlacePodVerticalScaling" >}} 如果你的集群启用了[就地 Pod 垂直扩缩容](/zh-cn/docs/concepts/workloads/autoscaling/#in-place-resizing) ([特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/)名称为 `InPlacePodVerticalScaling`), 则 kubelet 会在本地存储 Pod 状态。 文件名为 `pod_status_manager_state`,位于 kubelet 基础目录内 (在 Linux 上默认为 `/var/lib/kubelet`;你可以使用 `--root-dir` 进行配置)。 ### 容器运行时 {#container-runtime} kubelet 使用通过配置参数所配置的套接字与容器运行时进行通信: - `containerRuntimeEndpoint` 用于运行时操作 - `imageServiceEndpoint` 用于镜像管理操作 这些端点的实际值取决于所使用的容器运行时。 ### 设备插件 {#device-plugins} kubelet 在路径 `/var/lib/kubelet/device-plugins/kubelet.sock` 为各个[要注册的设备插件](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#device-plugin-implementation)公开一个套接字。 当设备插件注册自己时,它会为提供其套接字路径供 kubelet 连接使用。 设备插件套接字应位于 kubelet 基础目录中的 `device-plugins` 目录内。 在典型的 Linux 节点上,这意味着 `/var/lib/kubelet/device-plugins`。 ### Pod Resources API [Pod Resources API](/zh-cn/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/#monitoring-device-plugin-resources) 将在路径 `/var/lib/kubelet/pod-resources` 上被公开。 ### DRA、CSI 和设备插件 {#dra-csi-and-device-plugins} kubelet 会查找通过 [DRA](/zh-cn/docs/concepts/scheduling-eviction/dynamic-resource-allocation/) 设备管理器或存储插件所管理的设备插件所创建的套接字文件,然后尝试连接到这些套接字。 kubelet 查找的目录是 kubelet 基础目录下的 `plugins_registry`, 因此在典型的 Linux 节点上这意味着 `/var/lib/kubelet/plugins_registry`。 请注意,对于设备插件,有两种备选的注册机制。每个给定的插件只能使用其中一种注册机制。 可以将套接字文件放入该目录的插件类型包括: - CSI 插件 - DRA 插件 - 设备管理器插件 (通常是 `/var/lib/kubelet/plugins_registry`)。 ## 安全配置文件和配置 {#security-profiles-configuration} ### Seccomp 被 Pod 引用的 Seccomp 配置文件应放置在 `/var/lib/kubelet/seccomp`。 有关细节请参见 [Seccomp 参考](/zh-cn/docs/reference/node/seccomp/)。 ### AppArmor kubelet 不会通过特定于 Kubernetes 的路径加载或引用 AppArmor 配置文件。 AppArmor 配置文件通过节点操作系统被加载,而不是通过其路径被引用。 ## 加锁 {#locking} {{< feature-state state="alpha" for_k8s_version="v1.2" >}} kubelet 的锁文件;通常为 `/var/run/kubelet.lock`。 kubelet 使用此文件确保尝试运行两个不同的、彼此冲突的 kubelet。 你可以使用 `--lock-file` kubelet 命令行参数来配置这个锁文件的路径。 如果同一节点上的两个 kubelet 使用不同的锁文件路径值,则这两个 kubelet 在同时运行时将不会检测到冲突。 ## {{% heading "whatsnext" %}} - 了解 kubelet [命令行参数](/zh-cn/docs/reference/command-line-tools-reference/kubelet/)。 - 查阅 [kubelet 配置 (v1beta1) 参考文档](/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/)