Mount ReadWriteMany Persistent Volumes in Containers

You can attach a ReadWriteMany PVC to multiple containers, and that PVC can be written to, by all containers.

About this task

This example shows how a volume is claimed and mounted by each container replica of a deployment with 2 replicas, and each container replica can read and write to the PVC. It is the responsibility of an individual micro-service within an application to make a volume claim, mount it, and use it.

Prerequisites

You must have created the PVCs. This procedure uses PVCs with names and configurations created in StarlingX StarlingX Storage Configuration and Management: Create ReadWriteMany Persistent Volume Claims .

Procedure

  1. Create the busybox container with the persistent volumes created from the PVCs mounted. This deployment will create two replicas mounting the same persistent volume.

    1. Create a yaml file definition for the busybox container.

      % cat <<EOF > wrx-busybox.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: wrx-busybox
        namespace: default
      spec:
        progressDeadlineSeconds: 600
        replicas: 2
        selector:
          matchLabels:
            run: busybox
        template:
          metadata:
            labels:
              run: busybox
          spec:
            containers:
            - args:
              - sh
              image: busybox
              imagePullPolicy: Always
              name: busybox
              stdin: true
              tty: true
              volumeMounts:
              - name: pvc1
                mountPath: "/mnt1"
            restartPolicy: Always
            volumes:
            - name: pvc1
              persistentVolumeClaim:
                claimName: rwx-test-claim
      EOF
      
    2. Apply the busybox configuration.

      % kubectl apply -f wrx-busybox.yaml
      deployment.apps/wrx-busybox created
      
  2. Attach to the busybox and create files on the Persistent Volumes.

    1. List the available pods.

      % kubectl get pods
      NAME                           READY   STATUS    RESTARTS   AGE
      wrx-busybox-6455997c76-4kg8v   1/1     Running   0          108s
      wrx-busybox-6455997c76-crmw6   1/1     Running   0          108s
      
    2. Connect to the pod shell for CLI access.

      % kubectl attach wrx-busybox-6455997c76-4kg8v -c busybox -i -t
      
    3. From the container’s console, list the disks to verify that the Persistent Volume is attached.

      % df
      Filesystem           1K-blocks      Used Available Use% Mounted on
      overlay               31441920   1783748  29658172   6% /
      tmpfs                    65536         0     65536   0% /dev
      tmpfs                  5033188         0   5033188   0% /sys/fs/cgroup
      ceph-fuse            516542464    643072 515899392   0% /mnt1
      

      The PVC is mounted as /mnt1.

  3. Create files in the mount.

    # cd /mnt1
    # touch i-was-here-${HOSTNAME}
    # ls /mnt1
    i-was-here-wrx-busybox-6455997c76-4kg8vi
    
  4. End the container session.

    % exit
    wrx-busybox-6455997c76-4kg8v -c busybox -i -t' command when the pod is running
    
  5. Connect to the other busybox container

    % kubectl attach wrx-busybox-6455997c76-crmw6 -c busybox -i -t
    
  6. Optional: From the container’s console list the disks to verify that the PVC is attached.

    % df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    overlay               31441920   1783888  29658032   6% /
    tmpfs                    65536         0     65536   0% /dev
    tmpfs                  5033188         0   5033188   0% /sys/fs/cgroup
    ceph-fuse            516542464    643072 515899392   0% /mnt1
    
  7. Verify that the file created from the other container exists and that this container can also write to the Persistent Volume.

    # cd /mnt1
    # ls /mnt1
    i-was-here-wrx-busybox-6455997c76-4kg8v
    # echo ${HOSTNAME}
    wrx-busybox-6455997c76-crmw6
    # touch i-was-here-${HOSTNAME}
    # ls /mnt1
    i-was-here-wrx-busybox-6455997c76-4kg8v i-was-here-wrx-busybox-6455997c76-crmw6
    
  8. End the container session.

    % exit
    Session ended, resume using 'kubectl attach wrx-busybox-6455997c76-crmw6 -c busybox -i -t' command when the pod is running
    
  9. Terminate the busybox container.

    % kubectl delete -f wrx-busybox.yaml
    

    For more information on Persistent Volume Support, see, About Persistent Volume Support.