ceph-csi/docs/design/proposals/nfs.md
Niels de Vos 1b16db4ff6 doc: proposal for providing NFS-exports
The design for NFS-provising of volumes explains how the existing NFS
CSI Node-Plugin can be used, and what the steps are to create the
NFS-export with Ceph Mgr.

Updates: #2913
Signed-off-by: Niels de Vos <ndevos@redhat.com>
2022-03-16 11:36:18 +00:00

3.2 KiB

Dynamic provisioning of NFS volumes

Ceph has support for NFS-Ganesha to export directories on CephFS. This can be used to export CephFS based volumes over NFS.

Node-Plugin for mounting NFS-exports

The Kubernetes CSI community provides and maintains a NFS CSI driver. This driver can be used as a Node-Plugin so that NFS CSI volumes can be mounted. When a CSI volume has the server and share parameters, the Node-Plugin will be able to mount the NFS-export.

Exporting CephFS based volumes over NFS

Ceph-CSI already creates CephFS volumes, that can be mounted over the native CephFS protocol. A new provisioner in Ceph-CSI can create CephFS volumes, and include the required NFS CSI parameters so that the NFS CSI driver can mount the CephFS volume over NFS.

The provisioner that handles the CSI requests for NFS volume can call the Ceph Mgr commands to export/unexport the CephFS volumes. The CephFS volumes would be internally managed by the NFS provisioner, and only be exposed as NFS CSI volumes towards the consumers.

CreateVolume CSI operation

When the Ceph-CSI NFS provisioner is requested to create a NFS CSI volume, the following steps need to be taken:

  1. create a CephFS volume, use the CephFS CreateVolume call or other internal API
  2. call the Ceph Mgr API to export the CephFS volume with NFS-Ganesha
  3. return the NFS CSI volume, with server and share parameters (other parameters that are useful for CephFS volume management may be kept)

The 2nd step requires a NFS-cluster name for the Ceph Mgr call(s). The name of the NFS-cluster as managed by Ceph should be provided in the parameters of the CreateVolume operation. For Kubernetes that means the parameters is set as an option in the StorageClass.

The server parameter of the volume is an other option that is managed by the Ceph (or Rook) infrastructure. This parameter is also required to be provided in the CreateVolume parameters.

Removing the NFS-export for the volume (or other operations) requires the name of the NFS-cluster, as it is needed for the Ceph Mgr API. Like other parameters of the CephFS volume, it will be needed to store the NFS-cluster name in the OMAP journalling.

DeleteVolume CSI operation

The DeleteVolume operation only receives the volume_id parameter, which is to be used by the CSI Controller (provisioner) to locate the backing volume. The DeleteVolume operation for the CephFS provisioner already knows how to delete volumes by ID.

In order to remove the exported volume from the NFS-cluster, the operation needs to fetch the name of the NFS-cluster from the journal where it was stored during CreateVolume.

Additional CSI operations

CreateVolume and DeleteVolume are the only required operations for the CSI Controller (provisioner). Additional features as they are supported by CephFS can forward the operations to the CephFS provisioner at a later time.