CKA [Storage] – emptyDir的讲解

  • emptyDir只是一个暂存的volume (ephemeral volume),如果pod被删除之后,那么emptyDir上的数据将不会被保留
  • emptyDir能够直接使用内存来做数据的存储,这个比数据存入硬盘来比较的话,memory读取的速度会比较快
  • 如果pod当中的container是crashed了,那么数据还是一样被保留的,因为数据是跟pod绑定的,只有pod被删除了数据才会被删除
  • 你用了 Deployment 或 ReplicaSet 自动重建 Pod,如果Deployment 更新版本,旧 Pod 被销毁,新的 Pod 被创建。因为是新 Pod,所以新的 emptyDir 是空的。
  • emptyDir可以决定把数据存入memory或者ssd
  • 根据以上的yaml ,pod声明了volume shared-storage
  • busybox-container-1 和 busybox-container-2 就是 使用了shared-storage, 并且读到了/data 目录

实践测试

1. 创建以下的pod

【可以自行创建yaml】
1. 使用命令行创建pod yaml 
kubectl run emptydir-demo --image=busybox --dry-run=client -o yaml > pod.yaml

2. 在里面添加volumes和volumeMounts 可以参考官方文档:https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

【执行】
kubectl apply -f pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: emptydir-demo
spec:
  containers:
  - image: busybox
    name: container1
    command: ["sleep","36000"]
    volumeMounts:
      - name: shared-volume
        mountPath: /data
  - image: busybox
    name: container2
    command: ["sleep","36000"]
    volumeMounts:
      - name: shared-volume
        mountPath: /data
  volumes:
    - name: shared-volume
      emptyDir: {}

2. 进入到container1 创建一个test.txt

【进入container1】
kubectl exec -it emptydir-demo -c container1 -- sh

【进入data path】
cd data

【创建test.txt】
touch test.txt

【登出container1】
exit

3. 最后就是进入container2, 看看刚刚在container1创建的test.txt 是否存在

【进入container2】
kubectl exec -it emptydir-demo -c container2 -- sh

【查看在data地下的文件】
ls -l /data

最后如果你想把文件写入memory的话就需要看以下的截图,也能参考官方文档:
https://kubernetes.io/docs/concepts/storage/volumes/#emptydir

Loading

Facebook评论