本地存储
本地存储
Empty-Dir
每当一个 Pod 被分配到一个现有节点时,就会创建一个 EmptyDir 类型的卷。该卷最初是空的,所有的 Pod 容器都可以向该卷读写文件。这个卷不是一个持久的数据卷。每当 Pod 从节点中移除时,数据 EmptyDiris 就会被永久删除。需要注意的是,在容器失败的情况下,数据不会被删除。让我们创建一个 Pod 来测试这个卷。
vim pod-emptydir.yaml
apiVersion : v1
kind : Pod
metadata :
name : busybox
namespace : default
spec :
containers :
- image : busybox
name : busy
command :
- sleep
- " 3600 "
volumeMounts :
- mountPath : /giropops
name : giropops-dir
volumes :
- name : giropops-dir
emptyDir : {}
然后创建卷:
$ kubectl create -f pod-emptydir.yaml
pod/busybox created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 12s
让我们列举一下 Pod 里面的容器名称。
$ kubectl get pods busybox -n default -o jsonpath='{.spec.containers[*].name}*'
busy
现在让我们在创建的 Pod 中直接在路径/giropops 中添加一个文件。
$ kubectl exec -ti busybox -c busy -- touch /giropops/funciona
$ kubectl exec -ti busybox -c busy -- ls -l /giropops/
total 0
-rw-r--r-- 1 root root 0 Jul 7 17:37 funciona
正如我们所看到的,我们的文件被正确的创建了,我们检查一下这个文件是否在 kubelet 管理的卷上也被创建了。让我们检查一下这个文件是否也是在 kubelet 管理的卷上创建的。为此,我们需要找出 Pod 所在的节点。
$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
busybox 1/1 Running 0 1m 10.40.0.6 elliot-02
$ kubectl exec -ti busybox -c busy sh
$ ls giropops
现在让我们走出 Pod,在 elliot-02 节点中寻找我们的卷。要做到这一点,通过 SSH 访问节点,然后执行命令。
$find /var/lib/kubelet/pods/ -iname giropops-dir
/var/lib/kubelet/pods/7d33810f-8215-11e8-b889-42010a8a0002/volumes/kubernetes.io~empty-dir/giropops-dir
$ ls /var/lib/kubelet/pods/7d33810f-8215-11e8-b889-42010a8a0002/volumes/kubernetes.io~empty-dir/giropops-dir
funciona
回到节点 elliot-01,我们要把 Pod 删除,再列出目录。
$ kubectl delete -f pod-emptydir.yaml
pod "busybox" deleted
再次访问节点 elliot-02,看看卷是否还存在。
$ ls /var/lib/kubelet/pods/7d...kubernetes.io~empty-dir/giropops-dir
No such file or directory
哎呀,我们收到了找不到目录的消息,正是我们所期望的正确吗?因为类型为 EmptyDir 的卷并不能保持数据的持久性。
Links
- https://blog.csdn.net/solaraceboy/article/details/84339673 Kubernetes 中,两种常见类型的 Volume 深度实践