> For the complete documentation index, see [llms.txt](https://devops.books.c-k.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://devops.books.c-k.dev/kubernetes/volume-for-storage/configure-a-pod-to-use-a-volume-for-storage.md).

# Configure a Pod to Use a Volume for Storage

In this exercise, you create a Pod that runs one Container. This Pod has a Volume of type [emptyDir](https://kubernetes.io/docs/concepts/storage/volumes/#emptydir) that lasts for the life of the Pod, even if the Container terminates and restarts. Here is the configuration file for the Pod:

```
apiVersion: v1
kind: Pod
metadata:
  name: redis
spec:
  containers:
  - name: redis
    image: redis
    volumeMounts:
    - name: redis-storage
      mountPath: /data/redis
  volumes:
  - name: redis-storage
    emptyDir: {}
```

1. Create the Pod:

   ```
   kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
   ```
2. Verify that the Pod’s Container is running, and then watch for changes to the Pod:

   ```
   kubectl get pod redis --watch
   ```

   The output looks like this:

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

   ```
   kubectl exec -it redis -- /bin/bash
   ```
4. In your shell, go to `/data/redis`, and then create a file:

   ```
   root@redis:/data# cd /data/redis/
   root@redis:/data/redis# echo Hello > test-file
   ```
5. In your shell, list the running processes:

   ```
   root@redis:/data/redis# apt-get update
   root@redis:/data/redis# apt-get install procps
   root@redis:/data/redis# ps aux
   ```

   The output is similar to this:

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

   ```
   root@redis:/data/redis# kill <pid>
   ```

   where `<pid>` is the Redis process ID (PID).
7. In your original terminal, watch for changes to the Redis Pod. Eventually, you will see something like this:

   ```
   NAME      READY     STATUS     RESTARTS   AGE
   redis     1/1       Running    0          13s
   redis     0/1       Completed  0         6m
   redis     1/1       Running    1         6m
   ```

At this point, the Container has terminated and restarted. This is because the Redis Pod has a [restartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.14/#podspec-v1-core) of `Always`.

1. Get a shell into the restarted Container:

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

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

   ```
   kubectl delete pod redis
   ```

## 後按:

emptyDir 是一種在pod達立的時候便會出現的儲存點，就如其名，它剛開始時空白沒有任何東西。Pod中的所有Container都能夠讀寫內裡的檔案，所以emptyDir有以下用途:

1. 暫存空間
2. Container的共用空間
