为什么需要Volume?
- Pod是自己有生命周期的
- Pod消失后数据也会消失
- 所以我们要把数据放在一个容器的外面
docker存储卷在k8s上只有一定的存储性,因为k8s是调度的,Pod挂掉之后再启动不会默认之前的数据位置,脱离节点的存储设备才可以解决持久能力。
k8s的Volume分类?
-
Ephemeral
emptyDir 空目录 emptyDir Volume 的生命周期与 Pod 一致。
如果Pod被删除,那么数据也会被删除,不具备持久化。Pod内的容器,需要共享数据卷的时候,使用的临时数据卷。
-
Persistent
hostPath 主机目录 local 网络文件系统NFS 云存储 阿里云NAS/OSS AWS
hostPath就等于运行容器时使用下面的命令 docker run -v /host/path:/container/path
Pod 被销毁了,hostPath 对应的目录也还会被保留。
增加了 Pod 与节点的耦合,限制了 Pod 的使用。
需要访问 Kubernetes 或 Docker 内部数据(配置文件和二进制库)的应用则需要使用 hostPath。
总结:
HostPath这种方式相比emptyDir来说,持久化功能强,但它实际增加了Pod与host的耦合,所以大部分资源不会使用这种持久化方案,通常关于docker或者k8s集群本身才会使用。
PV和PVC
pv与pvc简介
PV:PersistentVolume 是k8s集群的外部存储系统,一般是设定好的存储空间(文件系统中的一个目录);
PVC:PersistentVolumeClaim 如果应用需要用到持久化的时候,可以直接向PV申请空间;
1.当系统中的PV被绑定之后,就不会被其他PVC所绑定了。
2.如果系统中有多个可以满足PVC要求的PV,则系统会自动选择一个符合PVC申请空间大小的PV进行绑定,尽量不浪费存储空间。