What Kubernetes volume types are available and when should they should be used. Read on to learn more.
Kubernetes provides almost all the features one will need to manage a containerized environment effectively. However, users will face unnecessary headaches regarding K8s management if they do not utilize these features effectively. These issues can range from misconfigurations to complete ignorance of features and functions offered by Kubernetes.
Since storage is a critical component of any application, users must know how to manage storage within Kubernetes. The primary method to satisfy the storage needs of containers is through volumes. This post will look at different volume types available in Kubernetes and when they should be used.
Volumes in Kubernetes facilitate data storage that is accessible to Pods. As on-disk files in containers are ephemeral, kubelet will restart the container when a container encounters an error, but all the data within it will be lost. It will also cause issues when sharing data between multiple containers within a Pod. Volumes help solve both the above issues.
To put it simply, a volume is a directory that contains data accessible to containers in a Pod. Kubernetes supports multiple types of volumes for different use cases and provides plugins with different storage backends like AWS EBS, Azure File, and CephFS to provision volumes. Users have the flexibility to decide on how and where these volumes are created and the location in containers they are mounted.
As the name suggests, persistent volumes are volumes that will not be removed even if the containers associated with the volume are deleted. They are the ideal choice for any persistent storage need.
There are two resources called Kubernetes PV and Kubernetes PVC to facilitate persistent volumes in Pods. PV or Persistent Volume is the storage resource in the cluster that is provisioned by the administrator (static provisioning) or dynamically by the cluster itself using a Storage Class. Meanwhile, a Persistent Volume Claim or PVC is the request for storage from the PV. The volume claim can request specific size and access modes and mount it to the Pod so that containers within the Pod can consume the storage resources in the PV. The PVC and PV will remain in the cluster even if the Pod gets deleted.
In some cases, applications will require additional or shareable storage without the need to store data in a persistent capacity. A good example of it will be caching services, which acts as a way to improve the performance of an application by storing frequently accessed data in memory or some other mechanism. With an ephemeral volume, users can allow these caching services to infrequently access data to the volume, freeing up memory to concentrate on hot data.
Unlike persistent volumes, these types of volumes are not bound to a specific location. With persistent volumes, users must create their Pods where the persistent volumes are available. However, with ephemeral volumes, users can create Pods anywhere in the cluster without any limitations. As these volumes are bound to the lifecycle of Pods, users can freely delete and recreate Pods without impacting the functionality of the containerized application. In addition to caching, another use case for ephemeral volumes is to inject some read-only data such as secrets or configurations into pods. Even if a Pod has enough storage resources, users can gain additional control and flexibility over the storage needs of their applications by implementing an ephemeral volume for non-persistent data needs.
There are multiple types of ephemeral volumes available in K8s;
- Emptydir – This is one of the simplest volume types. It creates an Empty directory bound to the container, with storage coming locally from kubelet. Even if a container crashes, this volume will be available as it is bound to the Pod and not the container itself.
- CSI ephemeral volumes – Volumes provisioned by the third-party container storage interface driver.
- Generic ephemeral volumes – Any volume provisioned by a storage driver that supports dynamic provisioning of persistent volumes.
In addition to this configMap, and downwardAPI, secrets are also considered ephemeral volume types as they are used to inject predefined data into a Pod.
A projected volume can be used to map several existing volume resources into the same directory. If the following types of volumes are within the same namespace as the Pod, a projected volume can be used to define them as a single volume in a Pod configuration.
These special types of volumes are not aimed towards storing container data. These volumes are used to provide a predefined data set to the underlying container. It allows containers to access the data stored in these volumes directly from the container mount path.
Kubernetes volumes provide users the required flexibility to provision and manage the storage needs of their applications directly through Kubernetes. With different kinds of volumes aimed at catering to different needs, users can match their exact storage needs to the correct volume type and use the optimal storage setup.