首页/云/Kubernetes 速查/emptyDir 临时卷与容器间共享
配置与存储54 条

emptyDir 临时卷与容器间共享

Pod 生命周期内的临时目录:容器重启数据保留、Pod 删除即清空;多容器共享同一 emptyDir 是 sidecar 模式的常用手段。

Kubernetes 速查云更新于 2026-10-13

对象定位

emptyDir 是随 Pod 创建的临时目录:Pod 被调度到节点时建立,容器重启时内容保留,Pod 被删除或迁移到其他节点时数据清空。适用平台是 Kubernetes。它最典型的用法是同一 Pod 内多个容器共享一个目录,比如主容器写日志、sidecar 从同一目录读取并转发,从而避免把日志塞进容器文件系统。

基本信息

适用平台Kubernetes,Pod 级卷类型
生命周期与 Pod 一致:容器重启保留,Pod 删除或重调度即清空
存储位置默认落在节点磁盘(kubelet 数据目录下),可用 medium 改成 Memory
容量约束可用 sizeLimit 限制,超过后该 Pod 会被驱逐

典型使用场景

  • 日志采集:应用容器写、日志 sidecar 读并转发到远端
  • 构建缓存:编译类任务把中间产物放在临时目录,Pod 结束即释放
  • 只读根文件系统:主容器根文件系统只读,单独挂一个可写的 emptyDir 放运行期数据
  • 内存盘加速:把临时文件放 medium: Memory 提高读写速度(占用节点内存)
  • 初始化传递:init 容器准备数据、主容器读取,通过共享目录交接

共享目录示例

共享目录示例
volumes:
  - name: shared
    emptyDir: {}
  - name: cache
    emptyDir:
      sizeLimit: 1Gi
containers:
  - name: app
    volumeMounts:
      - name: shared
        mountPath: /var/log/app
  - name: shipper
    image: registry.example.com/shipper:2.1.0
    volumeMounts:
      - name: shared
        mountPath: /mnt/incoming

核对与清理

核对与清理
kubectl get pod web-x -o jsonpath='{.spec.volumes[*].emptyDir}'   # 配置
kubectl exec -it web-x -- df -h /var/log/app                       # 用量
kubectl exec -it web-x -- du -sh /var/log/app                      # 实际占用
kubectl describe pod web-x | grep -i -A2 Evicted                   # 是否因超限被驱逐
kubectl get pod web-x -o jsonpath='{.status.reason}'

与持久卷的差别

维度emptyDirPVC
生命周期随 Pod 结束消失独立于 Pod 存在
跨节点不能迁移,重调度即新建空目录可跟随 Pod 挂载
容量控制sizeLimit 限制,超出驱逐 Pod按申请量供应
适用数据缓存、临时文件、容器间交换数据库、上传文件等需要留存的数据
默认落在节点磁盘(kubelet 根目录下);写入超过 sizeLimit 时该 Pod 会被驱逐,监控要覆盖临时目录用量。
medium: Memory 的 emptyDir 会从节点内存分配并按内存计量,计入 Pod 的内存使用,适合小体积高频读写,不适合放大文件。

与其他卷的配合

  • 与 PVC 并存:需要留存的数据放 PVC,临时缓存放 emptyDir,同一 Pod 可同时挂两类卷
  • 与 init 容器配合:init 负责往共享目录写初始数据,主容器只读消费,职责清晰
  • 与只读根文件系统配合:根目录只读时,程序需要的可写路径用 emptyDir 单独挂出来
  • 与 sidecar 配合:共享目录是日志与指标中转的标准做法,注意明确目录属主避免写不进去

易错点

  • 把 emptyDir 当持久存储:Pod 被驱逐或重建后数据就没了,状态数据必须用 PVC
  • 多容器共享时的权限问题常见:写入方与读取方 uid 不同,需要统一 runAsUser 或提前 chown
  • 不设 sizeLimit 时临时文件可能撑满节点磁盘,触发节点 DiskPressure 并影响同节点其他 Pod
  • 把大文件放进 medium: Memory 的 emptyDir:直接消耗节点内存,容易触发 OOM 或驱逐

数据来源与参考

  • Kubernetes 官方文档 · Volumes(emptyDir)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