left arrowBack
Kienan Vella

Kienan Vella

July 27, 2023 ・ Kubernetes

CEPH as the Ideal Persistence Layer for k8s: A Comprehensive Guide


In today's world of distributed computing and microservices, container orchestration tools like Kubernetes have gained immense popularity. Kubernetes makes it easy to manage, scale, and deploy containerized applications. However, one of the challenges that come with using Kubernetes is managing persistent storage for stateful applications.

Enter Ceph, a highly scalable and reliable distributed storage system. Lets explore how Ceph can be used as a persistence layer for Kubernetes, making your storage infrastructure as dynamic and resilient as your containerized applications.

Overview of Ceph

Ceph is an open-source, distributed storage system designed to provide excellent performance, reliability, and scalability. Its key features include:

  • Object storage with a scalable, distributed object store (RADOS)

  • Block storage with a thin-provisioning, resizable block device (RBD)

  • File storage with a POSIX-compliant, distributed file system (CephFS)

Ceph's architecture is based on the concept of RADOS (Reliable Autonomic Distributed Object Store), which provides a fault-tolerant and self-healing storage platform. This allows Ceph to automatically distribute data across multiple nodes and seamlessly recover from hardware failures.

Integrating Ceph with Kubernetes

To use Ceph as the persistence layer for Kubernetes, you can leverage the Rook project. Rook is a cloud-native storage orchestrator that integrates Ceph with Kubernetes, allowing you to deploy and manage storage directly through the Kubernetes API. This tight integration makes it easy to dynamically provision and manage Ceph storage for your containerized applications.

Here are the steps to integrate Ceph with Kubernetes using Rook:

  • Install Rook: First, you need to install the Rook operator in your Kubernetes cluster. The Rook operator will manage the deployment, configuration, and management of Ceph.

  • Configure Ceph Cluster: Next, you'll need to create a CephCluster custom resource that defines the configuration for your Ceph cluster, including the number of nodes, storage devices, and other settings.

  • Deploy Ceph Storage: Once the CephCluster custom resource is created, Rook will deploy the Ceph storage components, including monitors, OSDs (Object Storage Daemons), and the metadata server for CephFS (if enabled).

  • Configure Storage Classes: After deploying the Ceph components, you'll need to create storage classes that define the storage provisioner (Rook-Ceph), the storage pool, and other parameters for dynamically provisioning storage for your applications.

Using Ceph Storage in Kubernetes Applications

Once Ceph is integrated with Kubernetes, you can use it as a persistent storage layer for your containerized applications. Here's how:

  • Create Persistent Volume Claims (PVCs): To request storage for your application, you need to create a PVC that references the storage class you defined earlier. The PVC specifies the required storage capacity and access mode (ReadWriteOnce, ReadOnlyMany, or ReadWriteMany).

  • Attach PVCs to Pods: To use the storage in your application, you need to attach the PVC to a pod using a volume and volumeMount configuration in the pod spec.

  • Access Storage in Containers: Once the PVC is attached to a pod, your application can access the storage using the mounted path. The storage will be automatically managed by Kubernetes and Ceph, ensuring data durability and high availability.


Ceph is a flexible, scalable, and resilient distributed storage system that can serve as the ideal persistence layer for your Kubernetes applications. By leveraging Rook, you can seamlessly integrate Ceph with Kubernetes, making it easy to manage and scale storage infrastructure alongside your containerized applications. This powerful combination enables you to build stateful applications with confidence

  • Kubernetes
  • Infrastructure