卷类型
Last updated
Was this helpful?
Last updated
Was this helpful?
Kubernetes支持许多不同的卷类型,不同的云服务厂商都会各自开发不同的卷设备类型,因此这里仅对部分通用的卷类型进行说明:
— 用于存储临时数据的简单空目录(生命周期与Pod一致,无法实现持久化存储);
— 通过从Git仓库中的内容初始化卷(生命周期与Pod一致,无法实现持久化存储);
— 将Node上的目录挂载至Pod中的容器中(仅适用于单Node集群);
— nfs共享卷;
gcePersistentDisk(Google高效能型存储磁盘卷)、awsElasticBlockStore(Amazon Web服务弹性块存储卷)、azureDisk(Microsoft Azure此判断) — 云服务商提供的特定存储类型;
cinder、cephfs、iscsi、flocker、glusterfs、quobyte、rbd、flexVolume、vsphere-Volume、photonPersistentDisk、scaleIO — 一些网络存储;
— 通过持久卷声明来申请持久卷设备(一种特殊的可挂载设备);
、 — 配置数据和敏感数据的挂载(一种特殊的可挂载设备);
— 通过Kubernetes的API获得集群的元数据(一种特殊的可挂载设备);
由于每一种类型的卷的定义都不相同,因此这里仅对通用的地方做一个概括,具体的定义方式还需看各章的配置以及使用explain
命令查看。
卷在Kubernetes中不是以一种资源的形式出现的,因此其定义是在Pod的spec.volumes
中定义的;在定义好之后,再在Pod的spec.containers.volumeMounts
中进行挂载。
因此总结如下两步:
定义卷:在Pod的spec.volumes
中定义卷的类型,以及卷的相关配置;其中卷名是必须的,因为在挂载时需要用到;
挂载卷:在Pod的spec.containers.volumeMounts
中进行挂载,指定容器中的挂载点,以及挂载的卷名;
上面的这种方式,是以全覆盖的形式,即将卷中的所有文件,都挂载至挂载点下,并且挂载点中若原先有文件存在,会被隐藏处理,这就与Linux中挂载时类似。
下面介绍一种方式,可以仅挂载卷内指定的文件,并且不会隐藏挂载点中的原文件。
在第二步的挂载卷中,Pod的spec.containers.volumeMounts.subPath
中指定需要挂载的文件名,并且spec.containers.volumeMounts.mountPath
中的挂载点指定的是文件路径,而不是目录路径。
下面举个例子: