"Thin Pool" 在 Docker 中是什么意思?

42

我猜这应该很基础,但我已经尝试过谷歌搜索并阅读了docker文档。然而,我仍然不能理解“Thin Pool”到底是什么以及它在docker世界中扮演的角色。


3
很少有我会为这样简短的问题点赞,但在这种情况下,官方文档并不明显,我也很难找到其他清晰的解释,所以我认为这是一个非常适合在 [so] 上发问的好问题。请问需要翻译其他内容吗? - Anthony Geoghegan
1个回答

59

简述:

“薄型池”是一种提供按需分配存储空间的存储源。它与虚拟内存有些相似,可以为每个进程提供完整的地址空间。

详细描述:

厚配置

传统的存储分配方法称为“厚”或“粗”配置。

例如,用户声称要使用10G的存储空间。 厚配置会为此用户保留10G的物理存储空间,即使他/她只使用其中的1%。 没有其他人可以使用此保留空间。

薄配置

薄配置提供了一种按需存储分配机制,允许用户声明比为该用户预留的存储空间更多的存储空间。

换句话说,它支持存储空间的超额分配。想想RAM的过度承诺功能。

薄型池

“薄型池”是一个概念性术语,指的是薄配置所使用的后备存储源。薄配置从薄型池中分配虚拟存储块,而厚配置从传统存储池中分配物理存储块。

Docker中的薄型池

Docker引擎可以配置为使用Device Mapper作为其存储驱动程序。这就是您处理薄配置的地方。 根据Docker的文档:

使用devicemapper存储驱动程序的生产主机必须使用direct-lvm模式。此模式使用块设备创建薄型池。

需要注意两个不同的薄型池空间:元数据空间(存储指针)和数据空间(存储实际数据)。在最开始时,元数据空间中的所有指针都不指向池中的任何实际块。只有当写入请求到达时才会真正分配数据空间中的块。如果您熟悉虚拟内存机制,这并不新奇。

让我们看一下 docker info 命令的输出:

Data Space Used: 11.8 MB
Data Space Total: 107.4 GB
Data Space Available: 7.44 GB
Metadata Space Used: 581.6 kB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.147 GB
Thin Pool Minimum Free Space: 10.74 GB

这里唯一让人困惑的是 Thin Pool Minimum Free Space 是什么意思?

它指定 thin pool 中需要为新设备创建成功保留的最小剩余空间(以 GB 为单位)。此检查适用于数据空间和元数据空间。

如果 thin pool 中的可用空间少于 Thin Pool Minimum Free Space 的值,则容器创建(在 docker pulldocker run 过程中)将失败。空间不足时需要向 thin pool 添加更多存储或清理未使用的镜像。


链接:


感谢@Yuakun对此进行了更详细的解释,但这与Docker有什么关系呢?每当Docker说“Thin Pool Minimum Free Space”为XGB时,它是否意味着Docker需要从池中至少留下XGB才能运行?还是实际上将池大小增加到最小XGB?(这意味着Docker可以使用更多的块) - Antonio Gomez Alvarado
添加了一个“Docker中的Thin Pool”部分。 - Yuankun
那么,“Thin Pool Minimum Free Space: 10.74 GB” 实际上是“Data Space Total: 107.4 GB”的 10% 吗?可以这样说整个池实际上就是总数据空间吗? - Antonio Gomez Alvarado
3
不,整个池子包括数据空间和元数据空间。在这种情况下,“Thin Pool Minimum Free Space”仅代表数据空间。实际上还有一个“Thin Pool Minimum Free Metadata Space”,它是“Metadata Space Total: 2.147 GB”的10%。创建容器时将检查这两个限制。但是,“10%”来自哪里?这是Docker Engine的可调选项“dm.min_free_space”,单位是百分比。 - Yuankun
谢谢Yuankun - 现在这个意思清楚多了! - Antonio Gomez Alvarado
谢谢您的答案!通过增加一些关于“pool”这个词的历史背景,可以改善这个答案,因为这是一个非常不自然的词来用于这种情况。 - Elijah Lynn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接