第20章 Red Hat Quay ガベージコレクション
Red Hat Quay には、自動で継続的なイメージガベージコレクションが含まれています。ガベージコレクションは、関連付けられていないイメージやタグなしのイメージ、リポジトリー、レイヤーやマニフェストなどのブロブなど、かなりの量のディスクスペースを占めるオブジェクトを削除することで、アクティブオブジェクトのリソースを効率的に使用できるようにします。Red Hat Quay によって実行されるガベージコレクションは、組織の環境でのダウンタイムを減らすことができます。
20.1. 実際の Red Hat Quay ガベージコレクション
現在、すべてのガベージコレクションは慎重に行われ、ガベージコレクションを手動で実行するコマンドはありません。Red Hat Quay は、さまざまなガベージコレクションワーカーのステータスを追跡するメトリックを提供します。
namespace とリポジトリーのガベージコレクションの場合、進行状況はそれぞれのキューのサイズに基づいて追跡されます。namespace とリポジトリーのガベージコレクションワーカーが機能するには、グローバルロックが必要です。その結果、パフォーマンス上の理由から、一度に 1 人のワーカーのみが実行されます。
Red Hat Quay は、ディスク容量を節約するために、名前空間とリポジトリーの間で Blob を共有します。たとえば、同じイメージが 10 回プッシュされた場合、そのイメージのコピーは 1 つだけ保存されます。
タグは、Red Hat Quay にすでに保存されているさまざまなイメージと、タグのレイヤーを共有できます。その場合、共有 Blob を削除すると他のイメージが使用できなくなるため、Blob はストレージに残ります。
Blob の有効期限は、タイムマシンとは無関係です。Red Hat Quay にタグをプッシュして、タイムマシンに 0 秒を設定し、すぐにタグを削除した場合に、ガベージコレクションはそのタグと、そのタグに関連するものすべてを削除しますが、Blob の有効期限に到達するまで Blob のストレージは削除しません。
タグ付きイメージのガベージコレクションは、namespace またはリポジトリーでのガベージコレクションとは動作が異なります。タグ付けされたイメージのガベージコレクションワーカーは、処理するアイテムのキューを用意するのではなく、非アクティブまたは期限切れのタグを持つリポジトリーをアクティブに検索してクリーンアップします。ガベージコレクションワーカーの各インスタンスはリポジトリーロックを取得します。これにより、リポジトリーごとに 1 つのワーカーが生成されます。
- Red Hat Quay では、最後のタグが削除されたか期限切れになったため、非アクティブまたは期限切れのタグはタグのないマニフェストです。マニフェストには、イメージがどのように構成され、個々のタグのデータベースに保存されるかに関する情報が保存されます。タグが削除され、Time Machine から割り当てられた時間に到達すると、Red Hat Quay ガベージは、レジストリー内の他のマニフェストに接続されていない Blob を収集します。特定の Blob がマニフェストに接続されている場合に、Blob はストレージに保持され、削除されるマニフェストへの接続のみが削除されます。
- 期限切れのイメージは割り当てられた時間が経過すると消えますが、Red Hat Quay には引き続き保存されます。イメージが完全に削除されるタイミング、またはコレクションされるタイミングは、組織の Time Machine の設定によって異なります。特に指定がない限り、ガベージコレクションのデフォルトの時間は 14 日です。それまでは、期限切れまたは削除されたイメージをタグで参照できます。
ガベージコレクションのタイプごとに、Red Hat Quay は、各ガベージコレクションワーカーによって削除されたテーブルごとの行数のメトリックを提供します。次のイメージは、Red Hat Quay が同じメトリックを使用してガベージコレクションをモニターする方法の例を示しています。
20.1.1. ストレージ再生の測定
Red Hat Quay には、ガベージコレクションによって解放されたスペースの量を追跡する方法がありません。現在、これを示す最良の指標は、提供されたメトリックで削除された blob の数を確認することです。
Red Hat Quay メトリクスの UploadedBlob
テーブルは、リポジトリーに関連付けられているさまざまな Blob を追跡します。Blob がアップロードされても、PUSH_TEMP_TAG_EXPIRATION_SEC
パラメーターで指定された時間が経過する前に、Blob がガベージコレクションされることはありません。これは、進行中のプッシュに含まれる Blob を途中で削除するのを避けるためです。たとえば、ガベージコレクションが頻繁に実行されるように設定されていて、タグが 1 時間以内に削除されても、関連する Blob がすぐにクリーンアップされないことがあります。関連する Blob が削除されるのは、PUSH_TEMP_TAG_EXPIRATION_SEC
パラメーターで指定された時間が経過して、同じリポジトリーの別の期限切れタグによって次にガベージコレクションの実行がトリガーされたときです。