将卷指定为 空目录(emptyDir) ,将会为Pod分配临时存储目录,会随着Pod删除而删除。无法持久化。

    应用场景:

    • 临时空间,例如基于磁盘的合并排序
    • 设置检查点以从崩溃事件中恢复未执行完毕的长计算
    • 保存内容管理器容器从Web服务器容器提供数据时所获取的文件

    默认情况下,emptyDir可以使用任何类型的由node节点提供的后端存储。如果你有特殊的场景,需要使用tmpfs作为emptyDir的可用存储资源也是可以的,只需要在创建emptyDir卷时增加一个emptyDir.medium字段的定义,并赋值为”Memory”即可。

    :::info 注:在使用tmpfs文件系统作为emptyDir的存储后端时,如果遇到node节点重启,则emptyDir中的数据也会全部丢失。同时,你编写的任何文件也都将计入Container的内存使用限制。 :::

    使用redis的示例:

    1. # emptydir.yaml
    2. apiVersion: v1
    3. kind: Pod
    4. metadata:
    5. labels:
    6. name: redis
    7. role: master
    8. name: redis-master
    9. spec:
    10. containers:
    11. - name: master
    12. image: redis:latest
    13. env:
    14. - name: MASTER
    15. value: "true"
    16. ports: # 容器内端口
    17. - containerPort: 6379
    18. volumeMounts: # 容器内挂载点
    19. - mountPath: /data
    20. name: redis-data # 必须取个名字
    21. volumes:
    22. - name: redis-data # 跟上面卷的名字对应
    23. emptyDir: {} # 宿主机挂载点为空

    创建 Pod:

    kubectl create -f emptydir.yaml
    

    此时 Emptydir 已经创建成功,在宿主机上的访问路径为 /var/lib/kubelet/pods/<pod uid>/volumes/kubernetes.io~empty-dir/redis-data,如果在此目录中创建删除文件,都将对容器中的/data目录有影响,如果删除 Pod,文件将全部删除,即使是在宿主机上创建的文件也是如此,在宿主机上删除容器则 k8s 会再自动创建一个容器,此时文件仍然存在。