website/content/zh/docs/tasks/configure-pod-container/configure-volume-storage.md

6.2 KiB
Raw Blame History

title content_template weight
配置 Pod 以使用卷进行存储 templates/task 50

{{% capture overview %}}

此页面展示了如何配置 Pod 以使用卷进行存储。

只要容器存在,容器的文件系统就会存在,因此当一个容器终止并重新启动,对该容器的文件系统改动将丢失。对于独立于容器的持久化存储,您可以使用。这对于有状态应用程序尤为重要,例如键值存储(如 Redis和数据库。

{{% /capture %}}

{{% capture prerequisites %}}

{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}

{{% /capture %}}

{{% capture steps %}}

为 Pod 配置卷

在本练习中,您将创建一个运行 Pod该 Pod 仅运行一个容器并拥有一个类型为 emptyDir 的卷,在整个 Pod 生命周期中一直存在,即使 Pod 中的容器被终止和重启。以下是 Pod 的配置:

{{< codenew file="pods/storage/redis.yaml" >}}

  1. 创建 Pod:
```shell
kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
```
  1. 验证 Pod 中的容器是否正在运行,然后留意 Pod 的更改:
```shell
kubectl get pod redis --watch
```

输出如下:

```shell
NAME      READY     STATUS    RESTARTS   AGE
redis     1/1       Running   0          13s
```
  1. 在另一个终端,用 shell 连接正在运行的容器:
```shell
kubectl exec -it redis -- /bin/bash
```
  1. 在您的 shell 终端中,切换到 /data/redis 目录下,然后创建一个文件:
```shell
root@redis:/data# cd /data/redis/
root@redis:/data/redis# echo Hello > test-file
```
  1. 在您的 shell 终端中,列出正在运行的进程:
```shell
root@redis:/data/redis# apt-get update
root@redis:/data/redis# apt-get install procps
root@redis:/data/redis# ps aux
```

输出类似于:

```shell
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
```
  1. 在您的 shell 终端中,结束 Redis 进程:
```shell
root@redis:/data/redis# kill <pid>
```

其中 `<pid>` 是 Redis 进程的 ID (PID)。
  1. 在您原先终端中,留意 Redis Pod 的更改。最终您将会看到和下面类似的输出:
```shell
NAME      READY     STATUS     RESTARTS   AGE
redis     1/1       Running    0          13s
redis     0/1       Completed  0         6m
redis     1/1       Running    1         6m
```

此时,容器已经终止并重新启动。这是因为 Redis Pod 的 [restartPolicy](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core) 为 Always

  1. 用 shell 终端进入重新启动的容器中:
```shell
kubectl exec -it redis -- /bin/bash
```
  1. 在您的 shell 终端中,进入到 /data/redis 目录下,并确认 test-file 文件是否仍然存在。
```shell
root@redis:/data/redis# cd /data/redis/
root@redis:/data/redis# ls
test-file
```
  1. 删除为此练习所创建的 Pod
```shell
kubectl delete pod redis
```

{{% /capture %}}

{{% capture whatsnext %}}

  • 参阅[卷](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core)。

  • 参阅 [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core)。

  • 除了 emptyDir 提供的本地磁盘存储外Kubernetes 还支持许多不同的网络附加存储解决方案,包括 GCE 上的 PD 和 EC2 上的 EBS它们是关键数据的首选并将处理节点上的一些细节例如安装和卸载设备。了解更多详情请参阅

{{% /capture %}}