📦 一张图搞懂Kubernetes卷(Volume)的结构与原理

大家好!今天,我想和大家聊聊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)。👋



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注