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

Facebook评论