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 should refer to the Volume Claim examples. For more information, see 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
    :command:`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, StarlingX StarlingX Storage Configuration and Management About Persistent Volume Support.