From 78aa8163fbf3f7f61ec683c70e8b4a06f2e2c745 Mon Sep 17 00:00:00 2001 From: MJ-CJM <43091605+MJ-CJM@users.noreply.github.com> Date: Fri, 7 Dec 2018 21:44:30 +0800 Subject: [PATCH] zh-trans: /docs/tasks/configure-pod-container/configure-volume-storage.md (#11602) * configure-aggregation-layer.md * configure-aggregation-layer.md * configure-aggregation-layer.md * configure-aggregation-layer.md * Update configure-aggregation-layer.md * . * . * . * . * . * . * . * . * configure-aggregation-layer.md * . * . * Update configure-aggregation-layer.md * . * . --- .../configure-volume-storage.md | 205 ++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 content/zh/docs/tasks/configure-pod-container/configure-volume-storage.md diff --git a/content/zh/docs/tasks/configure-pod-container/configure-volume-storage.md b/content/zh/docs/tasks/configure-pod-container/configure-volume-storage.md new file mode 100644 index 0000000000..5dd4828c10 --- /dev/null +++ b/content/zh/docs/tasks/configure-pod-container/configure-volume-storage.md @@ -0,0 +1,205 @@ +--- +title: 配置 Pod 以使用卷进行存储 +content_template: templates/task +weight: 50 +--- + + + +{{% capture overview %}} + +此页面展示了如何配置 Pod 以使用卷进行存储。 + +只要容器存在,容器的文件系统就会存在,因此当一个容器终止并重新启动,对该容器的文件系统改动将丢失。对于独立于容器的持久化存储,您可以使用[卷](/docs/concepts/storage/volumes/)。这对于有状态应用程序尤为重要,例如键值存储(如 Redis)和数据库。 + + + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + +## 为 Pod 配置卷 + +在本练习中,您将创建一个运行 Pod,该 Pod 仅运行一个容器并拥有一个类型为 [emptyDir](/docs/concepts/storage/volumes/#emptydir) 的卷,在整个 Pod 生命周期中一直存在,即使 Pod 中的容器被终止和重启。以下是 Pod 的配置: + + + +{{< codenew file="pods/storage/redis.yaml" >}} + +1. 创建 Pod: + + + ```shell + kubectl create -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 + ``` + + 其中 `` 是 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,它们是关键数据的首选,并将处理节点上的一些细节,例如安装和卸载设备。了解更多详情请参阅[卷](/docs/concepts/storage/volumes/)。 + + + +{{% /capture %}}