Built-in storage providers
CNAP includes two storage providers that cover development through production:Local Path Provisioner
Direct local disk storage with the lowest latency. Ideal for development, single-node setups, and databases that handle their own replication.
Piraeus (LINSTOR)
Replicated block storage across multiple nodes with synchronous or asynchronous replication. Automatic failover on node failure.
Choosing a provider
The key question is: who handles data replication — the storage layer or your application?| Local Path Provisioner | Piraeus (LINSTOR) | |
|---|---|---|
| Replication | None — your application must handle it | Storage-level, across nodes |
| Failover | Application-managed | Automatic — pods reschedule to a node with a replica |
| Volume size limits | Not enforced (volumes are directories) | Enforced at the block device level |
| Volume expansion | Not supported | Supported |
| Snapshots | No | Yes |
| Write latency | Lowest — direct to local disk | Depends on replication mode (sync or async) |
Deploy a storage provider
Open the Storage tab
In your cluster dashboard, select your cluster and navigate to the Storage tab.
Click Deploy Storage
If no storage provider is installed, you’ll see an empty state with a Deploy Storage button. Click it to open the provider selection sheet.
Choose a provider
Select Local Path Provisioner for development or Piraeus (LINSTOR) for production. Each card shows the provider’s features and trade-offs.
Imported clusters
If you’re using an imported cluster, you may already have storage configured by your cloud provider or infrastructure team:- Managed Kubernetes (EKS, GKE, AKS) — These typically come with a default StorageClass backed by cloud block storage (EBS, Persistent Disk, Azure Disk). Check your cluster’s Storage tab to confirm.
- Self-managed clusters — You can deploy CNAP’s built-in providers, or use a from your infrastructure provider. For example, if your VMs run on Hetzner, consider the Hetzner CSI driver to provision cloud volumes directly.
CNAP’s built-in providers work on any cluster — managed or imported. If your cloud provider already supplies storage, you don’t need to deploy an additional provider unless you want different storage characteristics (like replication across nodes).
How applications use storage
When an application requests persistent storage (through a ), Kubernetes automatically provisions a volume using your cluster’s default StorageClass. This happens transparently — your just need to declare the storage they need, and the cluster handles the rest. Common applications that require persistent storage:- Databases (PostgreSQL, MySQL, Redis, MongoDB)
- File storage and media uploads
- Message queues (RabbitMQ, Kafka)
- Search engines (Elasticsearch, Meilisearch)
Related topics
- Create a cluster → — Set up a managed cluster
- Add workers → — Connect compute capacity to your cluster
- Import a cluster → — Connect your existing Kubernetes cluster