Home  >  Blog  >   Kubernetes

Kubernetes Storage Class

Do you wish to be a Kubernetes expert ? But still not finding the proper resources ? Your search is over. In this blog you will be understanding the whole concept of Kubernetes Storage Class, Features of Storage Class, some common operations performed on storage class. Also after going through this blog you will be able to create your own Kubernetes Storage Class.

Rating: 4.7
  
 
1653

Applications require reliable storage solutions that scale quickly, provide dynamic provisioning, and assure data persistence even when pods restart, or cluster nodes fail. Kubernetes Storage Classes address these issues by allowing developers and administrators to easily describe storage requirements without worrying about underlying infrastructure complexities.

Kubernetes Storage Classes - Table of Contents

Prerequisites for Kubernetes Storage Class

specific software and hardware prerequisites must be met before using Storage Classes. These are below:

Software Prerequisites

  • Kubernetes Cluster: An operating Kubernetes cluster is a significant software requirement to use storage classes. A self-hosted cluster, a managed Kubernetes service (such as GKE, EKS, or AKS), or any other Kubernetes distribution (such as kops or kubeadm) could be used
  • Kubernetes Version: Storage Classes have been available in Kubernetes since version 1.5. The most recent version  of Kubernetes must be used for using the latest features and bug fixes.
  • Container Storage Interface: Many Kubernetes storage providers depend on the Container Storage Interface (CSI) to interact with storage systems which are external. Also make sure that the storage system's CSI drivers are correctly installed in your Kubernetes cluster.
  • Kubernetes API Server: The Kubernetes API server should be there and configured in the proper way to communicate with other cluster components, along with the storage provisioner itself.
  • Storage Provisioner: As Kubernetes does not supply any kind of storage, a storage provisioner must be installed and configured in your cluster such that it will enable dynamic storage provisioning. 

Hardware Prerequisites

  • Continuous Storage Nodes: The Kubernetes cluster should consist of local or network-attached storage (NAS)  nodes with continuous storage access. 
  • Connectivity along nodes: All the nodes in k8 cluster must be connected properly configured and should have proper access to storage resources. 
  • Storage Solution: The storage infrastructure, such as Network-Attached Storage or  Azure Disc, AWS EBS, GCP Persistent Disc, Storage Area Networks, or other storage system, is required based on your requirements..
  • Storage Class Configuration: As per the requirement, storage classes with the correct parameters should be there to align with your storage class.
  • Providing Permissions: Kubernetes cluster must have all the permissions to access and manage storage resources on your cloud platform.
If you would like to become a Kubernetes Certified professional, then visit Mindmajix - A Global online training platform: “Kubernetes Certification Training". This course will help you to achieve excellence in this domain.

What is Kubernetes Storage Class?

Kubernetes Storage Class of k8 is basically a resource which provides properties and features of continuous storage system which can be used to provide dynamic storage to application

We can say it’s middleman where, on one side there is a program who requires continuous storage and other side there’s storage infrastructure.

It enables developers and administrators to request and access storage without worrying about the actual physical storage. When a developer builds a Persistent Volume Claim (PVC) to request storage for their application, the Storage Class should be specified in the claim. The Storage Class specifies storage requirements such as access mode, storage, etc.

Features of Kubernetes Storage Class

Kubernetes Storage Class has various features. Some of them are discussed below:

  • Dynamic Provisioning: Dynamic provisioning is a crucial feature of Storage Classes. When a user requests a Persistent Volume Claim with a certain Storage Class, Kubernetes automatically constructs Persistent Volume (PV) that aligns with the user defined specifications. This automation reduces the need for manual involvement in provisioning storage resources.
  • Multiple Provisioners: Kubernetes Storage Classes enable numerous provisioners, allowing integration with various storage systems. Cloud providers frequently provide provisioners with the ability to integrate with their storage services. Third-party vendors and the Kubernetes community also contribute to provisioners for on-premises storage systems and distributed file systems.
  • Reclaim Policies: Administrators can define reclaim policies for Storage Classes, determining what happens to the data in a PV when the associated PVC is deleted or released. The three reclaim policies available are "Retain" (data is retained even after PVC deletion), "Recycle" (data is deleted, and the PV can be reused), and "Delete" (data and PV are deleted).
  • Customizable Parameters: Storage Classes allow administrators to define customizable parameters, such as storage capacity, access mode, and performance requirements. This flexibility ensures that applications get storage resources tailored to their specific needs.
  • Abstraction: Storage Classes provide an abstraction layer for the underlying storage infrastructure. It allows developers and administrators to request storage without even thinking about the minute details of the storage implementation. Developers can deploy the same application across different clusters with different and multiple storage configurations.

MindMajix Youtube Channel

Common Operations of Storage Classes

