5.6. 非接続環境からのイメージ削除
以前に oc-mirror プラグイン v2 を使用してイメージをデプロイしたことがある場合は、そのイメージを削除してミラーレジストリーの領域を解放できます。oc-mirror プラグイン v2 は、ImageSetConfiguration ファイルに含まれていないイメージを自動プルーニングしません。そのため、ImageSetConfig.yaml ファイルに変更を加えたときに、必要なイメージやデプロイされたイメージが誤って削除されることはありません。
削除するイメージを指定するには、DeleteImageSetConfiguration ファイルを作成する必要があります。
次の例では、DeleteImageSetConfiguration ファイルで次のイメージを削除します。
- OpenShift Container Platform 4.13.3 のすべてのリリースイメージ。
-
aws-load-balancer-operatorv0.0.1 バンドルと関連するすべてのイメージ。 -
それぞれ対応するダイジェストによって参照される、
ubiおよびubi-minimalの追加イメージ。
DeleteImageSetConfiguration ファイルの例
削除の問題を軽減するために、ミラーからディスクへのミラーリングワークフローとディスクからミラーへのミラーリングワークフローの使用を検討してください。
oc-mirror プラグイン v2 はイメージのマニフェストのみを削除します。そのため、レジストリーの占有されているストレージは削減されません。
マニフェストが削除されたイメージなど、不要なイメージが使用するストレージ領域を解放するには、コンテナーレジストリーでガベージコレクターを有効にする必要があります。ガベージコレクターを有効にすると、レジストリーはマニフェストへの参照がなくなったイメージ Blob を削除します。そのため、削除された Blob が使用していたストレージが削減されます。ガベージコレクターを有効にするプロセスは、コンテナーレジストリーによって異なります。
詳細は、「ディストリビューションレジストリーのストレージクリーンアップ問題の解決」を参照してください。
Operator イメージを削除するときに Operator カタログイメージの削除をスキップするには、
DeleteImageSetConfigurationファイル内の Operator カタログイメージの下に特定の Operator をリストする必要があります。そうすることで、カタログイメージではなく、指定された Operator のみが削除されます。Operator カタログイメージのみを指定した場合、そのカタログ内のすべての Operator とカタログイメージ自体が削除されます。
oc-mirror プラグイン v2 は、Operator カタログイメージを自動的に削除しません。他の Operator がまだデプロイされていて、これらのイメージに依存している可能性があるためです。
カタログの Operator がレジストリーまたはクラスターに残っていないことが確実な場合は、
DeleteImageSetConfigurationのadditionalImagesにカタログイメージを明示的に追加して削除できます。- レジストリーによってガベージコレクションの動作が異なります。一部のレジストリーでは、削除されたイメージが自動的に削除されません。そのため、システム管理者が手動でガベージコレクションをトリガーして領域を解放する必要があります。
5.6.1. ディストリビューションレジストリーのストレージクリーンアップ問題の解決 リンクのコピーリンクがクリップボードにコピーされました!
ディストリビューションレジストリーの既知の問題により、ガベージコレクターが期待どおりにストレージを解放できません。この問題は、Red Hat Quay を使用する場合には発生しません。
手順
適切な方法を選択して、ディストリビューションレジストリーの既知の問題を回避します。
コンテナーレジストリーを再起動するには、次のコマンドを実行します。
podman restart <registry_container>
$ podman restart <registry_container>Copy to Clipboard Copied! Toggle word wrap Toggle overflow レジストリー設定でキャッシュを無効にするには、次の手順を実行します。
blobdescriptorキャッシュを無効にするために、/etc/docker/registry/config.ymlファイルを変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を適用するために、次のコマンドを実行してコンテナーレジストリーを再起動します。
podman restart <registry_container>
$ podman restart <registry_container>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.2. 非接続環境からイメージを削除する リンクのコピーリンクがクリップボードにコピーされました!
oc-mirror プラグイン v2 を使用して非接続環境からイメージを削除するには、次の手順に従います。
前提条件
- マニフェストを参照しなくなったイメージを削除するために、環境でガベージコレクションを有効にした。
手順
delete-image-set-config.yamlファイルを作成し、次の内容を含めます。DeleteImageSetConfigurationファイルCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1 1
- 削除する OpenShift Container Platform チャネルの名前を指定します (例:
stable-4.15)。 - 2 3
- チャネル内の削除するイメージのバージョン範囲を指定します。たとえば、最小バージョンとして
4.15.0、最大バージョンとして4.15.1を指定します。1 つのバージョンのイメージのみを削除するには、minVersionフィールドとmaxVersionフィールドの両方にそのバージョン番号を使用します。 - 4
- 削除する Operator を含む Operator カタログイメージを指定します (例:
registry.redhat.io/redhat/redhat-operator-index:v4.14)。Operator カタログイメージは削除されません。クラスターに残っている他の Operator が、レジストリー内に存在するイメージを必要する場合があります。 - 5
- 削除する特定の Operator (例:
aws-load-balancer-operator) を指定します。 - 6 7
- Operator に対して削除するイメージのバージョン範囲を指定します。たとえば、最小バージョンとして
0.0.1、最大バージョンとして0.0.2を指定します。
次のコマンドを実行して、
delete-images.yamlファイルを作成します。oc mirror delete --config delete-image-set-config.yaml --workspace file://<previously_mirrored_work_folder> --v2 --generate docker://<remote_registry>
$ oc mirror delete --config delete-image-set-config.yaml --workspace file://<previously_mirrored_work_folder> --v2 --generate docker://<remote_registry>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
- <previously_mirrored_work_folder>
- 以前、ミラーリングプロセス中にイメージがミラーリングまたは保存されたディレクトリーを指定します。
- <remote_registry>
イメージの削除元となるリモートコンテナーレジストリーの URL またはアドレスを指定します。
重要イメージを削除するときは、正しいワークスペースディレクトリーを指定してください。新しいクラスターのセットアップなど、ミラーリングを最初から開始する場合にのみ、キャッシュディレクトリーを変更または削除してください。キャッシュディレクトリーに誤った変更を加えると、それ以降のミラーリング操作が中断される可能性があります。
-
作成された
<previously_mirrored_work_folder>/deleteディレクトリーに移動します。 -
delete-images.yamlファイルが生成されたことを確認します。 - ファイルにリストされている各イメージがクラスターで不要になり、レジストリーから安全に削除できることを手動で確認します。
delete-imagesYAML ファイルを生成した後、次のコマンドを実行してリモートレジストリーからイメージを削除します。oc mirror delete --v2 --delete-yaml-file <previously_mirrored_work_folder>/working-dir/delete/delete-images.yaml docker://<remote_registry>
$ oc mirror delete --v2 --delete-yaml-file <previously_mirrored_work_folder>/working-dir/delete/delete-images.yaml docker://<remote_registry>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
- <previously_mirrored_work_folder>
- 以前、ミラーリングプロセス中にイメージがミラーリングまたは保存されたディレクトリーを指定します。
- <remote_registry>
イメージの削除元となるリモートコンテナーレジストリーの URL またはアドレスを指定します。
重要mirror-to-mirror 方式を使用してイメージをミラーリングする場合、イメージはローカルにキャッシュされないため、ローカルキャッシュからイメージを削除することはできません。