实验手册-13-Volume

目录
实验目的
对比 emptyDir 和 hostPath 两种存储后端的区别

任务一:emptyDir实践
步骤1 创建配置文件
vim empty.yaml
配置文件内容:
apiVersion: v1
kind: Pod
metadata:
name: producer-consumer
spec:
containers:
- image: busybox
name: producer
volumeMounts:
- mountPath: /producer_dir
name: shared-volume
args:
- /bin/sh
- -c
- echo "hello world!" > /producer_dir/hello ; sleep 30000
- image: busybox
name: consumer
volumeMounts:
- mountPath: /consumer_dir
name: shared-volume
args:
- /bin/sh
- -c
- cat /consumer_dir/hello ; sleep 30000
volumes:
- name: shared-volume
emptyDir: {}
步骤2 加载配置文件
kubectl apply -f emptydir.yaml
步骤3 验证
查看创建的 Pod
kubectl get pods
第二列 READY 显示为 2/2 表示两个【容器】都是 Ready 状态
查看 consumer 的日志:
kubectl logs producer-consumer consumer
查找一下我们刚才创建出来的 Docker 容器:
docker ps | grep busybox
红线圈起来的部分是容器的 ID,下一步会用到。
查看容器的详细信息:
docker inspect 041e85c3c9d0 | grep shared -A 5 -B 3
docker inspect
其中的 041e85c3c9d0
是容器 ID,换成你自己的
可以看到两个容器都挂载了 /var/lib/kubelet/pods/26c0356b-bbb8-4755-ae69-2fc1fa506cf0/volumes/kubernetes.io~empty-dir/shared-volume
这个目录
我们看一下这个目录中的文件内容:
cat /var/lib/kubelet/pods/26c0356b-bbb8-4755-ae69-2fc1fa506cf0/volumes/kubernetes.io~empty-dir/shared-volume/hello
步骤4 删除创建的 Pod
kubectl delete pod producer-consumer
步骤5 再次查看刚才的文件
cat /var/lib/kubelet/pods/26c0356b-bbb8-4755-ae69-2fc1fa506cf0/volumes/kubernetes.io~empty-dir/shared-volume/hello
发现文件已经消失,所以 emptyDir 是【临时的】目录

任务二:hostPath实践
步骤1 先创建一个文件夹,用来后续共享给 Pod 内的容器
mkdir /root/producer_dir
步骤2 创建一个配置文件
vim hostpath.yaml
文件内容为:
apiVersion: v1
kind: Pod
metadata:
name: producer-consumer
spec:
containers:
- image: busybox
name: producer
volumeMounts:
- mountPath: /producer_dir
name: shared-volume
args:
- /bin/sh
- -c
- echo "hello world!" > /producer_dir/hello ; sleep 30000
volumes:
- name: shared-volume
hostPath:
path: /root/producer_dir
步骤3 加载这个配置文件
kubectl apply -f hostpath.yaml
步骤4 查看创建的 Pod 是不是已经准备就绪
kubectl get pods
步骤5 验证
查看目录内的文件内容
cat /root/producer_dir/hello
步骤6 删除创建的 Pod
kubectl delete pod producer-consumer
步骤7 再次验证
cat /root/producer_dir/hello
可以发现,目录没有被删除,hostPath是持久化的目录