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 单元设置文件中声明。 这些配置通常包括:
- 运行 kubelet 的命令行参数
- kubelet 所使用的环境变量或配置 Golang 运行时
状态
资源管理器的检查点文件
所有资源管理器将 Pod 与已分配资源之间的映射保存在状态文件中。
状态文件位于 kubelet 的基础目录,也称为根目录(但与节点根目录 /
不同)之下。
你可以使用 kubelet 命令行参数 --root-dir
来配置 kubelet 的基础目录。
文件名称:
设备管理器的检查点文件
设备管理器在与套接字文件相同的目录(/var/lib/kubelet/device-plugins/
)中创建检查点。
对于设备管理器,
检查点文件的名称为 kubelet_internal_checkpoint
。
Pod 状态检查点存储
Kubernetes v1.27 [alpha]
(enabled by default: false)
如果你的集群启用了就地 Pod 垂直扩缩容
(特性门控名称为 InPlacePodVerticalScaling
),
则 kubelet 会在本地存储 Pod 状态。
文件名为 pod_status_manager_state
,位于 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
)。
安全配置文件和配置
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 使用不同的锁文件路径值,则这两个 kubelet 在同时运行时将不会检测到冲突。
接下来
- 了解 kubelet 命令行参数。
- 查阅 kubelet 配置 (v1beta1) 参考文档