kubernetes之配置Pod的Volume存储
简介
此文讲解如何使用Volume配置Pod的存储。
容器的文件系统与容器是同生共死的关系。所以,当容器终止或重启时,文件系统会变化或丢失。为了获得独立于容器的更一致的存储,可以使用Volume
。这对于有状态应用程序(例如键值存储(例如Redis)和数据库)尤其重要。
备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。
配置Pod的Volume
创建一个Pod,该Pod之运行了一个容器。此Pod具有类型为emptyDir
的Volume,即使容器终止并重新启动,该Volume
也会在Pod的整个生命周期内持续存在。文件名:redis.yaml
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 apply -f /root/k8s-example/pods/redis.yaml
2、确认Pod中的容器的运行状态,观测Pod的变化
# kubectl get pod redis --watch
输出结果如下
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 3m17s
3、在另一个终端,用shell进入容器
# kubectl exec -it redis -- /bin/bash
4、在shell中,进入/data/redis/
,创建一个文件
# kubectl exec -it redis -- /bin/bash
root@redis:/data# cd /data/redis/
root@redis:/data/redis# echo Hello > test-file
5、在shell中,列出正在运行的进程
root@redis:/data/redis# apt 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.0 40696 2580 ? Ssl 08:35 0:01 redis-server *:6379
root 18 0.0 0.0 3956 2060 pts/0 Ss 08:40 0:00 /bin/bash
root 332 0.0 0.0 7628 1404 pts/0 R+ 08:45 0:00 ps aux
6、在shell中,kill掉 Redis 进程
root@redis:/data/redis# kill <pid>
<pid>
即为 Redis 的进程 ID,可以看出进程ID为1
7、在原来的终端中,看到Redis的Pod发生改变,如下:
# kubectl get pod redis --watch
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 3m17s
redis 0/1 Completed 0 11m
redis 1/1 Running 1 11m
容器被终止和重启,因为Redis的Pod中restartPolicy
的值为Always
。
1、然后再次进入重启后的Redis Pod的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