One of the important concepts in Kubernetes is to define persistence volumes to retain the data when nodes get deleted or restarted. I have not studied the methods for persistent volume in detail, but to fulfill my requirements, I found choosing persistent volume with NFS(network file system) to be very useful, so that I can assign an external volume mounted as NFS as a persistent volume in Kubernetes' pods.
Some of the mechanisms of the persistent volume are
1) Hostpath => Volume in the host system of the node. It is destroyed when a node is restarted or removed.
2) Local => accessible to pods in a node (any mounted partition can be assigned)
3) NFS => This one is the best for me. I can use any system in the network and mount the network file system (NFS) to use as a persistent volume.
NFS Persistent Volume
https://kubernetes.io/docs/concepts/storage/volumes/#local
In summary, we need to install nfs-kernel-server on the host system.
sudo apt update
sudo apt install nsf-kernel-server
Then we create a shared directory
sudo mkdir /Backup/k8s-volume
cd /Backup/k8s-volume
NFS will translate any root operations on the client to the nobody:nogroup credentials as a security measure. Therefore, you need to change the directory ownership to match those credentials.
sudo chown nobody:nogroup /Backup/k8s-volume
sudo service nfs-kernel-server restart
We now want to config NFS exports on the host
The following line in /etc/exports will suffice
/Backup/k8s_volume *(rw,sync,no_subtree_check,no_root_squash,no_all_squash,insecure)
The exported volume can be mounted anywhere from the network. So even if the nodes got destroyed or restarted, we have persistent data safe in the network system.
sudo exportfs -rav (exports all filesystem paths)
sudo exportfs -v (verify)
Finally, restart the server:
sudo systemctl restart nfs-kernel-server
Now the server is running. If the server is using some firewall techniques, we have to allow the NFS port 2049.
Command to verify (from client)
sudo mount -t nfs <server(ip/hostname)>:/Backup/k8s_volume /mnt
The files will be mounted into /mnt folder
To unmount
sudo umount /mnt
Note: There is much other information in the link given above. For Kubernetes, this will be enough.
Now let's create pv.yaml file with NFS persistent volume:
kubectl apply -f pv.yaml
kubectl get pv
The result shows the create persistent volume. We can then allocate the volume needed for pods, which is called "persistent volume claim" or pvc. For example: pvc.yaml
Note the app name in pv.yaml and pvc.yaml is the same so that PVC knows from where the volume to claim is.
No comments:
Post a Comment