Kubernetes 配置Pod和容器(六)使用卷配置Pod存储

这个章节展示了如何使用卷配置pod存储。

容器文件系统只要容器存在才能生效,所以当一个容器终端并重新启动时对于文件系统所做的修改将会丢失。对于单独容器的一致性存储可以使用volume。这对于有状态应用尤为重要,例如key-value存储和数据库。例如redis是一个key-value的内存存储。

给pod配置卷

在本次实验,新建一个运行一个容器的pod。这个pod有一个类型为empytDir的卷,持续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:

 kubectl create -f http://k8s.io/docs/tasks/configure-pod-container/pod-redis.yaml

2.验证pod的容器是否运行,并查看pod的改变:

 kubectl get --watch pod redis

输出大概是这样子:

NAME      READY     STATUS    RESTARTS   AGE
 redis     1/1       Running   0          13s

3.在别的终端,使用shell进入运行的容器内部:

kubectl exec -it redis -- /bin/bash

4.在shell里进入/data/redis目录里面,并新建一个文件:

root@redis:/data/redis# echo Hello > test-file

5.在shell里查看运行的进程列表:

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

6.在shell里杀掉redis进程:

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

pid是redis的进程id。

7.在原来的终端查看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.进入/data/redis目录并且看到test-file还在这里。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容