Kubernetes 非共享存储详解:emptyDir 与 hostPath 从入门到实践

发布时间:2026/8/21 11:30:16

Kubernetes 非共享存储详解:emptyDir 与 hostPath 从入门到实践
‍博主简介CSDN博客专家云计算领域优质创作者华为云开发者社区专家博主阿里云开发者社区专家博主交流社区运维交流社区 欢迎大家的加入 希望大家多多支持我们一起进步如果文章对你有帮助的话欢迎 点赞 评论 收藏 ⭐️ 加关注文章目录一、前言二、存储的两大类2.1 临时卷emptyDir2.2 宿主机卷hostPath2.3 选型对比速览三、存储两大类的实例展示3.1 临时卷emptyDir3.2 宿主机卷hostPath四、结束 - 总结 - 扩展一、前言在Kubernetes容器编排体系中存储管理是支撑有状态服务稳定运行的基石。根据数据是否跨节点共享存储可大体分为共享存储如NFS、CephFS、GlusterFS与非共享存储两大类。共享存储适用于多Pod并发读写、数据集中管理的场景但其依赖网络存在性能损耗和单点故障风险而非共享存储则将数据绑定在单个Pod或单台节点上具有低延迟、高吞吐、无网络开销的优势尤其适合缓存、临时计算、节点运维及高性能单机数据库等场景。本文聚焦于Kubernetes内置的两种非共享存储方案——emptyDir与hostPath深入剖析其实现原理、生命周期、适用边界及生产环境中的局限性帮助大家在存储选型时做出合理决策。二、存储的两大类在Kubernetes的非共享存储体系中原生提供的两类存储卷分别是临时卷Ephemeral Volume和宿主机卷HostPath Volume。前者以emptyDir为代表后者以hostPath为核心。两者的共同特征是数据不通过网络传输仅存在于本地节点但它们在生命周期、隔离性和使用场景上有着本质差异。2.1 临时卷emptyDiremptyDir是最基础的临时存储卷类型。当Pod被调度到某节点时Kubelet会在该节点的/var/lib/kubelet/pods/pod-id/volumes/目录下为Pod创建一个空目录并将其挂载至容器内的指定路径。该目录的生命周期与Pod完全一致——只要Pod在节点上运行目录就存在Pod被删除时目录及其数据会被永久清理。若Pod内容器发生崩溃重启非Pod删除目录中的数据会完整保留因为Pod本身并未销毁。在数据隔离方面同一个Pod内的多个容器可以同时挂载同一个emptyDir卷实现高效的容器间数据交换例如主业务容器将日志写入/var/logSidecar日志收集器读取该目录并转发至后端。不同Pod之间的emptyDir则完全隔离互不可见。其典型适用场景包括应用程序运行时产生的临时缓存文件如Nginx的/tmp目录、前端构建工具的中间产物同一Pod内多个容器通过本地文件系统进行通信的“中转站”需利用节点本地磁盘I/O性能的短暂计算任务如MapReduce中间结果。然而emptyDir的致命弱点是数据非持久化一旦Pod被删除数据便永久丢失。此外它受限于节点的本地磁盘容量若Pod未设置资源配额可能因写入大量数据而填满节点磁盘影响同一节点上的其他Pod。2.2 宿主机卷hostPathhostPath卷则将宿主机节点上的指定文件或目录直接挂载到容器内部。它跳过了Kubelet的临时目录管理直接暴露节点的底层文件系统。这种设计使得hostPath的生命周期与节点绑定——只要Pod运行在该节点上挂载路径即有效一旦Pod因故障、缩容或调度策略变更而漂移到其他节点数据便无法被新Pod继承。简单理解hostPath 就和 Docker 的-v绑定挂载一样直接把宿主机目录映射到容器。但 Kubernetes 是多节点集群Pod 如果持久化数据到 node2 的本地目录那么当 Pod 因故障、缩容或滚动更新被重建时调度器可能把它调度到 node1 或 node3此时新 Pod 的容器里挂载的是新节点上的目录之前 node2 的数据就彻底“失联”了。除非你额外用 nodeSelector 强行把 Pod 钉死在 node2否则数据不会自动跟随 Pod 迁移。与emptyDir不同hostPath的数据隔离性较差。若同一个节点上的多个Pod挂载了相同的宿主机目录它们将互相读写同一份数据这在某些场景下会带来非预期的数据冲突和安全隐患。hostPath主要用于以下有限的场景运维与监控Pod需要读取节点的系统日志如/var/log、cgroup文件或内核参数如/proc、/sys以实现监控代理或故障排查工具的功能网络与存储插件CNI网络插件如Calico、Flannel需要访问宿主机的网络配置目录如/etc/cni/net.dCSI存储插件需要挂载宿主机的设备文件如/dev本地单节点测试开发环境中用于快速验证持久化逻辑但严禁在生产环境中用于业务数据。hostPath的风险更为突出首先它将Pod与特定节点强绑定破坏了Kubernetes调度的灵活性其次容器内进程若拥有足够权限可能误删或破坏宿主机关键文件带来严重的安全隐患最后当节点发生故障时数据恢复难度极大。2.3 选型对比速览存储类型数据生命周期隔离性适用场景生产环境建议emptyDirPod生命周期容器间可共享Pod间隔离缓存、临时计算、Sidecar通信可用于临时数据禁止持久化hostPath节点生命周期弱隔离同节点Pod可互访节点运维、特权插件、单机调试强烈不推荐用于业务数据综上emptyDir和hostPath作为Kubernetes内置的非共享存储基元定位明确且不可互相替代。对于生产环境而言应严格遵循“临时数据用emptyDir节点系统数据用hostPath”的原则。当业务应用需要真正持久化存储时如数据库、消息队列、用户上传文件等上述两种内置卷均无法满足要求。此时应通过持久卷PersistentVolumePV与持久卷声明PersistentVolumeClaimPVC机制接入外部存储系统例如云厂商提供的块存储AWS EBS、阿里云云盘、分布式网络文件系统NFS、CephFS或高性能分布式块存储Ceph RBD。PV/PVC 将底层存储细节与 Pod 解耦使得存储资源能够独立于 Pod 生命周期存在并支持动态扩容、快照备份及跨节点数据迁移是生产环境持久化存储的标准解决方案。三、存储两大类的实例展示3.1 临时卷emptyDir编辑一个yaml进行测试vi empty.yamlapiVersion:v1kind:Podmetadata:name:emptydir-testnamespace:defaultspec:containers:-name:empty-test1image:nginx:1.24imagePullPolicy:IfNotPresentports:-containerPort:80protocol:TCPvolumeMounts:-name:emptydirmountPath:/test1-name:empty-test2image:busybox:latestimagePullPolicy:IfNotPresentcommand:[sh,-c,sleep 3600]volumeMounts:-name:emptydirmountPath:/test2volumes:-name:emptydiremptyDir:{}一个pod里面有两个容器主要测一下这两个容器之间数据互通创建podkubectl apply-fempty.yaml查看pod状态READY结果应该是2/2STATUS应该是Running这是正常启动了[rootk8s-master cunchu]# kubectl get podsNAME READY STATUS RESTARTS AGE emptydir-test2/2 Running07s测试写入数据# 往test1容器里的test1下创建个文件写入数据kubectlexecemptydir-test-cempty-test1 --bash-cecho test测试emptydir /test1/1.txt# 查看test1容器里的文件是否写入数据kubectlexecemptydir-test-cempty-test1 --bash-ccat /test1/1.txt# 查看test2容器里的test2下的这个文件kubectlexecemptydir-test-cempty-test2 --sh-ccat /test2/1.txt可以看到数据是写进来并且共享了但也仅限一个pod中的容器之间进行共享多个pod是无法进行数据共享的。也可以在宿主机查看数据需要去此pod所在的节点上进行查看地址例如cd /var/lib/kubelet/pods/${{pod id}}/volumes/kubernetes.io~empty-dir/emptydir/pod id的获取方式需要在主节点查看yaml进行获取kubectl get pod emptydir-test -o yaml | grep -i uid################# master节点执行 ################## 先确认此pod是在哪个节点上运行的kubectl get pods-owide# 查看此pod的uidkubectl get pod emptydir-test-oyaml|grep-iuid################# node2节点执行 ################## 进入运行的节点并切换到执行目录cd/var/lib/kubelet/pods/1cf5ced0-89e3-4181-b6d2-c8b0e2e960a6/volumes/kubernetes.io~empty-dir/emptydir/# 查看是否有1.txt文件ls# 查看文件内容是否一致cat1.txt3.2 宿主机卷hostPath编辑一个yaml进行测试vi hostpath.yamlapiVersion:v1kind:Podmetadata:name:hostpath-testnamespace:defaultspec:terminationGracePeriodSeconds:30containers:-name:testimage:nginx:1.24imagePullPolicy:IfNotPresentports:-containerPort:80protocol:TCPvolumeMounts:-name:host-testmountPath:/host-testvolumes:-name:host-testhostPath:path:/data/host-test# 宿主机上的绝对路径type:DirectoryOrCreate# 检查类型容器里的路径为/host-test容器外的挂载路径为/data/host-test测试数据是否会同步到宿主机type 常用参数解析在使用hostPath时建议明确指定type以增强防御性编程DirectoryOrCreate如果宿主机上不存在此路径K8s 会自动帮你创建一个空目录权限为 0755。Directory宿主机上必须已存在该目录否则 Pod 启动失败。FileOrCreate如果宿主机不存在此文件自动创建空文件。File宿主机必须存在该文件。创建podkubectl apply-fhostpath.yaml查看pod状态READY结果应该是1/1STATUS应该是Running这是正常启动了[rootk8s-master cunchu]# kubectl get podsNAME READY STATUS RESTARTS AGE hostpath-test1/1 Running055s测试写入数据# 往test容器里的host-test下创建个文件写入数据kubectlexechostpath-test-ctest--bash-cecho 测试hostpath方式挂载 /host-test/cs.txt# 查看test容器里的文件是否写入数据kubectlexechostpath-test-ctest--bash-ccat /host-test/cs.txt可以看到数据是写进来了然后我们再去宿主机上查看是否写入数据查看运行在哪个节点上kubectl get pods-owide看到在node2节点上去node2节点查看/data/host-test下是否有文件和数据cd/data/host-testlscatcs.txt四、结束 - 总结 - 扩展总结本文介绍的emptyDir和hostPath是Kubernetes内置的基础存储适用于临时缓存和节点运维等场景。但它们都无法满足Pod跨节点迁移时的数据持久化需求。扩展在生产环境中对于数据库、消息队列等有状态服务应使用PV持久卷和 PVC持久卷声明机制对接后端存储如NFS、Ceph或云厂商云盘以实现存储资源与Pod生命周期的解耦。关于PV/PVC的详细实践我将在后续文章中深入探讨届时可查看文章Kubernetes 共享存储PV、PVC、StorageClass 详解及使用。

相关新闻

【单片机毕业设计】智能水压监测报警及移动端可视化系统设计(基于 STM32) 基于 STM32 单片机的水压采集终端与 WiFi 监控 APP 开发(015404)

【单片机毕业设计】智能水压监测报警及移动端可视化系统设计(基于 STM32) 基于 STM32 单片机的水压采集终端与 WiFi 监控 APP 开发(015404)

2026/8/21 11:30:15

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

AI驱动Ada/SPARK形式化验证:从代码生成到可证明安全的范式革命

AI驱动Ada/SPARK形式化验证:从代码生成到可证明安全的范式革命

2026/8/21 11:20:15

1. 从“程序员即法官”到“证明器即法官”:一个安全范式的根本转变“The Prover Is the Judge”,这个标题初看有些哲学意味,但如果你在安全关键或高可靠性软件开发领域摸爬滚打过,就会立刻明白它所指向的是一场静默但深刻的革命。…

用 Zig 和 GTK4 构建现代化 SSH 密钥密码图形化输入工具

用 Zig 和 GTK4 构建现代化 SSH 密钥密码图形化输入工具

2026/8/21 11:20:15

如果你在 Linux 桌面环境下使用 SSH 密钥,并且密钥设置了密码,那么你一定遇到过这个场景:每次 git push 、 ssh 连接服务器,甚至 rsync 同步文件时,终端都会弹出一个简陋的、基于终端的密码输入提示。这个提示不…

