In the last few years, we have seen Kubernetes emerging as a de facto standard for container orchestration and a go-to method for hosting microservices-based processes. This has led to an ongoing concern of data storage issues such as where the data is being stored, how much capacity is there for data, and how we retrieve it.

The answer to all these questions lies in one concept, persistent storage.

The importance of persistent storage for containers in computer systems is huge. This is simply because if all data were to be volatile, there is no possibility of keeping data permanently for later use, as it would be gone once the system is turned off.

Persistence storage is necessary to be able to keep all our files and data for later use. For instance, a hard disk drive is a perfect example of persistent storage, as it allows us to permanently store a variety of data.
In this blog, we learn more about persistence storage, its benefits, persistence storage for containers, the process of linking Kubernetes to persistent storage via NVMe®, and more.

Overview

What is Persistent Storage?
Benefits of Persistent Storage
Persistent Storage and Containerization
Persistent Storage in Kubernetes
Importance of Persistent Block Storage for Modern Application Development
Persistent Storage Use Case
Linking Kubernetes to Persistent Storage via NVMe®

What is Persistent Storage?

Also known as non-volatile storage, persistence storage refers to any of the data storage devices that can retain data even after there is no power supply to that device.

Among some of the common types of persistent storage are magnetic media, such as hard disk drives, tapes and several forms of optical media such as DVD. Persistent storage structures typically can be in the form of storage for files, blocks or objects.

Benefits of Persistent Storage

Among the key advantages of persistent storage include:

Simplicity: Persistent storage helps developers provision their storage, without necessarily needing any expertise as storage experts. It simply allows them to provision volumes for both on-premise/ public cloud services.

Security: When it comes to the security and encryption aspects of storage solutions, persistent storage scores high. It fulfils the security requirements of most enterprises in terms of volume-level encryption, self-encrypting disks, and key management, among others to protect them against any kind of data loss and security breaches.

Flexibility: Persistent storage offers you great flexibility over traditional storage and lets you use the same software across different virtual machines, clouds and containers. Further, developers also enjoy the flexibility to choose the storage interfaces for their workload, including file, block or object storage. It also gives developers the ability to deliver data services with one system, irrespective of protocol, thus boosting productivity, offering more freedom, and leading to more effective application development.

Portability: Today’s cloud-native world requires organizations to adopt a hybrid cloud approach to be able to combine the benefits of public and on-premises clouds. Persistent storage makes it easy to migrate your stateless applications across multiple clouds and migrate your data from one cloud to other clouds.

Efficiency: Persistent storage makes application development much more efficient. It eliminates the need to rewrite applications when you want to port them from one cloud provider to another and you can simply move applications without expensive or time-consuming rewrites whenever you want.

Cost-effectiveness: With persistent storage, you only have to pay for the storage and compute you use. It scales on-demand with no disruptions, growing and shrinking automatically as you add and remove files.

Persistent Storage and Containerization

Containers are a key ingredient for building an agile, DevOps-oriented infrastructure and have emerged as an easy way to port software to wherever it needs to be. In containerization specifically, persistent storage refers to storage volumes that are typically associated with applications, such as databases, which you can access even if the application is shut down/ processed.

The recent years have seen containerization emerging as a common way to package software and their operating systems into transportable and isolated modules that are generated and destroyed as much as possible. But originally, containers did not allow permanent storage, which means all the data generated by a containerized app would disappear until the app completed its function, and the container was broken.

However, there have been methods developed recently by software and storage vendors to retain the data generated by container applications and safely keep them in familiar storage volumes. Persistence storage helps in resolving the issue of retaining the more ephemeral storage volumes (that generally live and die with the stateless apps).

Persistent Storage in Kubernetes

Kubernetes is primarily an open-source container orchestration framework. It provides management and services capabilities required to efficiently deploy, operate, and scale containers in a cloud/cluster environment.

