Kubernetes Persistent Volumes: How to List and Copy Files and Directories

You have created a Kubernetes workload, e.g. Deployment, that uses a PersistentVolume and a PersistentVolumeClaim. It’s provisioned by your cloud platform, say, DigitalOcean. You want to know what space is available to you, you want to browse files and directories on your Volume, and you want to copy something from the Volume to your host machine. How do you do it?

First, find out your pvc’s mountPath. Your data sits there. Second, you can access it from the pod that uses the PersistentVolumeClaim. Fire up a terminal on the pod and use your favourite tools like ls and df to list files or see stats of the volume usage. Just make sure that an image your pod container is using has all the tools you need.

# open bash on the pod
$ kubectl exec -it redis-master-0 bash

# see disk usage stats
# volume is mounted under /data
I have no name!@redis-master-0:/$ df -h
Filesystem                                                                Size  Used Avail Use% Mounted on
overlay                                                                   158G  6.5G  145G   5% /
tmpfs                                                                      64M     0   64M   0% /dev
tmpfs                                                                     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda1                                                                 158G  6.5G  145G   5% /health
/dev/disk/by-id/scsi-0DO_Volume_pvc-ae31a80d-7b23-11e9-bffb-0ab3124b7b1c  7.9G   36M  7.4G   1% /data
shm                                                                        64M     0   64M   0% /dev/shm
tmpfs                                                                     3.9G   12K  3.9G   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs                                                                     3.9G     0  3.9G   0% /proc/acpi
tmpfs                                                                     3.9G     0  3.9G   0% /sys/firmware

# list files
$ ls -l /data
total 24
-rw-r--r-- 1 1001 1001   130 May 20 18:23 appendonly.aof
-rw-r--r-- 1 1001 1001   175 May 20 17:22 dump.rdb
drwxrws--- 2 root 1001 16384 May 20 17:22 lost+found

Third, you can copy files or directories from or to a Kubernetes pod using kubectl cp:

kubectl cp default/redis-master-0:/data/dump.rdb /home/vitaly/Downloads/dump.rdb

See kubectl cp --help for more details.