还原 ML-Agents 检查点的隐藏陷阱:ppo-Huggy-NPU 观测归一化公式深度解析

还原 ML-Agents 检查点的隐藏陷阱:ppo-Huggy-NPU 观测归一化公式深度解析

2026/8/21 13:40:21

还原 ML-Agents 检查点的隐藏陷阱:ppo-Huggy-NPU 观测归一化公式深度解析 【免费下载链接】ppo-Huggy-NPU 项目地址: https://ai.gitcode.com/z_studio/ppo-Huggy-NPU 把 Hugging Face 上的 Unity ML-Agents 检查点搬到昇腾 NPU 上推理,最大的坑…

参与 UIKit-cross-platform 开源贡献:从提交 Issue 到第一个 Pull Request 的完整指南

参与 UIKit-cross-platform 开源贡献:从提交 Issue 到第一个 Pull Request 的完整指南

2026/8/21 13:40:21

参与 UIKit-cross-platform 开源贡献:从提交 Issue 到第一个 Pull Request 的完整指南 【免费下载链接】UIKit-cross-platform Cross-platform Swift implementation of UIKit, mostly for Android 项目地址: https://gitcode.com/gh_mirrors/ui/UIKit-cross-plat…

ECHO框架:基于选择性回合内存的智能体强化学习优化方案

ECHO框架:基于选择性回合内存的智能体强化学习优化方案

2026/8/21 13:40:21

1. 项目概述:ECHO框架的核心思想最近在强化学习社区里,一个名为“ECHO”的新框架开始被频繁讨论。这个标题“Prune To Act, Trace To Learn With Selective Turn Memory In Agentic RL”初看有点拗口,但拆解开来,它精准地概括了当…

从ERC-20到AMA Protocol Coin:代币标准演进对比与选型指南

从ERC-20到AMA Protocol Coin:代币标准演进对比与选型指南

2026/8/21 13:40:21

从ERC-20到AMA Protocol Coin:代币标准演进对比与选型指南 【免费下载链接】node 项目地址: https://gitcode.com/GitHub_Trending/node95/node 如果你正在发行自己的代币,面对 ERC-20、BEP-20 和各种新兴代币标准,难免会陷入"选…

VnCoreNLP性能实测:处理10万条越南语新闻需要多久?与NLP-progress基准全面对比

VnCoreNLP性能实测:处理10万条越南语新闻需要多久?与NLP-progress基准全面对比

2026/8/21 13:40:21

VnCoreNLP性能实测:处理10万条越南语新闻需要多久?与NLP-progress基准全面对比 【免费下载链接】VnCoreNLP A Vietnamese natural language processing toolkit (NAACL 2018) 项目地址: https://gitcode.com/gh_mirrors/vn/VnCoreNLP 对于任何需要…

基于微信小程序的校园跑腿系统的设计与实现(毕业设计项目源码+文档)

基于微信小程序的校园跑腿系统的设计与实现(毕业设计项目源码+文档)

2026/8/21 13:30:21

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/20 21:07:35

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

091、主从同步控制策略

091、主从同步控制策略

2026/8/21 0:09:47

091、主从同步控制策略:从一次多轴抖动事故说起 去年调试一台四轴龙门平台,Z轴和两个X轴做主从同步。电机选的是台达A2系列,驱动器工作在位置模式,主站发脉冲指令,从站硬线跟随。调试时发现一个诡异现象:当主站以500rpm匀速运行时,从站电流波形每隔几秒会出现一次毛刺,…

向量检索实验失败后该查什么

向量检索实验失败后该查什么

2026/8/21 0:09:47

向量检索实验失败后该查什么 这篇要解决什么 向量检索实验失败后该查什么讨论的是一个可复查的工程问题。向量检索实验失败后该查什么不拿未经记录的事故、跑分或成本当作论据;判断需要回到当前项目的输入、版本和运行条件。 从边界开始 处理向量检索实验失败后该查…

提示词发布过程中的止损边界

提示词发布过程中的止损边界

2026/8/21 0:09:47

提示词发布过程中的止损边界 这篇要解决什么 提示词发布过程中的止损边界讨论的是一个可复查的工程问题。提示词发布过程中的止损边界不拿未经记录的事故、跑分或成本当作论据;判断需要回到当前项目的输入、版本和运行条件。 从边界开始 处理提示词发布过程中的止损…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…