k8s-Volume(存储卷)
Volume是Pod中能够被多个容器访问的共享目录。
Kubernetes的Volume概念与Docker的Volume比较类似,但不完全相同。
Kubernetes中的Volume与Pod生命周期相同,但与容器的生命周期不相关。当容器终止或者重启时,Volume中的数据也不会丢失。
另外,Kubernetes支持多种类型的Volume,并且一个Pod可以同时使用任意多个Volume。
Kubernetes提供了非常丰富的Volume类型,下面逐一进行说明。
EmptyDir:一个EmptyDir Volume是在Pod分配到Node时创建的。从它的名称就可以看出,它的初始内容为空。在同一个Pod中所有容器可以读和写EmptyDir中的相同文件。当Pod从Node上移除时,EmptyDir中的数据也会永久删除。
hostPath:在Pod上挂载宿主机上的文件或目录。
gcePersistentDisk:使用这种类型的Volume表示使用谷歌计算引擎(Google Compute Engine,GCE)上永久磁盘(Persistent Disk,PD)上的文件。
与EmptyDir不同,PD上的内容会永久保存,当Pod被删除时,PD只是被卸载(Unmount),但不会被删除。
需要注意的是,你需要先创建一个永久磁盘(PD)才能使用gcePersistentDisk。
awsElasticBlockStore:与GCE类似,该类型的Volume使用Amazon提供的Amazon Web Service(AWS)的EBS Volume,并可以挂在到Pod中去。需要注意到是,需要首先创建一个EBS Volume才能使用awsElasticBlockStore。
nfs:使用NFS(网络文件系统)提供的共享目录挂载到Pod中。在系统中需要一个运行中的NFS系统。
iscsi:使用iSCSI存储设备上的目录挂载到Pod中。
glusterfs:使用开源GlusterFS网络文件系统的目录挂载到Pod中。
rbd:使用Linux块设备共享存储(Rados Block Device)挂载到Pod中。
gitRepo:通过挂载一个空目录,并从GIT库clone一个git respository以供Pod使用。
secret:一个secret volume用于为Pod提供加密的信息,你可以将定义在Kubernetes中的secret直接挂载为文件让Pod访问。secret volume是通过tmfs(内存文件系统)实现的,所以这种类型的volume总是不会持久化的。
persistentVolumeClaim:从PV(PersistentVolume)中申请所需的空间,PV通常是一种网络存储,例如GCEPersistentDisk、AWSElasticBlockStore、NFS、iSCSI等。