Skip to content

emptyDir 存储卷

基本概念与特性

emptyDir 是一种临时存储卷,其生命周期与 Pod 紧密绑定:

  • 创建时机:当 Pod 被调度到节点上时,Kubernetes 会自动在节点上创建一个空目录作为 emptyDir 卷
  • 生命周期:emptyDir 会随 Pod 的删除而被永久清除,但容器崩溃不会导致数据删除
  • 共享性:Pod 内的所有容器都可以读写同一个 emptyDir 卷,适合容器间数据共享
  • 性能:数据存储在节点本地,具有较高的 I/O 性能

使用场景

emptyDir 适用于以下临时存储需求:

  1. 容器间共享数据:如一个容器生成日志,另一个容器处理日志
  2. 临时工作空间:应用程序运行时所需的临时目录,无需永久保留
  3. 缓存层:作为应用程序的缓存存储,加速数据处理
  4. 临时文件交换:多个容器间需要临时交换文件,如配置文件传递

配置示例

yaml
apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
    - image: busybox
      name: test-emptydir
      command: ["sleep", "3600"]
      volumeMounts:
        - mountPath: /data
          name: data-volume
  volumes:
    - name: data-volume
      emptyDir: {}

配置选项

emptyDir 支持以下可选参数:

  1. 存储介质选择
    yaml
    volumes:
      - name: cache-volume
        emptyDir:
          medium: Memory # 使用内存而非磁盘
  2. 大小限制(仅当 medium=Memory 时有效):
    yaml
    volumes:
      - name: cache-volume
        emptyDir:
          medium: Memory
          sizeLimit: 1Gi

注意事项

  1. 数据非持久化:明确 emptyDir 数据不持久,勿用于需要长期保存的数据存储
  2. 节点故障风险:若 Pod 因节点故障迁移,原节点上的 emptyDir 数据无法跟随迁移
  3. 资源消耗:需关注其对节点磁盘空间的占用,避免大量临时数据导致节点磁盘满溢
  4. tmpfs 限制:当使用 tmpfs 作为后端时,节点重启会导致数据丢失,且文件计入容器内存限制