


CSI is a vendor-neutral specification. Implementing the CSI API lets a storage vendor support multiple orchestrators with a single driver implementation.
CSI RPCs and the Volume Lifecycle
The CSI specification defines two logical groups of RPCs: controller-side (cluster-level) and node-side (per-node) calls. The orchestrator (for example, Kubernetes) invokes these RPCs to provision, attach, mount, and delete volumes. Key controller RPCs:CreateVolume— provision a new backend volumeDeleteVolume— remove a backend volumeControllerPublishVolume— controller-side attach (if the backend requires it)ControllerUnpublishVolume— controller-side detach
NodeStageVolume— prepare a volume on the node (optional staging mount)NodePublishVolume— make the staged volume available to the container (bind-mount, mount)NodeUnpublishVolume— unmount from container pathNodeUnstageVolume— undo staging on the node (if staged)
Typical call sequence when a Pod requests a PersistentVolume (simplified):
- If dynamic provisioning is needed: orchestrator calls
CreateVolume. - If attach is required by the backend:
ControllerPublishVolume. - On the target node:
NodeStageVolume(optional). - On the target node:
NodePublishVolume. - When Pod terminates or PVC deleted:
NodeUnpublishVolume,NodeUnstageVolume,ControllerUnpublishVolume,DeleteVolume(depending on reclaim policy).

Interoperability and Specifications
The CSI spec defines the exact RPC signatures, expected responses, error codes, and versioning rules to ensure reliable interoperability between orchestrators and drivers. For full details—including gRPC method definitions and capabilities—see the official CSI repository:- CSI specification on GitHub: https://github.com/container-storage-interface/spec
- Kubernetes CRI: https://kubernetes.io/docs/concepts/architecture/cri/
- Container Network Interface (CNI): https://github.com/containernetworking/cni
- CSI project and implementations: https://kubernetes-csi.github.io/ (community resources)