news 2026/6/11 18:17:51

第八篇:《存储卷:emptyDir、hostPath、PV/PVC、CSI》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第八篇:《存储卷:emptyDir、hostPath、PV/PVC、CSI》

容器默认的文件系统是临时的,Pod 删除后数据丢失。Kubernetes 通过 Volume 抽象提供持久化存储。本文介绍几种常用卷类型:emptyDir(临时存储)、hostPath(节点存储)、PersistentVolumeClaim(持久卷声明)以及 CSI(容器存储接口)。掌握这些,你可以为应用提供从临时缓存到企业级持久化存储的完整方案。

一、Volume 基础
Volume 在 Pod 级别定义,挂载到容器内的指定路径。不同类型的卷支持不同的后端(本地磁盘、NFS、云存储等)。

二、emptyDir:临时存储
emptyDir 在 Pod 调度到节点时创建,初始为空,Pod 删除时数据永久丢失。适用于同一 Pod 内多个容器共享临时数据、缓存或检查点。

YAML 示例:

apiVersion:v1kind:Podmetadata:name:emptydir-demospec:containers:-name:writerimage:busyboxcommand:["/bin/sh","-c","echo hello > /data/hello.txt && sleep 3600"]volumeMounts:-name:shared-datamountPath:/data-name:readerimage:busyboxcommand:["/bin/sh","-c","cat /data/hello.txt && sleep 3600"]volumeMounts:-name:shared-datamountPath:/datavolumes:-name:shared-dataemptyDir:{}

emptyDir 可以指定存储介质(默认磁盘,可改为内存):

emptyDir:medium:MemorysizeLimit:128Mi# 可选,限制内存使用量

三、hostPath:节点存储
hostPath 将节点文件系统的路径挂载到 Pod。常用于:

访问节点上的 Docker socket(/var/run/docker.sock)

日志或监控 agent 读取 /var/log

节点级配置文件(如 kubelet 配置)

注意事项:

不同节点上的文件内容可能不同,导致 Pod 行为不一致。

多 Pod 同时写 hostPath 可能冲突。

生产环境慎用,推荐使用 PersistentVolume。

YAML 示例:

apiVersion:v1kind:Podmetadata:name:hostpath-demospec:containers:-name:appimage:nginxvolumeMounts:-name:host-logsmountPath:/host/var/logvolumes:-name:host-logshostPath:path:/var/logtype:Directory# 可选:DirectoryOrCreate, File, FileOrCreate 等

四、PersistentVolume(PV)与 PersistentVolumeClaim(PVC)
这是 Kubernetes 推荐的持久化存储方式。PV 是集群管理员提供的存储资源,PVC 是用户对存储的请求。PVC 绑定到 PV 后,Pod 通过 PVC 使用存储。

4.1 创建 PV(NFS 示例)

apiVersion:v1kind:PersistentVolumemetadata:name:nfs-pvspec:capacity:storage:10GiaccessModes:-ReadWriteOncepersistentVolumeReclaimPolicy:Retainnfs:server:192.168.1.100path:/exports/data

accessModes:ReadWriteOnce(单节点读写)、ReadOnlyMany(多节点只读)、ReadWriteMany(多节点读写)。

persistentVolumeReclaimPolicy:Retain(手动清理)、Delete(自动删除)、Recycle(已废弃)。

4.2 创建 PVC

kind:PersistentVolumeClaimapiVersion:v1metadata:name:my-pvcspec:accessModes:-ReadWriteOnceresources:requests:storage:5Gi

Kubernetes 会寻找满足请求的 PV(容量 >= 5Gi,匹配 accessMode),并绑定。如果无匹配,PVC 将保持 Pending。

4.3 在 Pod 中使用 PVC

apiVersion:v1kind:Podmetadata:name:pvc-demospec:containers:-name:appimage:nginxvolumeMounts:-name:datamountPath:/usr/share/nginx/htmlvolumes:-name:datapersistentVolumeClaim:claimName:my-pvc

4.4 StorageClass 动态供给
StorageClass 允许按需自动创建 PV。管理员定义 StorageClass(如云厂商的 SSD 类型),用户 PVC 指定 storageClassName,系统会自动创建 PV。

apiVersion:storage.k8s.io/v1kind:StorageClassmetadata:name:fastprovisioner:kubernetes.io/aws-ebsparameters:type:gp2---kind:PersistentVolumeClaimapiVersion:v1metadata:name:dynamic-pvcspec:accessModes:-ReadWriteOncestorageClassName:fastresources:requests:storage:10Gi

五、CSI(容器存储接口)
CSI 是 Kubernetes 1.13+ 引入的标准存储接口,允许第三方存储提供商(如 AWS EBS、GCE PD、Ceph、Portworx)通过标准驱动集成到 K8s。用户无需修改 K8s 核心代码即可使用各种存储。

使用步骤:

在集群中部署 CSI 驱动(通常提供 DaemonSet + Controller 的 YAML)。

创建 StorageClass 引用 CSI 驱动。

创建 PVC 使用该 StorageClass,Pod 即可使用。

CSI 的优势:支持快照、克隆、卷扩展等高级功能。

六、存储卷的适用场景总结

七、常见问题与解决

八、最佳实践
临时数据用 emptyDir,并设置 sizeLimit 防止磁盘爆满。

生产持久化存储使用 PVC + StorageClass,避免直接使用 hostPath。

为有状态应用(如数据库)选择 ReadWriteOnce 的块存储,而非 NFS(性能问题)。

定期备份 PV 数据,PV 本身不提供备份能力。

使用 PVC 时,注意 Pod 调度与卷可用区的亲和性(云存储通常绑定节点可用区)。

九、小结
Kubernetes 提供了丰富的存储卷类型,从临时 emptyDir 到企业级 CSI。理解 PV/PVC 模型能帮助你更好地管理应用数据生命周期。合理选择存储方案,是保证状态应用稳定运行的关键。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 18:16:52

GR-RL具身强化学习框架 本文详细列出了深度学习优化器、学习率调度、特征处理、归一化层、激活函数、时序注意力、强化学习、传感器融合、机械臂控制等60项AI系统底层参数配置。涵盖AdamW优化器(β1

本文详细列出了深度学习优化器、学习率调度、特征处理、归一化层、激活函数、时序注意力、强化学习、传感器融合、机械臂控制等60项AI系统底层参数配置。涵盖AdamW优化器(β10.9,β20.999)、余弦退火学习率(4.87e-6→1e-7)、特征dropout概率(视觉12%)、LayerNorm(eps1e-5)、GEL…

作者头像 李华
网站建设 2026/6/11 18:15:01

用摄像头实时视频当贴图,让3D立方体动起来(Three.js免服务端示例)

本文还有配套的精品资源,点击获取 简介:直接调用浏览器摄像头,把实时画面变成3D立方体表面的动态纹理。打开index.html就能看到旋转立方体上实时显示你的脸或周围环境,整个过程不依赖服务器、不用安装任何插件,Chro…

作者头像 李华
网站建设 2026/6/11 18:06:14

终极指南:Magic UV如何彻底改变Blender纹理贴图工作流程

终极指南:Magic UV如何彻底改变Blender纹理贴图工作流程 【免费下载链接】Magic-UV Blender Add-on: Magic UV 项目地址: https://gitcode.com/gh_mirrors/ma/Magic-UV 在Blender的3D建模和纹理制作过程中,UV编辑往往是效率瓶颈所在。Magic UV这款…

作者头像 李华
网站建设 2026/6/11 18:02:23

超元力玻璃剧场轻量化落地体系,构筑文旅业态长效运营新基石

当前文旅行业进入精细化运营时代,重资产、长周期、高风险的传统改造项目已不再适配市场节奏。多数文旅经营者面临升级投入大、施工周期长、落地效果不可控、回本慢、运维繁琐等一系列难题。如何用更低成本、更短周期、更稳的效果,打造高人气、高收益的特…

作者头像 李华
网站建设 2026/6/11 18:00:16

深入解析PCA9553 I2C LED驱动芯片:从原理到嵌入式实战应用

1. 项目概述:为什么我们需要PCA9553这样的专用LED驱动芯片?在嵌入式开发和物联网设备的设计中,LED状态指示是一个看似简单却极其重要的环节。无论是路由器上的网络指示灯、智能音箱的呼吸灯,还是工业设备的面板状态显示&#xff0…

作者头像 李华
网站建设 2026/6/11 18:00:10

Java IO流总结

Java IO流总结作者:没有四次元口袋的蓝胖 日期:2026-06-11 标签:Java, IO流, 字节流, 字符流, 序列化一、IO流体系全景 IO流是Java处理数据输入输出的核心机制。"流"就是数据的管道——数据从源到目的地的流动通道。 1.1 分类维度…

作者头像 李华