Kubernetes storage is basically useful for storage administrators since it allows them to maintain multiple forms of persistent and non-persistent data in a Kubernetes cluster. This enables them to create dynamic storage resources that can serve different types of applications.

The Kubernetes storage, if managed properly, can be used to automatically provision the most appropriate storage to a range of applications, with minimal administrative costs.

To enable persistent storage, Kubernetes primarily uses two main concepts as discussed below:

1. Persistent Volume (PV)

PV is mainly a storage element in a cluster, which is defined manually by an administrator or dynamically defined by a storage class. It has its own lifecycle which is separate from the lifecycle of Kubernetes pods.

2. Persistent Volume Claim (PVC)

PVC is primarily a storage request by a user, where any application running on a container can request storage. For instance, a container can specify the way it needs to access the data or the size of storage it requires.

Apart from access mode and storage size, administrators can offer PVs with various custom properties, such as the level of performance, type of disk, or storage tier. Users can then request storage based on all these custom parameters without knowing the implementation details of the underlying storage.

Importance of Persistent Block Storage for Modern Application Development

Development teams across the board are modernizing their applications by adopting containers, serverless, and microservices-based architectures. Most of these applications are stateful in nature making persistent storage a necessity.

Here are some of the reasons why cloud-native persistent storage is important for modern application development by offering many powerful capabilities and providing significant flexibility/portability for DevOps teams:

1. Developers working with a Kubernetes orchestrator find it simpler to create their resources for a project. A persistent storage layer can act as a robust storage platform to give confidence to the developers that the storage layer also adheres to their data security and resilience requirements of modern application deployments.

2. With a viable software-defined persistent storage platform, development teams can easily define and adjust their data requirements for a project on the go instead of completing this process manually.. Further, they don’t need to rely on storage administrators for provisioning the storage.

3. Open source software-defined persistent storage allows for portable storage across various kinds of infrastructures, including virtual machines (VMs), bare metal, and public and private cloud environments.
Since data federation can also take place across hybrid and multi-cloud environments, developers can conveniently place sensitive data where it needs to be along with integrating applications and microservices from various multi-cloud deployments.

Persistent Storage Use Case

One of the top uses cases of persistent storage:

Stateful Applications

A stateful application refers to a program that saves important data from the activities of one session for use in the subsequent session. The saved data here is called the application’s state.

The advent of persistent storage on Kubernetes made it possible to support stateful applications as well, unlike earlier.

For all these modern applications, persistent storage serves as a data foundation and allows data to persist in the application state.

Linking Kubernetes to Persistent Storage via NVMe®

Optimal Kubernetes persistent storage requires a robust solution that is as flexible and portable as containers yet can perform like local NVMe® SSDs. Further, to preserve container portability, it must speak common network protocols and should not require special NIC’s apart from being standards-based, managed via an API and run on standard servers.

LightOS by Lightbits Labs meets all these philosophical and technical requirements to be the best high-performance persistent storage solution for Kubernetes, leading to improved scaling and availability via clustering. It supercharges your Kubernetes based applications while increasing reliability and flexibility by providing,

– Similar performance as flash Local Persistent Volumes with greater utilization of your storage investment
– Better and enhanced service levels and a better user experience with consistent latency
– Faster rebuild time with higher resiliency levels
– No changes to your TCP/IP network with no proprietary drivers on Kubernetes servers
– Simple and secure storage access to Kubernetes application servers

All in all, the primary goal of LightOS is to completely transform commodity servers into a powerful storage pool linked via NVMe®/TCP to the Kubernetes cluster orchestrator that allows you to separate storage from computing without much hassle and at a relatively lower cost.

Additional Resources

Kubernetes® and LightOS™ Performance, Persistence, Simplicity
Cloud-Native Storage for Kubernetes
Disaggregated Storage
Ceph Storage
Kubernetes Storage
Edge Cloud Storage
NVMe® over TCP

About the Writer: