当前位置: 首页 > news >正文

K8s新手实操|emptyDir卷超详细实战(附完整命令+核心理解)

作为K8s新手,刚接触存储卷时,最容易混淆的就是emptyDir卷——它是K8s中最基础、最常用的临时存储卷,核心特点是“随Pod而生,随Pod而灭”,很多新手会把它和容器内部目录搞混,今天结合完整实操和个人理解,一次性讲透emptyDir,看完就能上手实战!

先抛核心理解(新手直接背,不踩坑):emptyDir是Pod级别的临时共享存储卷,当Pod被分配到某个Node节点时,emptyDir会自动在该节点创建;Pod中所有容器可共享这个卷的数据,卷的真实路径映射在Node节点上,而非Pod内部;只有Pod被删除时,emptyDir才会被永久删除,单纯容器崩溃重启,数据不会丢失

下面结合我自己写的YAML配置、完整实操命令,一步步拆解emptyDir的创建、验证和删除,全程可复制运行,新手也能零障碍上手。

一、emptyDir核心原理(新手必懂)

在K8s中,容器本身的生命周期很短,一旦容器崩溃或删除,容器内的数据会直接丢失。而emptyDir卷的出现,就是为了解决“Pod内容器数据共享”和“临时数据存储”的问题,它的核心特性的可以总结为4点(结合个人理解,通俗好记):

  1. 归属关系:emptyDir是Pod的属性,不属于任何一个容器,是Pod层面的公共资源,由Pod统一管理。

  2. 创建与销毁:Pod被调度到某个Node节点时,emptyDir自动在该节点创建(初始为空);当Pod被删除时,emptyDir及其内部数据会被永久删除,彻底清理。

  3. 共享特性:同一个Pod内的所有容器,都可以通过挂载的方式访问同一个emptyDir卷,哪怕每个容器的挂载路径不同,也能实现数据互通(读写同步)。

  4. 数据安全性:容器崩溃或重启,不会导致emptyDir删除,数据依然保留;只有Pod被删除,数据才会丢失——因为emptyDir的生命周期和Pod完全绑定。

补充说明:emptyDir的真实物理路径在Pod所在的Node节点上(默认路径为/var/lib/kubelet/pods/<PodUID>/volumes/kubernetes.io~empty-dir/),而非Pod内部,我们可以通过命令查看其真实挂载位置,后面实操会详细演示[superscript:8]。

二、完整实操流程(可直接复制命令,零踩坑)

本次实操目标:创建一个包含emptyDir卷的Pod,验证卷的挂载、数据共享(单容器场景,多容器共享可直接扩展),最后清理资源,全程贴合新手实操习惯。

步骤1:编写emptyDir配置文件(YAML详解)

创建名为emptydir.yml的配置文件,核心配置包含Pod定义、容器定义和emptyDir卷定义,每一行都有详细注释,新手可直接复制使用:

cat > emptydir.yml <<EOF apiVersion: v1 # API版本,固定为v1(Pod属于核心API资源) kind: Pod # 资源类型,本次创建的是Pod metadata: name: emptydir # Pod的名称,自定义,后续操作需用到 spec: containers: # 容器配置,本次创建1个httpd容器 - image: httpd # 容器使用的镜像(httpd为基础web镜像,轻量易操作) imagePullPolicy: IfNotPresent # 镜像拉取策略:本地有则不用拉取,避免浪费时间 name: test-container # 容器名称,自定义 volumeMounts: # 容器挂载卷的配置(关键:将emptyDir挂载到容器内部) - mountPath: /cache # 容器内部的挂载路径(容器可通过该路径访问emptyDir卷) name: cache-volume # 挂载的卷名称,必须和下方volumes的name一致(关联卷和容器) volumes: # Pod层面定义卷(emptyDir属于Pod的属性,在这里声明) - name: cache-volume # 卷的名称,和上方volumeMounts.name对应,自定义 emptyDir: # 卷的类型为emptyDir sizeLimit: 2G # 卷的大小限制,可选配置,这里限制为2G,避免占用过多节点资源 EOF

关键解读:

  • volumes字段在spec下,属于Pod层级,说明emptyDir是Pod的属性,不是容器的属性;

  • volumeMounts字段在容器配置下,作用是将Pod的emptyDir卷,映射到当前容器的/cache路径下,容器对/cache路径的读写,本质就是对emptyDir卷的读写;

  • sizeLimit: 2G是可选配置,用于限制emptyDir卷的最大容量,防止卷无限膨胀占用节点资源,默认不限制容量。

步骤2:创建Pod,验证emptyDir卷挂载

使用kubectl命令创建Pod,查看Pod状态和运行节点,确认Pod和emptyDir卷正常创建:

# 1. 创建Pod(根据emptydir.yml配置文件) kubectl create -f emptydir.yml # 2. 查看Pod详细信息,包括运行节点、状态(确保Pod处于Running状态) kubectl get -f emptydir.yml -o wide

运行结果说明:

执行kubectl get命令后,会显示Pod的名称(emptydir)、状态(Running)、运行节点(Node)、IP等信息,其中“NODE”列显示的就是Pod被调度到的节点,emptyDir卷就创建在该节点上。

此时,emptyDir卷已自动在对应Node节点创建,并且通过volumeMounts挂载到了test-container容器的/cache路径下,容器可以正常访问该卷。

步骤3:查看emptyDir卷的真实挂载路径

前面提到,emptyDir的真实路径在Pod所在的Node节点上,我们可以通过crictl命令(容器运行时命令)查看容器的挂载信息(需到对应节点查看),找到emptyDir的真实路径:

# 1. 查看test-container容器的ID(筛选包含test-container的容器) crictl ps | grep -i test-container # 2. 查看容器的详细挂载信息,筛选包含cache的内容(找到emptyDir的真实路径) # 注意:将命令中的容器ID(0397f786c92d0)替换为上一步查询到的实际容器ID crictl inspect 0397f786c92d0 | grep cache

运行结果说明:

执行crictl inspect命令后,会输出容器的挂载详情,其中包含“hostPath”字段,该字段对应的路径就是emptyDir卷在Node节点上的真实物理路径(类似/var/lib/kubelet/pods/xxxx/volumes/kubernetes.io~empty-dir/cache-volume)[superscript:8]。

这也印证了我们的核心理解:emptyDir的真实路径在Node节点上,而非Pod内部,容器只是通过mountPath挂载的方式,实现了对该路径的访问。

步骤4:清理资源(实验完成后必做)

实验完成后,需要及时删除创建的Pod,避免占用集群资源。删除Pod的同时,emptyDir卷也会被自动删除,其内部数据会永久清理:

# 删除Pod(根据emptydir.yml配置文件删除,同时删除关联的emptyDir卷) kubectl delete -f emptydir.yml # 验证删除结果(确认Pod已不存在) kubectl get pods | grep -i emptydir

补充说明:删除Pod后,再次执行crictl inspect命令,会提示“容器不存在”;同时,Node节点上的emptyDir真实路径也会被自动清理,数据彻底丢失——这就是emptyDir“随Pod而灭”的核心特性。

三、核心总结(新手必背,面试加分)

结合本次实操和个人理解,整理出emptyDir卷的核心知识点,新手直接背诵即可,避免踩坑:

  1. 归属:emptyDir是Pod级别的存储卷,属于Pod的属性,不是容器的属性,由Pod统一管理。

  2. 生命周期:与Pod完全绑定——Pod创建→emptyDir创建(Node节点上);Pod删除→emptyDir删除(数据永久丢失);容器崩溃重启→emptyDir及数据保留。

  3. 挂载与访问:容器通过volumeMounts将emptyDir挂载到自身指定路径(如本次的/cache),容器对该路径的读写,本质是对Node节点上emptyDir真实路径的读写。

  4. 共享特性:同一个Pod内的多个容器,可通过挂载同一个emptyDir卷,实现数据共享(哪怕挂载路径不同),这是emptyDir最常用的场景之一[superscript:4]。

  5. 适用场景:临时缓存、Pod内容器间数据交换、临时日志存储等,不适合需要持久化保存的数据(数据随Pod删除而丢失)。

四、新手常见误区(避坑指南)

结合自己的学习经历,整理3个新手最容易踩的坑,帮大家避坑:

  1. 误区1:认为emptyDir卷的路径在Pod内部 → 纠正:emptyDir的真实路径在Pod所在的Node节点上,Pod和容器只是通过挂载的方式访问该路径。

  2. 误区2:容器崩溃后,emptyDir的数据会丢失 → 纠正:不会!只有Pod被删除,emptyDir才会删除;容器崩溃重启,Pod依然存在,emptyDir数据也会保留。

  3. 误区3:不配置sizeLimit,emptyDir可以无限占用节点资源 → 纠正:默认情况下,emptyDir无容量限制,建议根据需求配置sizeLimit,避免占用过多节点磁盘空间。

五、结尾总结

emptyDir卷是K8s新手入门存储卷的首选,它结构简单、实操容易,核心就是“Pod的临时共享文件夹”——随Pod而生,随Pod而灭,适合临时数据存储和容器间数据共享。

本次实操全程使用新手友好的命令和配置,所有命令可直接复制运行,结合核心理解,相信大家能快速掌握emptyDir的用法。后续会分享多容器共享emptyDir、emptyDir与hostPath的区别等内容,感兴趣的可以关注我~

如果在实操过程中遇到Pod创建失败、crictl命令报错、无法找到emptyDir真实路径等问题,欢迎在评论区留言,我会一一回复!觉得有用的话,记得点赞+收藏,新手一起进步~

http://www.zskr.cn/news/1437929.html

相关文章:

  • claude-mem——关了终端再打开,AI 还记得上次聊到哪
  • 多保真贝叶斯优化在数字孪生参数调优中的应用
  • 2026年研发试样小批量不锈钢板选购指南 - 工业推荐榜
  • 告别Godot4.2代码一团糟:用这5个注释技巧,让团队协作效率翻倍
  • 苍穹外卖-Day09(用户下单)
  • 2026年4月数控钢筋锯切生产线源头厂家哪个好,智能梁场大型钢筋加工设备,数控钢筋锯切生产线生产厂家选哪家 - 品牌推荐师
  • 2026年深圳logo设计全包TOP5品牌推荐:农产品商标设计/医疗健康logo设计/医疗健康商标设计/原创logo设计/选择指南 - 优质品牌商家
  • 2026年深圳实惠搬家公司TOP5推荐:深圳实验室搬迁公司、深圳工厂搬家公司、深圳工厂搬迁公司、深圳搬家公司电话选择指南 - 优质品牌商家
  • RLFT技术在工程机械自动化中的实践与优化
  • Win7绝境求生:手把手教你离线搞定Python 3.7.8和Playwright 1.15.3(附KB2533623补丁)
  • 别再只会复制代码了!手把手教你用STM32CubeMX配置PWM驱动TB6612电机(附完整工程)
  • 指针引发的内存问题-----无用的知识又增加了
  • CANoe AutoSequence的OnBoard模式实战:脱离PC,在VN1630硬件上跑自动化测试
  • 第2篇|MapComponent 地图组件常见问题与解决方案
  • 从Matlab到Multisim:一个12V直流稳压电源的完整仿真与实物制作全流程(附PCB文件)
  • 小型平衡机
  • 无感FOC
  • 从PLC读取数据到波形图显示:一个完整的LabVIEW Modbus串口通信项目实战
  • LTspice应用笔记——压控振荡器
  • 扩散策略实现机械臂零样本跨配置适应
  • 2026年湖北中可企业GEO服务公司品牌价值排名 - mypinpai
  • SSVEP-P300混合脑机接口系统设计与实现
  • MOS管控制电路深度解析:从仿真到实测,如何让3.3V单片机稳稳驱动10V传感器电源
  • 避开Matlab立体视觉的坑:双目标定参数设置与视差图优化实战
  • 用Python手把手教你实现一个简单的感知器(附AND/OR逻辑门完整代码)
  • 手把手教你给Ubuntu虚拟机“增肥”:从开机卡住到流畅运行的完整磁盘扩容指南
  • 动手实践:如何用现代仿真软件(如Multisim)搭建一个简易的PDM中波发射机原理模型
  • SCREME框架:低成本高可靠内存ECC技术解析
  • 告别状态机!在STM32单片机上用Protothread协程库实现异步LED闪烁(附完整代码)
  • 用 Agent 构建个人知识管理系统的完整方案