Volume解决Kubernetes的存储的问题
对于Pod使用的存储,抽象为volume,volume伴随着Pod的创建而创建,消失而同时消失,不能单独的创建
这样的好处,是存储的塑胶不会因为某个container重启而丢失,因为volume是pod级别的
还有好处是,volume是pod资源,所以所有Pod中的container都可以共享访问这个volume,这样非常的方便
但是需要在contain中去mount这个volume,可以mount到任意目录,比如下面这个例子,
ContentAgent会产生内容html到/var/html,这个目录对应于Volume publicHtml,
WebServer会通过/var/htdocs读取Volume publicHtml中的数据,并把日志通过/var/logs/写到Volume logVol中最后LogRotator会从Volume logVol消费logs
volume有很多种类型,
- emptyDir—A simple empty directory used for storing transient data.
- hostPath—Used for mounting directories from the worker node’s filesystem into the pod.- gitRepo—A volume initialized by checking out the contents of a Git repository.- nfs—An NFS share mounted into the pod.- gcePersistentDisk (Google Compute Engine Persistent Disk), awsElastic-- BlockStore (Amazon Web Services Elastic Block Store Volume), azureDisk (Microsoft Azure Disk Volume)—Used for mounting cloud provider-specific storage.- cinder, cephfs, iscsi, flocker, glusterfs, quobyte, rbd, flexVolume, vsphere-Volume, photonPersistentDisk, scaleIO—Used for mounting other types of network storage.- configMap, secret, downwardAPI—Special types of volumes used to expose certain Kubernetes resources and cluster information to the pod.- persistentVolumeClaim—A way to use a pre- or dynamically provisioned persistent storage. (We’ll talk about them in the last section of this chapter.)其中,
emptyDir最常用,特点是pod删除后数据会丢失,用户container间交互数据或者纯计算的中间结果
hostPath,mount到node的目录,这样数据就不会因为pod删除而丢失
当然,如果要跨节点的恢复数据,就需要用到分布式的volume,比如,gcePersistentDisk
PersistentVolumeClaims,提供一种抽象来封装底层各种具体的存储
这样的好处,user不需要了解和配置具体的存储,可以直接使用,那些事情交给Admin去做
Dynamic provisioning of PersistentVolumes
提前配置好,Persistent Volume Provisioner和Storage Class,仅仅在需要的时候才会自动产生Persistent Volume