前面我讲了关于Volume的内容,了解了Volume是类似于传统架构中的磁盘内容,概念、用途和目的与docker中的Volume也比较类似。
注意:
1.Volume定义在Pod上,然后被Pod里面的N个容器挂载到具体的路径下
2.Kubernetes中的Volume与Pod的生命周期相同,但是与容器的生命周期不相干,当Pod里的容器终止或重启,Volume中的数据是不会丢失的。
3.Kubernetes支持多种类型的存储,包括NFS、GFS、Ceph等。对存储想多了解的童鞋坐飞机去,skyfans老师带你了解存储,带你飞!!
https://blog.csdn.net/xzm5708796/article/category/8282817
Volume类型
Kubernetes包含了非常丰富的Volume类型,我们一起来学习一下。
1.EmptyDir
不难理解,从名字的字体含义我们就可以知晓,初始分配创建此种类型Volume时,内容为空。它一般是在Pod分配Node时创建的,是Kubernetes自动分配的一个目录,当然,当pod被从node上移除时,emptyDir中的数据也会随之被删除,感觉起来肾是危险!!注意:一个容器崩溃了不会导致数据的丢失,因为容器的崩溃并不移除pod.
应用场景:
(1)临时空间:某些应用在被创建后,需要临时目录作为测试等用途,使用完毕后即销毁。
(2)一个容器需要从另外一个容器中获取数据的目录,也就是多容器共享目录。
官方解释:
普通空间,基于磁盘的数据存储
作为从崩溃中恢复的备份点
存储那些那些需要长久保存的数据,例web服务中的数据
2.hostPath
hostPath类型的磁盘就是挂在了主机的一个文件或者目录
应用场景:
某些应用需要用到docker的内部文件,这个时候只需要挂在本机的/var/lib/docker作为hostPath
在容器中运行cAdvisor,这个时候挂在/dev/cgroups
配置文件配置举例:
volumes:
- name: "test-storage"
hostPath:
path: "/data"
3.gcePersistentDisk(gcePersistentDisk 是指挂在一个特殊GCE 持久化磁盘)、awsElasticBlockStore(一个awsElasticBlockStore是一个挂在aws EBS 磁盘到我们的pod中)
两个产品化的内容,我们不过多讲解。
4.nfs
在常用不过的存储系统了。nfs可以同时被多个pod挂在并进行读写,NFS能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间相互传递。
配置文件配置举例:
volumes:
- name: nfs
nfs:
server:#nfs服务器地址
path: "/data"
5.其他类型
(1)gfs:
开源的google文件存储系统,系统的目录挂载到pod中
(2)iscsi:
iscsi允许将现有的iscsi磁盘挂载到我们的pod中,和emptyDir不同的是,emptyDir会被删除当我们的Pod被删除的时候,但是iscsi不会被删除,仅仅是解除挂在状态而已,这就意味着iscsi能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间相互传递
(3)gitRepo
gitRepo是一个磁盘插件的例子,它挂载了一个空的目录,并且将git上的内容clone到目录里供pod使用,在将来,gitRepo会被转移到更加解偶的模型中,而不是现在以kubernete api扩展年的形式
(4)rbd
rbd允许Rados Block Device格式的磁盘挂载到我们的Pod中,同样的,当pod被删除的时候,rbd也仅仅是被解除挂载,就意味着rbd能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间相互传递
(5)Secrets
一个Secrets磁盘是存储敏感信息的磁盘,例如密码之类。我们可以将secrets存储到api中,使用的时候以文件的形式挂载到pod中,而不用连接api,Secrets是通过tmpfs来支撑的,所有secrets永远不会存储到不稳定的地方。