ceph-csi/examples/nfs
Madhu Rajanna 461effe520 doc: set ceph version for NFS service
specify from what ceph versions we
need to run nfs service commands and
when to skip it.

Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
2023-08-25 17:50:40 +00:00
..
pod-clone.yaml deploy: add nfs pvc-clone & pod-clone example yaml 2022-05-24 18:13:02 +00:00
pod-restore.yaml deploy: add support for nfs snapshot 2022-05-24 18:13:02 +00:00
pod-rwop.yaml e2e: add RWOP examples for NFS-provisioning 2022-05-10 00:43:43 +00:00
pod.yaml doc: example for PVC and Pod using a NFS-volume 2022-03-28 11:58:42 +00:00
pvc-clone.yaml deploy: add nfs pvc-clone & pod-clone example yaml 2022-05-24 18:13:02 +00:00
pvc-restore.yaml deploy: add support for nfs snapshot 2022-05-24 18:13:02 +00:00
pvc-rwop.yaml e2e: add RWOP examples for NFS-provisioning 2022-05-10 00:43:43 +00:00
pvc.yaml doc: example for PVC and Pod using a NFS-volume 2022-03-28 11:58:42 +00:00
README.md doc: set ceph version for NFS service 2023-08-25 17:50:40 +00:00
rook-nfs.yaml doc: use .nfs as default pool for NFS-export configs 2022-05-10 00:43:43 +00:00
snapshot.yaml deploy: add support for nfs snapshot 2022-05-24 18:13:02 +00:00
snapshotclass.yaml deploy: remove snapshot v1beta1 references from manifests 2022-11-17 10:05:01 +00:00
storageclass.yaml nfs: add support for clients in the StorageClass 2023-07-06 06:24:11 +00:00

Dynamic provisioning with NFS

The easiest way to try out the examples for dynamic provisioning with NFS, is to use Rook Ceph with CephNFS. Rook can be used to deploy a Ceph cluster. Ceph is able to maintain a NFS-Ganesha service with a few commands, making configuring the Ceph cluster a minimal effort.

Enabling the Ceph NFS-service

Ceph does not enable the NFS-service by default. In order for Rook Ceph to be able to configure NFS-exports, the NFS-service needs to be configured first.

  • Required for Ceph v16.2.7 and below
  • Optional for Ceph v16.2.8 and above

In the Rook Toolbox, run the following commands:

ceph osd pool create nfs-ganesha
ceph mgr module enable rook
ceph mgr module enable nfs
ceph orch set backend rook

Create a NFS-cluster

In the directory where this README is located, there is an example rook-nfs.yaml file. This file can be used to create a Ceph managed NFS-cluster with the name "my-nfs".

$ kubectl create -f rook-nfs.yaml
cephnfs.ceph.rook.io/my-nfs created

The CephNFS resource will create a NFS-Ganesha Pod and Service with label app=rook-ceph-nfs:

$ kubectl get pods -l app=rook-ceph-nfs
NAME                                      READY   STATUS    RESTARTS   AGE
rook-ceph-nfs-my-nfs-a-5d47f66977-sc2rk   2/2     Running   0          61s
$ kubectl get service -l app=rook-ceph-nfs
NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
rook-ceph-nfs-my-nfs-a   ClusterIP   172.30.218.195   <none>        2049/TCP   2m58s

Create a StorageClass

The parameters of the StorageClass reflect mostly what CephFS requires to connect to the Ceph cluster. All required options are commented clearly in the storageclass.yaml file.

In addition to the CephFS parameters, there are:

  • nfsCluster: name of the Ceph managed NFS-cluster (here my-nfs)
  • server: hostname/IP/service of the NFS-server (here 172.30.218.195)

Edit storageclass.yaml, and create the resource:

$ kubectl create -f storageclass.yaml
storageclass.storage.k8s.io/csi-nfs-sc created

TODO: next steps

  • deploy the NFS-provisioner
  • deploy the kubernetes-csi/csi-driver-nfs
  • create the CSIDriver object