Kubernetes Storage Classes allow users to define and manage persistent storage for their clustered applications. Here are some popular Kubernetes Storage Class operations:

  • Creating a Storage Class: An administrator or a user with suitable access can construct a YAML or JSON manifest that specifies the Storage Class's properties to create a Storage Class. The provisioner (storage plugin), reclaim policy, and other storage-specific options are also included. To apply manifest, the kubectl command can be used.
  • Storage Class Listing: To see the list of available Storage Classes in the cluster, users can run the command kubectl get storage class. It will display all the defined Storage Classes along with their reclaim policies, provisioners, and other relevant information.
  • Describing a Storage Class: To learn more about a given storage class, run the command 'kubectl describe storage class storage-class-name>'. This will thoroughly summarize the Storage Class's features, such as mount choices, allowable access modes, and provisioner information.
  • Updating the Storage Class: If the requirements for a particular application change, an administrator can update the properties of a Storage Class by modifying its YAML manifest and applying the changes with kubectl apply. Existing PVCs associated with the updated Storage Class will use the new settings upon binding to a PV.
  • Deleting a Storage Class: Users can delete a Storage Class using the command 'kubectl delete storage class storage-class-name>'. However, it is critical to ensure that no PVCs are referencing the Storage Class, as deletion will fail if PVCs are still mentioning it.
Related Article: Kubernetes Secrets

How to create a Kubernetes Storage Class?

Defining a YAML manifest that provides the attributes and settings for the desired storage is required when creating a Kubernetes Storage Class. Follow the following steps to create a Storage Class:

Step 1: Make a new YAML file to define the Storage Class with any text editor, such as vim or nano. For example, create a file called 'storage-class.yaml'.

Step 2: Open the 'storage-class. yaml' file and define the Storage Class. Here's an example YAML manifest for a simple Storage Class using the provisioner 'example.com/nfs':

Step 3: Add additional parameters and settings to the Storage Class if needed. Some standard settings include:

  • Reclaim Policy: When the linked Persistent Volume Claim (PVC) is destroyed, the Reclaim Policy determines what happens to the Persistent Volume (PV). It has three options: "Recycle," "Retain," and "Delete." To change the reclaim policy to "Retain," for example, enter the following:
  • Storage Capacity: Set the storage capacity for dynamically provisioned volumes. For example:
  • Volume Binding Mode: Specifies when the binding of PVC and PV should take place. It can be configured to "Immediate" (binding happens instantly) or "WaitForFirstConsumer" (binding occurs when a Pod uses the PVC). As an example:
  • Access Mode: Define the access modes that the PV should support (e.g., ReadWriteOnce, ReadOnlyMany, ReadWriteMany). For example:

Step 4: Save the 'storage-class. yaml' file after defining the Storage Class as per your requirements.

Step 5: Apply the Storage Class definition to the Kubernetes cluster using the 'kubectl apply' command:

Step 6: Verify that the Storage Class was created successfully:

This command will return a list of all available Storage Classes in the cluster, including the freshly formed my-storage-class.

You have successfully created a Kubernetes Storage Class, which can now be used by Persistent Volume Claims to dynamically provision persistent volumes with the specified settings and properties.

Related Article: What is Kubernetes?

Frequently Asked Questions (FAQs)

1. What is a Kubernetes storage class?

Ans: A Kubernetes Storage Class  is a storage mechanism, which provides Persistent Volumes (PV) dynamically in clusters. Storage classes are defined by the administrator itself and later pods can request specific types of storage class as per the requirements. 

2. How many storage classes are there in Kubernetes?

Ans: Only once storage class cluster can have, as it’s default storage class.  

3. What is PVC and storage class in Kubernetes?

Ans: PVC is basically a request to acquire persistent storage with a certain type and configuration. PVC consumes Persistent volume resources.

4. What is the difference between PV and StorageClass?

Ans: Persistent Volume is a low level representation of a storage volume. And it claims a binding between a Pod and Persistent Volume. Whereas, Storage Class allows for dynamic provisioning of Persistent Volumes.

5. What is the purpose of storage class?

Ans: Storage class helps in determination of an object and its properties such as type of linkage  internal, external, location of stored object such as memory or register, etc. also storage class refines variable declaration, or function declaration and its parameters.

6. What is the maximum pod in Kubernetes?

Ans: Maximum pods in kubernetes are maximum 110 pods per node, where there can be at max 5,000 nodes and 150,000 pods.

Related Article: Kubernetes Interview Questions

Conclusion

Storage Classes will continue to be an essential part of Kubernetes. It enables developers and administrators to quickly and adaptably manage storage issues. Understanding and effectively leveraging Storage Classes is crucial for anyone desiring to fully utilize Kubernetes for containerized application deployment and maintenance. Hope this article has provided you an in depth insight of Kubernetes Storage Classes and its features.

Join our newsletter
inbox

Stay updated with our newsletter, packed with Tutorials, Interview Questions, How-to's, Tips & Tricks, Latest Trends & Updates, and more ➤ Straight to your inbox!

Course Schedule
NameDates
Kubernetes TrainingApr 30 to May 15View Details
Kubernetes TrainingMay 04 to May 19View Details
Kubernetes TrainingMay 07 to May 22View Details
Kubernetes TrainingMay 11 to May 26View Details
Last updated: 14 Dec 2023
About Author

Kalla Saikumar is a technology expert and is currently working as a Marketing Analyst at MindMajix. Write articles on multiple platforms such as Tableau, PowerBi, Business Analysis, SQL Server, MySQL, Oracle, and other courses. And you can join him on LinkedIn and Twitter.

read more