Configure a Pod to Use a Volume for Storage

    A Container’s file system lives only as long as the Container does. So when a Container terminates and restarts, filesystem changes are lost. For more consistent storage that is independent of the Container, you can use a Volume. This is especially important for stateful applications, such as key-value stores (such as Redis) and databases.

    You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts. If you do not already have a cluster, you can create one by using minikube or you can use one of these Kubernetes playgrounds:

    To check the version, enter .

    In this exercise, you create a Pod that runs one Container. This Pod has a Volume of type emptyDir that lasts for the life of the Pod, even if the Container terminates and restarts. Here is the configuration file for the Pod:

    1. Create the Pod:

      1. kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
      1. kubectl get pod redis --watch

      The output looks like this:

      1. NAME READY STATUS RESTARTS AGE
      2. redis 1/1 Running 0 13s
    2. In another terminal, get a shell to the running Container:

    3. In your shell, list the running processes:

      1. root@redis:/data/redis# apt-get update
      2. root@redis:/data/redis# ps aux

      The output is similar to this:

      1. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
      2. redis 1 0.1 0.1 33308 3828 ? Ssl 00:46 0:00 redis-server *:6379
      3. root 12 0.0 0.0 20228 3020 ? Ss 00:47 0:00 /bin/bash
      4. root 15 0.0 0.0 17500 2072 ? R+ 00:48 0:00 ps aux
    4. In your shell, kill the Redis process:

    5. In your original terminal, watch for changes to the Redis Pod. Eventually, you will see something like this:

      1. redis 1/1 Running 0 13s
      2. redis 1/1 Running 1 6m

    At this point, the Container has terminated and restarted. This is because the Redis Pod has a restartPolicy of Always.

    1. Get a shell into the restarted Container:

      1. kubectl exec -it redis -- /bin/bash
    2. In your shell, go to /data/redis, and verify that test-file is still there.

      1. root@redis:/data/redis# cd /data/redis/
      2. root@redis:/data/redis# ls
      3. test-file
    3. Delete the Pod that you created for this exercise: