Could anyone clarify on the Persistent Volume in Kubernetes?
In this below example, the /my-test-project is in the persistent volume.Then, why I need these mounts as technically my entire directory /my-test-project is persisted? How these mountpath and subpath would help if entire directory is persisted.Thanks!
volumeMounts:
- name: empty-dir-volume
mountPath: /my-test-project/data-cache
subPath: data-cache
- name: empty-dir-volume
mountPath: /my-test-project/user-cache
subPath: user-cache
volumes:
- name: empty-dir-volume
emptyDir: {}
Your /my-test-project
entire directory is not persisted.
mountPath or path in host /my-test-project/data-cache
is persisted in empty-dir-volume
in path data-cache
mountPath /my-test-project/user-cache
is persisted in empty-dir-volume
in path user-cache
Which mean when you create files inside /my-test-project/data-cache
, it will be persisted in data-cache
(subpath) inside emtpy-dir-volume. Similarly for user-cache. Whenever you create files inside /my-test-project/
it wont be persisted. Lets say you create /my-test-project/new-dir
, now new-dir
will not be persisted.
For better explaination, lets take the below example(two containers sharing the volume, but in different mounthPath):
apiVersion: v1
kind: Pod
metadata:
name: share-empty-dir
spec:
containers:
- name: container-1
image: alpine
command:
- "bin/sh"
- "-c"
- "sleep 10000"
volumeMounts:
- name: empty-dir-volume
mountPath: /my-test-project/data-cache
subPath: data-cache-subpath
- name: empty-dir-volume
mountPath: /my-test-project/user-cache
subPath: user-cache-subpath
- name: container-2
image: alpine
command:
- "bin/sh"
- "-c"
- "sleep 10000"
volumeMounts:
- name: empty-dir-volume
mountPath: /tmp/container-2
volumes:
- name: empty-dir-volume
emptyDir: {}
In container-1:
/my-test-project/user-cache
is persisted in empty-dir-volume
in path user-cache-subpath
/my-test-project/data-cache
is persisted in empty-dir-volume
in path data-cache-subpath
In container-2:
/tmp/container-2
is persisted in empty-dir-volume
in path "" (which means "/")Observations:
/my-test-project/user-cache/a.txt
. we can see this file in container-2 at /tmp/container-2/user-cache-subpath/a.txt
and reverse will work/my-test-project/data-cache/b.txt
. we can see this file in container-2 at /tmp/container-2/data-cache-subpath/a.txt
and reverse will work/tmp/container-2/new.txt
, we can never this file in container-1 as the base path we are have specified subPaths in container-1Note: Just to be clear, you are using emptyDir
type volume, which means whenever pod gets deleted, data will be lost. This type is used only to share the data between containers.