本地存储

本地存储

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

下一页