web-dev-qa-db-ja.com

dockerの「Thin Pool」とはどういう意味ですか?

私はこれはかなり初歩的だと思いますが、グーグルで試してみました docker documentation を読みました。ただし、「Thin Pool」が何を意味するのか、それがドッカーの世界で果たす役割を正確に把握することはできません。

ショートストーリー:

シンプールは、ストレージスペースのオンデマンド割り当てを提供するストレージソースです。ほぼすべてのプロセスに完全なアドレス空間を提供する仮想メモリに似ています。

長い話:

ファットプロビジョニング

従来のストレージ割り当て方法は、「ファット」または「シック」プロビジョニングと呼ばれます。

たとえば、ユーザーは10Gストレージスペースを使用すると主張します。ファットプロビジョニングは、ユーザーの1%しか使用していなくても、このユーザー用に10Gの物理ストレージスペースを予約します。他の誰もこの予約済みスペースを使用できません。

シンプロビジョニング

シンプロビジョニングは、オンデマンドストレージ割り当てのメカニズムを提供します。これにより、ユーザーは、そのユーザー用に物理的に予約されているよりも多くのストレージスペースを要求できます。

言い換えれば、ストレージスペースの過剰割り当てを可能にします。 RAMのオーバーコミット機能について考えてください。

薄いプール

シンプールは、シンプロビジョニングで使用されるバッキングストレージソースを表す概念上の用語です。シンプロビジョニングは、シンプールからストレージの仮想チャンクを割り当て、ファットプロビジョニングは、従来のストレージプールからストレージの物理ブロックを割り当てます。

Dockerのシンプール

Docker Engineは、デバイスマッパーをストレージドライバーとして使用するように構成できます。これは、シンプロビジョニングを扱う場所です。 Dockerのドキュメントによると:

Devicemapperストレージドライバーを使用する運用ホストは、direct-lvmモードを使用する必要があります。このモードでは、ブロックデバイスを使用してシンプールを作成します。

シンプールの2つの異なるスペースに注意する必要があります。メタデータスペース(ポインターを格納する)とデータスペース(実​​際のデータを格納する)です。最初は、メタデータスペース内のすべてのポインターがプール内の実際のチャンクを指していません。書き込み要求が到着するまで、データ空間のチャンクは実際には割り当てられません。仮想メモリメカニズムに精通している場合、これは新しいことではありません。

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単位で指定します。このチェックは、空きデータスペースと空きメタデータスペースの両方に適用されます。

シンプールの空き領域がdocker pullの値より小さい場合、コンテナの作成(docker runまたはThin Pool Minimum Free Spaceの間)は失敗します。スペースが不足している場合は、シンプールにストレージを追加するか、未使用のイメージを消去する必要があります。


リンク:

31
Yuankun