codecamp

Kubernetes 配置Pod以使用卷进行存储

配置 Pod 以使用卷进行存储

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

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

在开始之前

你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

要检查版本,请输入 ​kubectl version​。

为 Pod 配置卷 

在本练习中,你将创建一个运行 Pod,该 Pod 仅运行一个容器并拥有一个类型为 emptyDir 的卷, 在整个 Pod 生命周期中一直存在,即使 Pod 中的容器被终止和重启。以下是 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. 创建 Pod:
  2. kubectl apply -f https://k8s.io/examples/pods/storage/redis.yaml
    
  3. 验证 Pod 中的容器是否正在运行,然后留意 Pod 的更改:
    kubectl get pod redis --watch
    

    输出如下:

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

    输出类似于:

    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
  7. 在你的 Shell 中,结束 Redis 进程:
    root@redis:/data/redis# kill <pid>
    

    其中 ​<pid>​ 是 Redis 进程的 ID (PID)。

  8. 在你原先终端中,留意 Redis Pod 的更改。最终你将会看到和下面类似的输出:
    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 为 ​Always​。

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


Kubernetes 为容器分派扩展资源
Kubernetes 配置Pod以使用PersistentVolume作为存储
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Kubernetes 管理集群

Kubernetes Service

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }