跳转至

本地存储卷之emptyDir

临时存储:EmptyDir 适用场景

  • 实现 pod 内容器之间数据共享(如Sidecar日志收集)
  • 大数据处理中间缓存
  • CI/CD 流水线临时工作区
  • 随着 pod 被删除,该卷也会被删除

实践

1. 创建资源清单 volume-emptydir.yml, 选择调度在 k8sworker001 节点
apiVersion: v1
kind: Pod
metadata:
  name: volume-emptydir
spec:
  nodeName: k8sworker001
  containers:
  - name: write
    image: centos
    imagePullPolicy: IfNotPresent
    command: ["bash","-c","echo haha > /data/1.txt && echo '我已经将 haha 写入到 /data/1.txt';sleep 6000"]
    volumeMounts:
    - name: data
      mountPath: /data

  - name: read
    image: centos
    imagePullPolicy: IfNotPresent
    command: ["bash","-c","cat /data/1.txt; sleep 6000"]
    volumeMounts:
    - name: data
      mountPath: /data

  volumes:
  - name: data
    emptyDir: {}
      sizeLimit: 500Mi  # 关键配置:防止磁盘爆满
2. 基于 yaml 文件创建 pod, 选择调度在 k8sworker001 节点
[root@k8smaster001 emptydir]# kubectl apply -f volume-emptydir.yml 
pod/volume-emptydir created
3. 查看 pod 启动情况
[root@k8smaster001 emptydir]#  kubectl get pods |grep volume-emptydir
volume-emptydir   2/2     Running   0          2m14s
4. 查看 pod 描述信息
[root@k8smaster001 emptydir]# kubectl describe pod volume-emptydir | tail -10
Events:
  Type    Reason   Age    From     Message
  ----    ------   ----   ----     -------
  Normal  Pulling  2m36s  kubelet  Pulling image "centos"
  Normal  Pulled   48s    kubelet  Successfully pulled image "centos" in 1m47.819s (1m47.819s including waiting)
  Normal  Created  48s    kubelet  Created container write
  Normal  Started  47s    kubelet  Started container write
  Normal  Pulled   47s    kubelet  Container image "centos" already present on machine
  Normal  Created  47s    kubelet  Created container read
  Normal  Started  47s    kubelet  Started container read
5. 验证
[root@k8smaster001 emptydir]# kubectl logs volume-emptydir -c write
我已经将 haha 写入到 /data/1.txt
[root@k8smaster001 emptydir]# kubectl logs volume-emptydir -c read
haha

生产经验

  • ✅ 设置 sizeLimit 避免失控增长
  • ✅ 内存介质提升性能:emptyDir: { medium: "Memory" }
  • ⚠️ Pod删除数据即丢失,不能用于关键数据