ReadWriteMany

Please note: StorageOS Project edition is required to create RWX Volumes.

StorageOS supports ReadWriteMany (RWX) access mode Persistent Volumes. A RWX PVC can be used simultaneously by many Pods in the same Kubernetes namespace for read and write operations.

StorageOS RWX Volumes are based on a shared filesystem.

To create a ReadWriteMany (RWX) volume with StorageOS, create a Persistent Volume Claim (PVC) with an access mode of ReadWriteMany (see the First PVC documentation for examples of creating standard PVCs with StorageOS).

The following YAML manifest files provide an example:

A 5Gi PVC with the StorageOS storageClassName of fast, with an accessMode of ReadWriteMany:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-rwx
spec:
  storageClassName: fast
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

A Deployment of 3 Pods, each of which consume this PVC:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shared
  labels:
    app: shared
spec:
  replicas: 3
  selector:
    matchLabels:
      app: shared
  template:
    metadata:
      labels:
        app: shared
    spec:
      containers:
        - name: debian
          image: debian:9-slim
          command: ["/bin/sleep"]
          args: [ "3600" ]
          volumeMounts:
            - mountPath: /mnt/
              name: v1
      volumes:
        - name: v1
          persistentVolumeClaim:
            claimName: pvc-rwx

After creating the above resources, the PVC (here named pvc-rwx) should be bound and show an access mode of RWX:

$ kubectl get pvc
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-rwx     Bound    pvc-59f7a152-8342-415c-a6ca-1cbb463410ab   5Gi        RWX            fast           60s

Ensure that the Deployment Pods are running:

$ kubectl get pods
NAME                      READY   STATUS    RESTARTS   AGE
shared-1771418926-7o5ns   1/1     Running   0          1m
shared-1771418926-r18az   1/1     Running   0          1m
shared-1771418926-ds8f7   1/1     Running   0          1m

The NFS-Ganesha service that exposes the StorageOS volume as RWX can now be viewed, showing the cluster IP of the service, and the default NFS port (2049).

$ kubectl get svc
NAME                                        TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
kubernetes                                  ClusterIP   10.96.0.1     <none>        443/TCP    120m
pvc-59f7a152-8342-415c-a6ca-1cbb463410ab    ClusterIP   10.107.10.0   <none>        2049/TCP   1m

Features of the NFS volume can also be examined in the StorageOS UI. Under Volumes, the Attachment column shows an nfs tag. The Volume Details section provides information about the NFS Volume, such as the service endpoint and the node on which the underlying Volume is attached.