Create SharedVolume

Resources

Creating the SharedVolume

The communishift ansible role will create the AWS EFS filesystem and accesspoint, and then creates a Secret called communishift-project-name-efs-credentials in the tenants project. The structure of the secret is as follows:

data:
  efs_filesystem_id: "fsap-xxxxxxxx"
  efs_accesspoint_id: "fs-xxxxxxxxxx"

The values are base64 encoded, to retrieve the values do the following:

oc get secret communishift-project-name-efs-credentials -o jsonpath="{.data['efs_accesspoint_id']}" | base64 -d
oc get secret communishift-project-name-efs-credentials -o jsonpath="{.data['efs_filesystem_id']}" | base64 -d

Next create a yaml file and populate the values for the accessPointID and the fileSystemID.

apiVersion: aws-efs.managed.openshift.io/v1alpha1
kind: SharedVolume
metadata:
  name: PROJECTNAME-sharedvolume
  namespace: PROJECTNAME
spec:
  accessPointID: fsap-xxxxx
  fileSystemID: fs-xxxxx

Then create the SharedVolume object:

oc apply -f project-name-sharedvolume.yml

Once created, the AWS EFS Operator should automatically create a PersistentVolume, then a PersistentVolumeClaim in the project namespace. Tenants can then mount this volume as normal.

The following Pod defintion maybe used to verify the storage is working correctly.

apiVersion: v1
kind: Pod
metadata:
  name: volume-test
  namespace: communishift-dev-test
spec:
  securityContext:
    runAsUser: 1001
    runAsGroup: 1001
    fsGroup: 1001
    fsGroupChangePolicy: "OnRootMismatch"
  serviceAccount: volume-test
  volumes:
    - name: test-volume
      persistentVolumeClaim:
        claimName: pvc-communishift-dev-test-sharedvolume
  containers:
    - image: quay.io/operator-framework/ansible-operator:v1.23.0
      command:
        - /bin/sh
        - "-c"
        - "sleep 60m"
      imagePullPolicy: IfNotPresent
      name: alpine
      volumeMounts:
        - name: test-volume
          mountPath: /tmp/volume_test
      restartPolicy: Always
      resources:
        requests:
          memory: "2Gi"