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:
# 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可以正常使用
示例:
# kubectl create -f /root/yaml/003_storage/volume/hostpath.yaml