docker中的“Thin Pool”是啥意思?

Posted

技术标签:

【中文标题】docker中的“Thin Pool”是啥意思?【英文标题】:What does "Thin Pool" in docker mean?docker中的“Thin Pool”是什么意思? 【发布时间】:2018-09-06 23:06:25 【问题描述】:

我想这应该是非常基本的,但我尝试用谷歌搜索它并且我已经阅读了docker documentation。但是,我仍然无法理解“Thin Pool”的确切含义以及它在 docker 世界中所扮演的角色。

【问题讨论】:

我很少支持这么短的问题,但在这种情况下,官方文档并不明显,我也无法轻易找到任何其他明确的解释,所以我认为这是 Stack Overflow 的一个好问题。 【参考方案1】:

短篇小说:

精简池是一种为存储空间提供按需分配的存储源。它或多或少类似于虚拟内存,为每个进程提供完整的地址空间。

长篇大论:

脂肪供应

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

例如,某用户声称使用 10G 存储空间。 Fat Provisioning 然后为该用户保留 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。它代表什么?

它指定成功创建新设备所需的精简池中的最小可用空间(以 GB 为单位)。此检查适用于空闲数据空间和空闲元数据空间。

如果精简池中的可用空间小于Thin Pool Minimum Free Space 中的值,则容器创建(在docker pulldocker run 期间)将失败。空间不足需要向精简池添加更多存储空间或清理未使用的映像。


链接:

Thin provisioning Wikipedia page lvmthin Linux man page The Device Mapper

【讨论】:

感谢@Yuakun 对此进行了更多说明,但这仍然对 docker 起到什么作用?每当 docker 说“精简池最小可用空间”是 XGB 时,这是否意味着 docker 需要精简池才能从池中至少保留 XGB 才能运行?或者这实际上是将池大小增加到最小 XGB 吗? (这意味着更多的块可供 docker 使用) 添加了“Docker 中的精简池”部分。 那么“精简池最小可用空间:10.74 GB”实际上是“数据空间总计:107.4 GB”的 10%?说“整个池”实际上是总数据空间是否正确? 不,整个池 = 数据空间 + 元数据空间。在这种情况下,Thin Pool Minimum Free Space 仅代表数据空间。实际上有一个Thin Pool Minimum Free Metadata Space,它是“元数据空间总计:2.147 GB”的 10%。创建容器时将检查这两个限制。但是10% 是从哪里来的呢?它是 Docker Engine 的一个可调选项,dm.min_free_space,单位是百分位数。 感谢元坤 - 现在这更有意义了!

以上是关于docker中的“Thin Pool”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

linux内核dm thin pool分析

微服务:docker.compose 文件中的 ESHOP_OCELOT_VOLUME_SPEC 行是啥意思

graph driver-device mapper-03thin pool基本操作

mysqld.exe中的d是啥意思

JSON 中的 .d 是啥意思?

Mysql中%$d%是啥意思?