Operator to create, configure and manage CSI driver for OpenStack Manila in OpenShift.
The operator needs its own namespace, service account, security context, and a few roles and bindings. For example, to install these on OpenShift >= 4.4:
oc apply -f deploy/namespace.yaml -f deploy/crds/csi.openshift.io_maniladrivers_crd.yaml -f deploy/service_account.yaml -f deploy/role_binding.yaml -f deploy/role.yaml -f deploy/operator.yaml
You can check logs of the operator by executing:
oc logs -f -n openshift-manila-csi-driver-operator $(oc get pods --no-headers -n openshift-manila-csi-driver-operator -o custom-columns=":metadata.name")
When the operator is started, you need to create a CR to install the driver:
oc apply -f deploy/crds/csi.openshift.io_v1alpha1_maniladriver_cr.yaml
Note: ManilaDriver CR is a singleton, which means you can't create more than one instance of this resource. By convention this should be a cluster-scoped object called cluster
.
Operator automatically creates required StorageClasses for all Manila share types. Each of them is called manila-csi-<share_type>
.
To see the list of provisioned Storage Classes execute:
oc get storageclasses
All driver's resources are created in the openshift-manila-csi-driver
namespace.
You're all set now! However, you likely want to test the deployment, so let's create a PVC and POD for testing.
Note: In the PVC example we use manila-csi-default
Storage Class, which may be different in your case.
oc create namespace manila-test
oc create -n manila-test -f examples/nfs/dynamic-provisioning/pvc.yaml
At this moment Manila CSI driver should provision a volume in the Manila service.
Next step is to create a pod.
oc create -n manila-test -f examples/nfs/dynamic-provisioning/pod.yaml
Once the pvc and pod are up and running, it will look like this:
$ oc get pod new-nfs-share-pod
NAME READY STATUS RESTARTS AGE
new-nfs-share-pod 1/1 Running 0 106s
$ oc get pvc -n manila-test
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
new-nfs-share-pvc Bound pvc-b1e5ebb8-8032-4722-92e3-06bd7ce5afec 1Gi RWX csi-manila-nfs 118s
$ oc get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-b1e5ebb8-8032-4722-92e3-06bd7ce5afec 1Gi RWX Delete Bound manila-test/new-nfs-share-pvc csi-manila-nfs 2m50s
$ oc describe pod new-nfs-share-pod -n manila-test | grep Volumes: -A 4
Volumes:
mypvc:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: new-nfs-share-pvc
ReadOnly: false
Looking inside the container you will notice that the provided volume has been mounted:
$ oc exec -n manila-test -it new-nfs-share-pod -- mount | grep /var/lib/www
10.0.128.27:/volumes/_nogroup/e3c5f7fd-aeee-4485-9a40-6a732d55f689 on /var/lib/www type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.129.2.9,local_lock=none,addr=10.0.128.27)
Eventually you want to remove all the testing resources from your cluster. To do so just delete the namespace:
oc delete namespace manila-test
Manila provisioner will automatically delete the share in Manila service as well.
First, remove the CR. The driver and its cluster-scoped resources will be deleted along with it.
oc delete -f deploy/crds/csi.openshift.io_v1alpha1_maniladriver_cr.yaml
When the driver is deleted, remove the remaining parts of the operator.
oc delete -f deploy/crds/csi.openshift.io_maniladrivers_crd.yaml -f deploy/role.yaml -f deploy/role_binding.yaml -f deploy/service_account.yaml -f deploy/namespace.yaml