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目录中找到的日志(转换、压缩、分析它们或者做其他处理)。
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)的持久存储类型。
注意:单个容器可以同时使用不同类型的多个卷。