K8S 之 存储卷 hostPath
摘要
-
本文介绍 K8S 的 存储卷 hostPath ,本文以 CentOS 8 为例。
存储卷 hostPath 介绍
-
hostPath 是一种直接把 Node 节点本地文件或目录 挂载到 Pod 容器里的存储卷。
-
容易破坏节点环境,不建议生产使用
-
同一个 Deployment 的多个 Pod 被调度到同一个节点,并且它们的 hostPath 配置指向相同的宿主机路径,这些 Pod 之间是可以共享该目录中文件的。
-
典型使用场景
场景 | 示例 |
---|---|
日志收集 | 挂载 /var/log 到 Pod 内部 |
挂载宿主机配置文件 | 如挂载 /etc/hosts 、/etc/localtime |
使用宿主机 docker.sock | 挂载 /var/run/docker.sock 运行 Docker-in-Docker |
存储调试临时文件 | Pod 调试时访问宿主机特定目录 |
示例
-
Pod 内部 /mnt/hostdata 映射到宿主机 /data 目录
1 | apiVersion: v1 |
-
hostPath.type
可以配置的值如下,默认为 空。
type | 含义 |
---|---|
DirectoryOrCreate |
如果 /data 不存在则自动创建 ,权限为 0755 |
Directory |
必须存在且为目录 |
File |
必须存在且为文件 |
Socket |
必须是 socket |
CharDevice |
字符设备 |
BlockDevice |
块设备 |
FileOrCreate |
不存在则自动创建空文件,权限设置为 0644 |
不设置 |
默认值是空,主机上的路径无论是文件、目录、甚至不存在,都会直接挂载 ,容易引起预期之外的挂载问题 |
-
Kubernetes 在删除 Pod 时,不会删除 hostPath 所挂载的宿主机目录或文件
存储卷类型 | 删除 Pod 后目录会被删除吗? | 说明 |
---|---|---|
emptyDir |
✅ 会被删除 | 临时目录,Pod 生命周期结束自动清理 |
hostPath |
❌ 不会删除 | 宿主机路径独立于 Pod 生命周期,不会清理 |