The Container Storage Interface (CSI) is a standard for provision and use block and file storage systems in containerized workloads on Container Orchestration Systems (COs) like OpenShift.
Using this interface new storage systems can be exposed to COs without needing to change the COs code.
Ember-CSI is an Open Source implementation of the CSI specification supporting storage solutions from multiple vendors by leveraging a library called cinderlib that provides an abstraction layer over the storage drivers.
Ember-CSI supports CSI versions 0.2, 0.3, 1.0, and 1.1 providing the following features:
- Volume provisioning: file and block types
- Volume cloning
- Volume deletion
- Snapshot creation
- Create volume from a snapshot
- Snapshots deletion
- Listing volumes with pagination
- Listing snapshots with pagination
- Attaching/Detaching volumes
- Multi pod attaching (block mode only)
- Storage capacity reporting
- Node probing
There are 2 types of volumes in OpenShift and Kubernetes, Block and File, and while both are supported by Ember-CSI, behind the scenes all the storage drivers in Ember-CSI are for block storage systems.
To provide File volumes from block storage Ember-CSI connects the volumes to the host, formats and present them to the Orchestrator for the containerized workloads.
Since File type volumes are locally attached block volumes they cannot be shared between containers, so the Shared Access (RWX) Access Mode is not supported.
This limitation does not apply to block volumes, that can be mounted in multiple hosts simultaneously and it’s the application the one responsible to orchestrate the proper access to the disk.
Ember-CSI includes a good number of storage drivers, but due to limitation on hardware availability only a small number of them have been validated at one point or another. In alphabetical order they are:
The remaining drivers included in Ember-CSI have not been validated yet: