前言容器中的文件临时存储在磁盘上。容器崩溃重启后,容器会以干净的状态重建,崩溃前创建的文件会被清除。K8S使用卷的概念来管理容器生成的持久化文件。卷还可以用于在同一Pod中的多个容器之间共享文件。更新历史20200708-初稿-左成礼原地址-https://blog.zuolinux.com/2020/07/08/about-storage-volume.htmlVolumetypeemptyDirvolumecontainercrash不会导致Pod被删除节点已删除,因此如果容器崩溃,emptyDir卷中的数据是安全的。当Pod由于某种原因从节点中删除时,emptyDir卷中的数据也将被永久删除。示例apiVersion:v1kind:Podmetadata:名称:test-pdspec:容器:-图像:nginx名称:测试容器volumeMounts:-mountPath:/cache名称:缓存卷volumes:-名称:缓存卷emptyDir:{}persistentVolumeClaim卷persistentVolumeClaim卷用于将持久卷(PersistentVolume)挂载到Pod。持久卷(PV)是用户在不知道特定云环境的详细信息的情况下“声明”持久存储(例如NFS或iSCSI卷)的一种方式。cephfs卷cephfs允许您将现有的CephFS卷挂载到Pod中。当pod被删除时,cephfs卷的内容被保留,卷被简单地卸载。这意味着CephFS卷可以预先填充数据,并且这些数据可以在Pod之间“传递”。CephFS卷可以同时被多个写入器挂载。configMap卷ConfigMap资源提供了一种将配置数据注入Pod的方法。存储在ConfigMap对象中的数据可以被configMap类型的卷引用,然后应用于在Pod中运行的容器。可以在volumes字段中引用configMap名称以生成卷。可以自定义用于ConfigMap中特定条目的路径。如果容器使用ConfigMap作为子路径卷挂载,它将无法接收ConfigMap更新。示例apiVersion:v1kind:Podmetadata:name:configmap-podspec:containers:-name:testimage:busyboxvolumeMounts:-name:config-volmountPath:/etc/configvolumes:-name:config-volconfigMap:name:log-配置项:-key:log_levelpath:log_levelConfigMap中keylog_level中的内容会被挂载到Pod路径/etc/config/log_level。该路径由spec.containers中的参数volumeMounts.mountpath和volumes中的参数items.path连接而成secretvolumesecretvolume用于将敏感信息(例如密码)传递给Pod。secret可以存储在KubernetesAPIserver上,然后以文件的形式附加到Pod上,实现与Pod的解耦。秘密卷由tmpfs(基于内存的文件系统)存储,因此它们永远不会写入持久存储。当容器将Secret挂载为subPathvolume时,将无法实时获取Secret更新。nfs卷nfs卷可以NFS(网络文件系统)安装到您的pod。与emptyDir在删除Pod时会被删除不同,nfs卷的内容在删除Pod时会被保存,只是unmount该卷。这意味着nfs卷可以预先填充数据,并且这些数据可以在Pod之间“传递”。hostPath卷hostPath卷可以将主机节点文件系统上的文件或目录挂载到Pod中。Pod漂移到其他节点时,数据无法复用,仅适用于开发测试环境。使用subPath引用卷时,默认将卷的根目录挂载到指定路径。卷的子目录可以通过subPath而不是根目录来挂载。示例apiVersion:v1kind:Podmetadata:name:my-lamp-sitespec:containers:-name:mysqlimage:mysqlvolumeMounts:-mountPath:/var/lib/mysqlname:site-datasubPath:mysqlvolumes:-name:site-datapersistentVolumeClaim:claimName:my-lamp-site-data将site-datavolume的子目录mysql挂载到容器目录/var/lib/mysqlresourcelimitemptyDir,hostPathvolume可以消耗的磁盘资源不受限制,也就是说可能会填满磁盘。结论Volume的寿命比Pod中运行的任何容器都长,并且数据在容器重新启动时得以保留。使用卷时,pod声明需要提供卷的类型(.spec.volumes)和卷安装的位置(.spec.containers.volumeMounts)。容器中的进程会看到一个由其Docker映像和卷组成的文件系统视图。Docker镜像位于文件系统层次结构的根部,任何卷都安装在镜像内的指定路径上。卷不能挂载到其他卷,也不能与其他卷有硬链接。联系我微信公众号:zuolinux_com
