一、k8s存储类型简介
1.类比docker的存储类型
回顾docker的数据持久化。
docker的容器层可以提供存储:存储在可写层(CopyOnWrite)
docker的数据持久化解决方案:
data volume---->1、bind mount 2、docker manager volume
其实两者没有什么显著差别,不同点在于是否需要提前准备dockerHost上的相关文件或目录。
2.k8s存储类型详解
volume
与docker类似:将宿主机上的某个文件或者目录挂载到Pod内。
emptyDir
写一个emptyDir.yaml的文件
[root@master ~]# vim emptyDir.yaml
kind: Pod
apiVersion: v1
metadata:
name: producer-consumer
spec:
containers:
- name: producer
image: busybox
volumeMounts:
- name: shared-volume
mountPath: /producer_dir #容器内的路径
args:
- /bin/sh
- -c
- echo "hello world" > /producer_dir/hello.txt; sleep 30000
- name: consumer
image: busybox
volumeMounts:
- name: shared-volume
mountPath: /consumer_dir
args:
- /bin/sh
- -c
- cat /consumer_dir/hello.txt; sleep 30000
volumes:
- name: shared-volume
emptyDir: {
}
总结:根据上述yaml文件分析,volumes是指k8s的存储方案.容器内volumeMounts使用的是volumes内定义的存储,所以现在可以理解为,volumes定义的dockerHost上的目录或文件,分别挂载到了producer(/producer_dir)和consumer(/consumer_dir)这个两个容器的对应目录。可以判断出在consumer这个容器的/consumer_dir目录下,应该也会有一个hello.txt的文件。
验证查看conumer容器的日志
[root@master ~]# kubectl logs producer-consumer consumer
hello world
查看一个Pod运行在了那个Node节点上
[root@master ~]# kubectl get pod -o wide
到对应Node节点上查看该容器的详细信息(Mounts)
"Mounts": [
{
"Type": "bind",
"Source": "/var/lib/kubelet/pods/9dcfac16-
c55b-458c-bf49-f20867shared-volume",
"Destination": "/producer_dir",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
注意:查看到该容器的Mounts字段,等于是运行docker容器的时候使用这么一条命令:
docker run -v /producer_dir busybox
emptyDir的使用场景:如果Pod被删除,那么数据也会被删除,不具备持久化。Pod内的容器,需要共享数据卷的时候,使用的临时数据卷。
hostpath
hostPath就等于运行容器时使用下面的命令
docker run -v /host/path:/container/path
编写一个hostpath.yaml文件,直接将emptyDir.yaml文件的volumes字段更改为:hostPath。
[root@master volume]# mkdir -p /data/hostPath

本文介绍了K8S存储类型,类比docker存储,详解了volume、emptyDir、hostpath等。还介绍了PV和PVC,包括基于NFS服务创建PV、PV访问模式和回收策略。通过验证回收策略和部署MySQL服务示例,展示了PV和PVC在数据持久化存储方面的运用。

2万+

被折叠的 条评论
为什么被折叠?



