Volumes and Persistent Storage in Kubernetes

Introduction:

Kubernetes is a popular open-source system for automating deployment, scaling, and management of containerized applications. One of the essential components of a Kubernetes cluster is storage. A Kubernetes volume provides storage resources to containers running in a cluster. The storage resources can be either local storage or network storage.


Volumes in Kubernetes:

A Kubernetes volume is an abstraction that represents a disk or a file system in a container. It enables sharing of data between containers and across pods. Volumes can be used for various purposes, including sharing configuration files, logs, and storing persistent data.


Types of Volumes in Kubernetes:


  • EmptyDir: This is a transient, ephemeral volume that is created when a Pod is scheduled and deleted when the Pod is terminated. The data stored in an EmptyDir volume is not persisted across pod restarts.

  • HostPath: This type of volume is used to mount a file or directory from the host node file system into a container. This is useful when a Pod requires access to files or directories on the host system.

  • ConfigMap and Secret: These types of volumes are used to mount configuration files or secrets into a container. A ConfigMap volume contains configuration data, while a Secret volume contains sensitive information, such as passwords or tokens.

  • PersistentVolume (PV) and PersistentVolumeClaim (PVC): These types of volumes are used for long-term storage, and the data stored in a PersistentVolume is not deleted when the Pod is terminated. A PersistentVolumeClaim is a request for storage by a user. The Kubernetes control plane matches the claim to an available PersistentVolume, and the claim is then bound to the volume.

  • NFS (Network File System): This type of volume is used to mount an NFS share into a container. NFS provides a simple way to share files and directories across a network.

Using Persistent Storage in Kubernetes:

To use persistent storage in a Kubernetes cluster, you need to create a PersistentVolume, a PersistentVolumeClaim, and a Pod that uses the claim. Here are the steps to follow:


Create a PersistentVolume: 


To create a PersistentVolume, you need to create a YAML file that describes the storage resource. The YAML file should include the following fields:

  1. apiVersion: The version of the Kubernetes API to use.
  2. kind: The type of resource to create (PersistentVolume).
  3. metadata: Information about the PersistentVolume, including its name.
  4. spec: The specification for the PersistentVolume, including its capacity, access modes, and the path to the storage resource.


Create a PersistentVolumeClaim: 


To create a PersistentVolumeClaim, you need to create a YAML file that describes the claim. The YAML file should include the following fields:

  1. apiVersion: The version of the Kubernetes API to use.
  2. kind: The type of resource to create (PersistentVolumeClaim).
  3. metadata: Information about the PersistentVolumeClaim, including its name.
  4. spec: The specification for the PersistentVolumeClaim, including its capacity and access modes.


Create a Pod that uses the claim: 


To create a Pod that uses the claim, you need to create a YAML file that describes the Pod. The YAML file should include the following fields:


  • apiVersion: The version of the Kubernetes API to use.
  • kind: The type of resource to create (Pod).
  • metadata: Information about the Pod, including its name.
  • spec: The specification for the Pod, including the containers it should run, the PersistentVolumeClaim it should use, and any other necessary resources.
Here is an example YAML file for a Pod that uses a PersistentVolumeClaim:

apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mycontainer image: myimage volumeMounts: - name: mypvc mountPath: "/data" volumes: - name: mypvc persistentVolumeClaim: claimName: mypvc

In this example, the Pod includes a single container named "mycontainer", which uses an image named "myimage". The container has a volume mount at the path "/data", and the volume it is using is named "mypvc". The volume is backed by a PersistentVolumeClaim named "mypvc".


To create the Pod, you can use the following command:
kubectl apply -f pod.yaml

Conclusion:

Volumes and persistent storage are essential components of a Kubernetes cluster. By using volumes, you can share data between containers and across pods, and you can store data persistently. The steps to use persistent storage in a Kubernetes cluster are to create a PersistentVolume, a PersistentVolumeClaim, and a Pod that uses the claim. With this information, you should be able to set up and use persistent storage in your own Kubernetes cluster.

Hey I'm Venkat
Developer, Blogger, Thinker and Data scientist. nintyzeros [at] gmail.com I love the Data and Problem - An Indian Lives in US .If you have any question do reach me out via below social media