Kubernets学习笔记:Volume(存储卷)

Kubernets学习笔记:Volume(存储卷)

Volume是Pod中能够被多个容器访问的共享目录。K8s的Volume概念、用途和目的与Docker的Volume类似,但是两者不能等价,首先,K8s中的volume定义在Pod上,然后被一个Pod里的多个容器的生命周期不相关,当容器终止或者重启时候,Volume中的数据也不会丢失,最后,K8s支持多种类型的volume。录入GlusterFS、Ceph等先进的分布式文件系统。

Volume的使用也比较简单,在大多数情况下,我们先在Pod上声明一个Volume,然后在容器里引用该Volume并mount到容器里的某个目录上,距离说明,假如先在Tomcat Pod要增减一个名字为dataVol的Volume,并且mount到容器的/mydata-data目录上,则只要对Pod的定义文件做如下修正即可:

Kubernets学习笔记:Volume(存储卷)

除了可以让一个Pod里的多个容器共享文件、让容器的数据写到宿主机的磁盘上或者写文件到网络存储中,K8s的Volume还扩展出了一种比较实用的功能,即容器配置文件集中化定义与管理,这是通过ConfigMap这个资源对象来实现的,我们后边在看ConfigMap。

K8s提供了非常丰富的Volume类型,下面我们来介绍两种:

1.emptyDir

一个emptyDir Volume是在Pod分配到Node时创建的,从它的名称就可以看出,他的初始内容为空,并且无需指定宿主机上对应的目录文件,因为这是K8s自动分配的一个目录,当Pod从node上移除后,emptyDir中的数据也会被永久删除。

2.hostPath

hostPath为在Pod上挂载宿主机上的文件或目录,它通常可以用于以下几个方便。

容器应用程序的日志文件需要永久保存时,可以使用宿主机的高速文件系统进行存储。

需要访问宿主机上Docker引擎内部数据结构的容器应用时,可以通过定义hostpath为宿主机/var/lib/docker目录,是容器内部应用可以直接访问Docker的文件系统。

在使用这种类型的Volume时,需要注意以下几点:

在不同的Node上具有相同配置的Pod可以会因为宿主机上的目录和文件不同而导致对Volume上目录和文件的访问结果不一致。

如果使用了资源配额管理,则K8s无法将hostpath在宿主机上使用的资源纳入管理

下面例子中使用宿主机的/data目录定义了一个hostpath类型的Volume:

Kubernets学习笔记:Volume(存储卷)

gcePersistenDisk、awsElasticBlockStore、NFS就不详细讲解了。


分享到:


相關文章: