Volume
Container中的文件在磁盘上是临时存放的,这给Container中运行的较重要的应用程序带来一些问题。问题之一是当容器崩溃时文件丢失。kubelet会重新启动容器, 但容器会以干净的状态重启。第二个问题会在同一Pod中运行多个容器并共享文件时出现。Kubernetes卷(Volume) 这一抽象概念能够解决这两个问题。
Docker也有 卷(Volume) 的概念,但对它只有少量且松散的管理。Docker卷是磁盘上或者另外一个容器内的一个目录。Docker提供卷驱动程序,但是其功能非常有限。Kubernetes支持很多类型的卷。Pod可以同时使用任意数目的卷类型。临时卷类型的生命周期与Pod相同,但持久卷可以比Pod的存活期长。因此,卷的存在时间会超出Pod中运行的所有容器,并且在容器重新启动时数据也会得到保留。当Pod不再存在时,卷也将不再存在。
卷的核心是包含一些数据的一个目录,Pod中的容器可以访问该目录。所采用的特定的卷类型将决定该目录如何形成的、使用何种介质保存数据以及目录中存放 的内容。使用卷时,在.spec.volumes字段中设置为Pod提供的卷,并在.spec.containers[*].volumeMounts字段中声明卷在容器中的挂载位置。容器中的进程看到的是由它们的Docker镜像和卷组成的文件系统视图。Docker镜像 位于文件系统层次结构的根部。各个卷则挂载在镜像内的指定路径上。卷不能挂载到其他卷之上,也不能与其他卷有硬链接。Pod配置中的每个容器必须独立指定各个卷的挂载位置。