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)

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

2026/8/22 13:02:59 阅读更多 →
The Structural Sources of Verb Meaning Revisited: Large Language Models Display Syntactic Bootstr...

The Structural Sources of Verb Meaning Revisited: Large Language Models Display Syntactic Bootstr...

论文核心内容总结与翻译 一、文章主要内容 本文围绕“句法引导(Syntactic Bootstrapping)”假说展开研究,该假说认为儿童会利用动词所处的句法环境来学习动词含义。研究团队通过操纵训练数据(去除句法信息或共现信息),在RoBERTa(掩码语言模型)和GPT-2(自回归语言模型…

2026/8/22 12:26:10 阅读更多 →
【单片机毕业设计】基于 STM32 的智能胎压检测与阈值远程配置系统 基于 STM32 的胎压声光报警与无线数据传输系统设计(015304)

【单片机毕业设计】基于 STM32 的智能胎压检测与阈值远程配置系统 基于 STM32 的胎压声光报警与无线数据传输系统设计(015304)

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

2026/8/22 12:39:40 阅读更多 →

最新新闻

C语言数组深度解析:从内存布局到工程实践

C语言数组深度解析:从内存布局到工程实践

最近在帮一个刚学 C 语言的朋友看代码,他写了个简单的成绩录入程序,用数组存了 10 个学生的分数,然后想找出最高分。他写了个循环,结果每次运行,最高分都莫名其妙地指向了数组最后一个元素后面的某个内存地址的值。他一…

2026/8/24 5:25:51 阅读更多 →
BES平台日志调试进阶:从ELK到Broken Pipe的实战排查

BES平台日志调试进阶:从ELK到Broken Pipe的实战排查

1. 项目概述:BES平台日志调试的进阶之路上次我们聊了BES平台日志调试的基础,像是打开了工具箱,认识了扳手和螺丝刀。今天这篇,咱们得往深了走,聊聊怎么用这些工具去“听诊”和“手术”。BES(这里我们理解为…

2026/8/24 5:25:49 阅读更多 →
高效代码审查:从文档设计到团队协作的工程实践

高效代码审查:从文档设计到团队协作的工程实践

1. 从“挑刺”到“共建”:为什么我们需要一份好的代码审查文档代码审查,在不少团队里,常常演变成一场充满火药味的“批斗会”。审查者拿着放大镜,一行行地找茬,被审查者则如坐针毡,心里默念“赶紧结束”。这…

2026/8/24 5:24:49 阅读更多 →
CSS clip-path实现大屏不规则边框的工程实践

CSS clip-path实现大屏不规则边框的工程实践

1. 为什么大屏项目里“不要图片”的边框需求突然变多?最近三个月,我接手了7个可视化大屏项目,其中6个在需求评审阶段就明确提了一条:“所有装饰性边框,禁止用PNG、SVG或任何图片资源。”起初我以为是客户对加载性能有执…

2026/8/24 5:24:49 阅读更多 →
Chroma Foundation:构建智能体长期记忆系统的工程化实践

Chroma Foundation:构建智能体长期记忆系统的工程化实践

上周,一个朋友在调试他的AI智能体时,遇到了一个典型问题:智能体在对话中表现得像个“金鱼”,前几轮还能记住用户偏好,聊到后面就忘了,甚至开始自相矛盾。他尝试了各种方法,比如在提示词里拼命塞…

2026/8/24 5:24:49 阅读更多 →
6G显存也能玩转AI视频生成:ComfyUI低资源高清视频实战指南

6G显存也能玩转AI视频生成:ComfyUI低资源高清视频实战指南

你有没有遇到过这种情况:刷到别人用AI生成的4K高清视频,画面流畅、细节丰富,再看看自己电脑上那块只有6GB显存的“入门级”显卡,默默关掉了教程页面,心想“这玩意儿肯定跟我无缘”?或者,你兴致勃…

2026/8/24 5:24:49 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →