大家好!今天,我想和大家聊聊Kubernetes中最重要的概念之一:“卷(Volume)”。
初次接触Kubernetes时,最让人困惑的部分往往是:“如果容器挂了,我的数据会怎么样?” 通过逐一剖析上面的图,我将完美地为大家梳理Kubernetes如何安全地存储数据并实现容器间共享。🚀

1. 为什么需要“卷”? 🤷♂️
基本上,容器是“易失性(Ephemeral)”的。即使你在容器内部创建并保存了文件,一旦容器重启或被删除,里面的数据也会像烟雾一样消失。
但是,有些数据是不能消失的,比如数据库或日志文件,对吧?或者,一个Pod内的多个容器可能需要共享数据。这时,卷(Volume)就登场了。
2. 图解结构分析 🔍
上图主要分为Pod内部和外部存储。我们来逐一看看吧?
① Pod与容器的关系
看图中最内部,你会看到一个名为Pod的大盒子里面有容器1和容器2。
- 文件系统: 每个容器都有自己独立的文件系统。
- Mount (挂载): 但是,看图你会发现两个容器的/my-path路径都通过箭头连接到中央的volumes圆筒,对吗?这就是挂载。
- 数据共享: 这样一来,如果容器1向/my-path写入文件,容器2也能从/my-path读取到相同的文件。这就像一个屋檐下的两家人共用一个冰箱! 🏠
② 各种卷的类型 (右侧方框)
Pod中央的volumes实际上存储在哪里呢?图右侧的三个方框就是答案。
- 📁 emptyDir (临时存储)
- 顾名思义,它最初是一个“空的(empty)”目录。
- 它在Pod创建时生成,并在Pod删除时一同删除。
- 用途: 主要用于缓存数据,或容器之间临时交换数据。它快速简便,但不适合永久存储!
- 💻 hostPath (直接连接节点)
- 它直接使用图中最大边框Kubernetes Node的文件系统。
- Pod直接查看节点上的特定路径(例如:/var/log)。
- 用途: 主要用于监控工具或系统相关容器需要读取节点状态时。需要注意安全性! ⚠️
- ☁️ Network Storage (网络存储)
- 这是数据永久保存的核心。
- 在图中,你看到箭头从Kubernetes Node伸出,连接到存储服务的持久磁盘了吗?
- 它连接AWS EBS、Azure Disk、NFS等外部存储。
- 优点: 即使Pod挂掉,甚至节点故障导致Pod迁移到其他节点,数据也会安全地保留在外部存储中,因此可以直接重新连接并使用。🛡️
3. 总结:数据流 🌊
图中的数据流可以用一句话概括:
“数据存储在容器内部的/my-path ➡️ 经过Pod内部的volume ➡️ 最终写入实际存储(emptyDir、hostPath或外部磁盘)。”
正是由于这种结构,开发者才能无需担心容器的生命周期,安全地管理和利用数据。
💡 结语
Kubernetes卷看起来复杂,但如果将其视为“连接容器和存储的桥梁”,就会变得简单。
- 临时使用即丢弃的数据 👉 emptyDir
- 需要节点信息时 👉 hostPath
- 绝不能丢失的数据 👉 Network Storage (PVC/PV)
只要记住这三点,你就已经理解了Kubernetes存储的一半!下一篇文章中,我们将探讨如何编写实际的配置文件(YAML)。👋
发表回复