Kubernetes storage is useful to storage administrators because it enables different forms of persistent, stateful data retention within Kubernetes cluster deployments, which are increasingly popular.
Kubernetes itself is a rapidly developing technology that has been embraced by cloud vendors and enterprises alike to enable a more agile and scalable form of application delivery. With a properly implemented Kubernetes storage configuration, databases and application data can be created and accessed by many applications – allowing greater speed and efficiency.
To be clear, while Kubernetes storage is sometimes used in the cloud, it is separate from cloud storage.
Kubernetes allows developers to deploy and scale containers across a cluster or in a cloud computing environment.
What is Kubernetes?
Kubernetes is a container orchestration platform. That is, Kubernetes provides the services and management features that are necessary to deploy, operate and scale containers across a cluster or in a cloud computing environment.
The Kubernetes platform was created by Google in 2014 as an open source effort to help manage its container deployment. The effort moved to the Linux Foundation's Cloud Native Computing Foundation (CNCF) in 2016 and is now a multi-stakeholder project, with support from all the major public cloud providers including Amazon Web Services, Microsoft Azure and Google Cloud.
Application containers are a way of packaging and delivering applications in a portable way. The most commonly used form of application container with Kubernetes are Docker containers. With Kubernetes, multiple sets of containers can be deployed, scaled and replicated for high-availability and application stability.
Kubernetes has become an important technology in recent years because of its portability. The same basic Kubernetes container that runs in one public cloud can be run in another with little or no change. The portability also enables multicloud deployments, where Kubernetes is used to orchestrate container deployments in more than one cloud platform.
Cloud-native is another term that is often directly associated with Kubernetes, thanks in part to the fact that it is the foundational project of the Cloud Native Computing Foundation (CNCF). This use of cloud native refers to applications – storage or otherwise – built specifically for the cloud, instead of built for the data center and later ported to the cloud.
Kubernetes Architecture: How Kubernetes Works
The Kubernetes architecture is designed with replication and availability as a primary design element. There are several key elements of any Kubernetes architecture
- Kube Master: This is the primary control point for distributed orchestration across different nodes.
- Node: Nodes in Kubernetes are the system resources that perform tasks as assigned by Kube master.
- Pod: One or more containers can run inside of a pod. Each pod gets its own IP address, network and storage resources
How Persistent Kubernetes Storage Works
When Kubernetes was first developed, it was primarily used for stateless applications that did not have persistent storage requirements. Modern Kubernetes, however, is a different story and is fully capable of managing stateful applications and persistent storage.
There are several key concepts that are important to understand for Kubernetes storage. There is the Container Storage Interface (CSI) which is the connection point for storage systems. And there is the storage enablement capabilities within pods to request and connect to storage.
Container Storage Interface
The CSI is a relatively recent addition to Kubernetes, but it is one that greatly simplifies storage management and connectivity.
Prior to CSI, storage device drivers had to be directly integrated with the core Kubernetes code, which was a more time consuming process to enable new storage devices.The CSI provide an extensible plugin architecture that provides multiple benefits.
Benefits of the Container Storage Interface:
- Extensible plugin framework: Storage drivers are plugins that are not hard coded into Kubernetes
- Updates: The CSI enables storage hardware and software vendors to more easily update drivers.
- Security: With CSI there are improved security guarantees with a cleaner abstraction between Kubernetes and storage.
Kubernetes Persistent Storage Objects
While the CSI provides a way to connect storage devices to a Kubernetes cluster, there is still a need for Kubernetes applications to get access to the storage. To that end, there are several key concepts with Kubernetes for defining persistent storage objects.
- Pod: The pod can be used to mount a persistent storage volumes into a container.
- PersistentVolumeClaim (PVC): When an application makes a requests for storage it is made as a PVC, which makes a storage volume is usable in a pods. PVCs can be provisioned manually or dynamically via policy.
- PersistentVolume (PV): The PV is the administrative object for defining persistent storage in Kubernetes. PV. provides a pointer to actual physical storage, that is connected via the Container Storage Interface (CSI).
- StorageClass: The StorageClass object is a collection of PVs with the same characteristics, enabling an application to pull the right type of storage that is needed for a given deployment.
- StatefulSet: Since Kubernetes is built for resiliency, the StatefulSet object runs a configurable number of replicas of a pod, with each pod getting its own PVC from a PVC template. Each pod has a stable identity and is scalable up and down.