功能说明
在 TKE 集群中添加节点或创建节点池时,您可以选择挂载数据盘作为容器及镜像的存储目录。挂载数据盘时,系统会提供默认路径
/var/lib/container。本文将详细介绍该路径的特殊性、底层实现原理以及常见疑问。什么是 /var/lib/container
/var/lib/container 是 TKE 节点数据盘挂载的默认特殊路径。当您将数据盘的挂载路径设置为 /var/lib/container 时,系统会自动将以下关键目录统一挂载到该数据盘上:目录 | 挂载点 | 用途 |
/var/lib/kubelet | /var/lib/container/kubelet | Kubelet 工作目录,存储 Pod 元数据和挂载信息 |
/var/lib/containerd | /var/lib/container/containerd | 容器运行时数据目录,存储容器镜像和运行时数据 |
/var/log/pods | /var/lib/container/log | Pod 日志目录,存储各 Pod 的标准输出和标准错误日志 |
/var/lib/docker | /var/lib/container/docker | Docker 运行时数据目录(使用 Docker 运行时的集群) |
说明:
/var/lib/container 不是 /var/lib/containerd 的缩写或拼写错误,二者是不同的路径。/var/lib/container 是 TKE 定义的一个统一存储路径,用于同时承载 Kubelet 和容器运行时的全部数据。实现原理
Bind Mount 机制
当您配置数据盘挂载路径为
/var/lib/container 时,TKE 节点初始化脚本执行以下操作:1. 格式化数据盘:将数据盘格式化为指定的文件系统(如 ext4)。
2. 挂载到 /var/lib/container:将格式化后的数据盘挂载到
/var/lib/container 目录。3. 创建子目录:在
/var/lib/container 下创建 kubelet、containerd(或 docker)、log 等子目录。4. Bind Mount 绑定挂载:通过 Linux bind mount 将各子目录绑定到对应的系统路径。例如:
/var/lib/container/kubelet → /var/lib/kubelet/var/lib/container/containerd → /var/lib/containerd/var/lib/container/log → /var/log/pods/var/lib/container/docker → /var/lib/docker说明:
Bind mount 是一种 Linux 内核机制,它将一个目录挂载到另一个路径上,使得两个路径访问的是同一份数据。通过 bind mount,Kubelet 和容器运行时的配置文件无需修改默认路径,即可将数据实际存储到数据盘上。
为什么不直接修改配置文件
TKE 选择使用 bind mount 而不是直接修改 Kubelet 或容器运行时的配置文件路径,原因如下:
兼容性:无需修改 Kubelet 和容器运行时的默认配置,避免因配置路径变更导致的兼容问题。
统一管理:通过单一数据盘路径同时管理 Kubelet 和容器运行时的数据。
运维一致性:操作系统层面的路径保持标准一致,便于统一运维和排障。
高级设置中“容器目录”配置的变化
当您在数据盘挂载路径中填写
/var/lib/container 后,高级设置中的容器目录配置项将自动隐藏。这是正常行为,不是系统异常。原因说明:
/var/lib/container 路径已经包含了容器目录的挂载逻辑。系统会自动将容器运行时的数据目录(/var/lib/containerd 或 /var/lib/docker)通过 bind mount 挂载到 /var/lib/container 下,因此不再需要单独配置容器目录。注意事项
路径验证:配置数据盘挂载路径为
/var/lib/container 后,您可以通过 SSH 登录节点执行 mount 或 df -h 命令,查看 bind mount 绑定关系。此时虽然实际数据存储在数据盘上,但 /var/lib/containerd 等路径仍然可以正常访问。仅需修改运行时路径的场景:如果您只需要将容器运行时的数据存储到数据盘上,而不需要同时迁移 Kubelet 数据,可以将挂载路径设置为其他自定义路径(例如
/data),然后在高级设置中将容器目录指向该路径。路径混淆排查:如果您在节点上执行
ls /var/lib/containerd 能看到容器数据,同时发现数据盘挂载在 /var/lib/container 目录下,这是 bind mount 的正常效果,两个路径指向的是同一份数据。