I'm starting to learn Kubernetes by creating LAMP stack. For my MySQL database I have created a persistent volume and persistent volume claim but now I came across a problem where I can't find the place where my PV files are stored.
This is my configuration for now:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
labels:
app: mysql
spec:
storageClassName: manual
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
hostPath:
path: "/lamp/pvstorage"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
labels:
app: mysql
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3GiAnd then at the end of my MySQL deployment file I have those lines:
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvcI was hoping that my everything from Pod's /var/lib/mysql would be backed up at the host's /lamp/pvstorage directory but that doesn't seem to happen (but files are backed up somewhere else from what i can see. Database is always recreated after deleting mysql Pod).
So my question is what am I doing wrong right now and how do I specify that location?
TL;DR
To access the files stored on a PVC with a hostPath within a minikube instance that has a --driver=docker you will need directly login to the host (minikube) with for example: $ minikube ssh and access the files directly: ls /SOME_PATH
The topic of Persistent Volumes, Storage Classes and resources that are handling whole process are quite wide and they need to be investigated on case to case basis.
The good source of baseline knowledge could be gained from official documentation and the documentation of Kubernetes solution used:
Most often than not when using minikube (see the exception with --driver=none) some kind of containerization/virtualization (the layer encircling minikube) is used to isolate the environment and also allow for easier creation and destruction of the instance. This is making all of the resources being stored inside of a some "box" (Virtualbox VM, Docker container etc.).
As in this example, the files that were created by mysql were stored on the host running minikube but in the minikube instance itself. When you create minikube with --driver=docker you create a Docker container that has all of the components inside of it. Furthermore by using a PVC with a following part of the .spec:
hostPath:
path: "/lamp/pvstorage"
hostPathA
hostPathvolume mounts a file or directory from the host node's filesystem into your Pod.-- Kubernetes.io: Docs: Concepts: Storage: Volumes: hostPath
As an example of how you can access the files:
mysql is in Running state ($ kubectl get pods)$ minikube sshls /mnt/data (or what is specified in the hostPath)docker@minikube:~$ ls /mnt/data/
auto.cnf ib_logfile0 ib_logfile1 ibdata1 mysql performance_schema
Additional resources:
If there is a use case of having the host directory mounted to the minikube instance to specific directory you can opt for:
$ minikube mount SOURCE:DESTINATION