kubernetes_05_存储_03_volume_20190926

volume主要解决以下两个问题

1.容器崩溃时,kubelet会重启它(事实上是按照镜像创建一个全新的pod,跟docker不同),容器中的文件将会丢失

2.Pod中同时运行多个容器时,这些容器通常要共享文件

pause主要用来共享文件和网络

 

卷的生命周期:

1)Kubernetes中的卷有明确的寿命--与封装它的Pod相同。所以,卷的生命比Pod中的所有容器都长,容器重启不影响卷的数据。

2)Pod不再存在时,卷也将不复存在

3)kubernetes支持多种类型的卷,Pod可以同时使用任意数量的卷

1.emptyDir空目录

特点:

1) 主要用于pod内的容器共享目录

2) 当Pod被分配给节点时,首先创建 emptyDir卷,并且只要该Pod在节点上运行,该卷就会存在。

3) Pod中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或者不同路径上。

4) 从节点中删除Pod,emptyDir中的数据将被永久删除。

5) 容器崩溃,不会从节点中移除pod,因此'emptyDir'卷中的数据在容器崩溃时是安全的。

应用场景:

1)暂存空间,例如用于基于磁盘的合并排序

2)用作长时间计算崩溃恢复时的检查点

3)web服务器容器提供数据时,保存内容管理器容器提取的文件

Example:

kubernetes_05_存储_03_volume_20190926

# kubectl create -f /root/yaml/003_storage/volume/emptydir.yaml

# kubectl exec -it volume-emptydir-pod -c nginx-container -- /bin/ls /volume/sharedir/

# kubectl exec -it volume-emptydir-pod -c perl-container -- /bin/cat /home/sharedata/testfile

2.HostPath

特点:

1.pod删除以后,pod内的容器产生的目录文件等修改都还在

2.hostPath卷将主机节点的文件系统中文件或目录挂载到集群中

应用场景:

1)主机节点需要访问 Docker内部运行时的文件;使用/var/lib/docker的 hostPath

2)在容器中运行cAdvisor(猫头鹰);使用/dev/cgroups的hostPath

属性:

1)path

2)type

       空: 空字符串(默认)用于向后兼容,这意味着在挂载hostPath卷之前不会执行任何检查。

       DirectoryOrCreate: 如果指定的路径上没有任何东西存在,那么将根据需要在那里创建一个空目录,权限

设置为0755,与kubelet具有相同的组和所有权。

      Directory:给定的路径下必须存在目录

      FileOrCreate:如果指定的路径上没有任何东西存在,那么将根据需要在那里创建一个空文件,权限设

置为0644,与kubelet具有相同的组和所有权。

       File:给定的路径下必须存在文件

       Socket:给定的路径下必须存在UNIX套接字

      CharDevice:给定的路径下必须存在字符设备

       BlockDevice:给定的路径下必须存在块设备

注意:

      节点上文件和目录权限问题,以保证kubelet可以正常使用

示例:

kubernetes_05_存储_03_volume_20190926

# kubectl create -f /root/yaml/003_storage/volume/hostpath.yaml