Mount ReadWriteOnce Persistent Volumes in Containers

You can attach ReadWriteOnce PVCs to a container when launching a container, and changes to those PVCs will persist even if that container gets terminated and restarted.

About this task

This example shows how a volume is claimed and mounted by a simple running container, and the contents of the volume claim persists across restarts of the container. 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 ReadWriteOnce Persistent Volume Claims.

Procedure

  1. Create the busybox container with the persistent volumes created from the PVCs mounted.

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

      ~(keystone_admin)]$ cat <<EOF > rwo-busybox.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: rwo-busybox
        namespace: default
      spec:
        progressDeadlineSeconds: 600
        replicas: 1
        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"
              - name: pvc2
                mountPath: "/mnt2"
            restartPolicy: Always
            volumes:
            - name: pvc1
              persistentVolumeClaim:
                claimName: rwo-test-claim1
            - name: pvc2
              persistentVolumeClaim:
                claimName: rwo-test-claim2
      EOF
      
    2. Apply the busybox configuration.

      ~(keystone_admin)]$ kubectl apply -f rwo-busybox.yaml
      
  2. Attach to the busybox and create files on the Persistent Volumes.

    1. List the available pods.

      ~(keystone_admin)]$ kubectl get pods
      NAME                           READY   STATUS    RESTARTS   AGE
      rwo-busybox-5c84dd4dcd-xxb2b   1/1     Running   0          25s
      
    2. Connect to the pod shell for CLI access.

      ~(keystone_admin)]$ kubectl attach rwo-busybox-5c84dd4dcd-xxb2b -c busybox -i -t
      
    3. From the container’s console, list the disks to verify that the Persistent Volumes are attached.

      # df
      Filesystem     1K-blocks  Used     Available Use% Mounted on
      overlay        31441920   9694828  21747092  31% /
      tmpfs          65536         0     65536     0% /dev
      tmpfs          12295352      0     12295352  0% /sys/fs/cgroup
      /dev/rbd1      996780        24    980372    0% /mnt1
      /dev/rbd0      996780        24    980372    0% /mnt2
      

      The PVCs are mounted as /mnt1 and /mnt2.

  3. Create files in the mounted volumes.

    # cd /mnt1
    # touch i-was-here
    # ls /mnt1
    i-was-here lost+found
    #
    # cd /mnt2
    # touch i-was-here-too
    # ls /mnt2
    i-was-here-too lost+found
    
  4. End the container session.

    # exit
    Session ended, resume using 'kubectl attach rwo-busybox-5c84dd4dcd-xxb2b -c busybox -i -t' command when the pod is running
    
  5. Terminate the busybox container.

    ~(keystone_admin)]$ kubectl delete -f rwo-busybox.yaml
    
  6. Recreate the busybox container, again attached to persistent volumes.

    1. Apply the busybox configuration.

      ~(keystone_admin)]$ kubectl apply -f rwo-busybox.yaml
      
    2. List the available pods.

      ~(keystone_admin)]$ kubectl get pods
      NAME                           READY   STATUS    RESTARTS   AGE
      rwo-busybox-5c84dd4dcd-pgcfw   1/1     Running   0          29s
      
    3. Connect to the pod shell for CLI access.

      ~(keystone_admin)]$ kubectl attach rwo-busybox-5c84dd4dcd-pgcfw -c busybox -i -t
      
    4. From the container’s console, list the disks to verify that the PVCs are attached.

      # df
      Filesystem           1K-blocks      Used Available Use% Mounted on
      overlay               31441920   9694844  21747076  31% /
      tmpfs                    65536         0     65536   0% /dev
      tmpfs                 12295352         0  12295352   0% /sys/fs/cgroup
      /dev/rbd0               996780        24    980372   0% /mnt1
      /dev/rbd1               996780        24    980372   0% /mnt2
      
  7. Verify that the files created during the earlier container session still exist.

    # ls /mnt1
    i-was-here lost+found
    # ls /mnt2
    i-was-here-too lost+found