Kubernetes的Volume是pod的一个组成部分,并和pod共享相同的生命周期。它像容器一样在pod的specfication中就定义了。它们不是独立的Kubernetes对象,也不能单独创建或删除。pod中的所有容器都可以使用卷,但必须先将它挂载在容器文件系统的任意位置。

6.1.1 卷的应用示例

假设有一个带有三个容器的pod(如图6.2所示),一个容器运行了一个WebServer,该web服务器的HTML页面目录位于/var/htdocs, 并将站点访问日志存储到/var/logs目录中。第二个容器运行了一个ContentAgent来创建HTML文件,并将它们存在/var/html中,第三个容器LogRotator处理在/var/logs目录中找到的日志(转换、压缩、分析它们或者做其他处理)。
image.png

Kubernetes支持各种类型的卷,这些卷要么是在初始化卷时从外部源填充的,要么是在卷内挂载现有目录。这个填充或装入卷的过程是在pod内的容器启动之前执行的。

6.1.2 介绍卷类型

  • emptyDir——用于存储临时数据的简单空目录。

  • hostPath——用于将目录从工作节点的文件系统挂载到pod中。

  • gitRepo——通过检出(check out)Git仓库的内容来初始化的卷。

  • nfs——挂载到pod中的NFS共享卷。

  • gcePersistentDisk (Google Compute Engine Persistent Disk), awsElasticBlockStore (Amazon Web Services Elastic Block Store Volume), azureDisk(Microsoft Azure Disk Volume)——用于挂载云服务商提供的特定存储类型。

  • cinder, cephfs, iscsi, flocker, glusterfs, quobyte, rbd, flexVolume, vsphereVolume, photonPersistentDisk, scaleIO—用于挂载其他类型的网络存储。

  • configMap, secret, downwardAPI——用于将某些 Kubernetes 资源和集群信息公开给 pod 的特殊类型的卷。

  • persistentVolumeClaim—— 一种使用预(pre-)供应或者动态供应(dynamic provisioning)的持久存储类型。

注意:单个容器可以同时使用不同类型的多个卷。