Pod 卷是什么
卷定义在 Pod 层,被该 Pod 的容器共同挂载:空目录卷 emptyDir 的生命周期跟着 Pod 走,容器重启数据还在,Pod 被删除或被驱逐即清空;宿主目录卷 hostPath 直接读写节点上的路径,与节点强耦合。生产环境的持久数据应交给 PVC,emptyDir 只用于临时缓存与容器间交换文件,搞清楚边界能避免一大批“数据怎么没了”的事故。
基本信息
| emptyDir | Pod 沙箱内的目录:容器重启数据在,Pod 删除即丢 |
|---|---|
| medium: Memory | 内存盘:读写快、计入内存用量、Pod 结束即清 |
| sizeLimit | 限制 emptyDir 用量,超过会被驱逐,默认无限制 |
| hostPath | 挂宿主路径,可选 DirectoryOrCreate 等类型,与节点绑定 |
| 多容器共享 | 同 Pod 里挂同一个卷名即可交换文件,如日志与代码目录 |
| 选型 | 持久数据用 PVC,临时交换用 emptyDir,宿主相关用 hostPath |
典型使用场景
- 边车模式共享文件:日志采集容器读主容器写出的日志目录
- 镜像构建或解压的临时工作目录,不污染可写层
- 给数据库类容器提供 /dev/shm 或低延迟临时空间
- 读取节点上的日志或套接字文件(hostPath,需明确风险)
- 确认 Pod 漂移后数据是否跟着走:判断该不该换成 PVC
emptyDir 示例
emptyDir 示例
volumes:
- name: cache
emptyDir:
sizeLimit: 512Mi # 超过上限容器会被驱逐
- name: shm
emptyDir:
medium: Memory # 内存盘,适合 /dev/shm
sizeLimit: 64Mi
containers:
- name: app
image: registry.example.com/team/app:1.2.3
volumeMounts:
- { name: cache, mountPath: /var/cache/app }
- { name: shm, mountPath: /dev/shm }卷类型对照
| 类型 | 生命周期 | 适用 | 风险 |
|---|---|---|---|
| emptyDir | 随 Pod,容器重启保留 | 临时缓存、容器间交换 | 写满节点磁盘会触发驱逐 |
| emptyDir+Memory | 随 Pod,占内存 | /dev/shm、低延迟临时数据 | 计入内存,过大引发 OOM |
| hostPath | 与节点绑定 | 读宿主日志、套接字、设备 | 节点耦合,权限与安全风险高 |
| PVC | 独立于 Pod | 数据库、需持久化的数据 | 需核对存储类与绑定状态 |
emptyDir 默认落在节点磁盘:写满会触发节点磁盘压力并驱逐 Pod,显式设 sizeLimit 更安全。
hostPath 挂 /var/run/docker.sock、宿主根目录之类路径,等于把节点控制权交给容器,生产环境不要这样配置。