13.6. イメージの手動プルーニング


プルーニングカスタムリソースは、OpenShift イメージレジストリーからのイメージの自動イメージプルーニングを有効にします。管理者は、oc adm prune images <image_prune_option> コマンドを使用してイメージを手動でプルーニングできます。以下に例を示します。

$ oc adm prune images <image_prune_option> 
1
Copy to Clipboard Toggle word wrap
1
使用可能なプルーニングオプションの詳細は、「手動イメージプルーニングコマンドのオプション」を参照してください。

このコマンドは、システムで不要になったイメージを削除します。

必要に応じて、イメージの経過時間やタグ履歴に基づいてイメージをプルーニングしたり、プロジェクトが定義されたストレージ制限を超える原因となるイメージをプルーニングしたりできます。

13.6.1. イメージをプルーニングする際の考慮事項

手動でイメージをプルーニングする前に、次の情報を考慮してください。

  • --namespace フラグを使用してプルーニングしても、イメージは削除されません。イメージはクラスタースコープのリソースであるため、イメージストリームのみが削除されます。プルーニングを特定の namespace に制限すると、現在の使用状況を計算できなくなります。
  • デフォルトで、統合レジストリーは Blob のメタデータをキャッシュしてストレージに対する要求数を減らし、要求の処理速度を高めます。プルーニングによって統合レジストリーのキャッシュが更新されることはありません。プルーニング後の依然としてプルーニングされた層を含むイメージは破損します。キャッシュにメタデータを持つプルーニングされた層はプッシュされないためです。そのため、プルーニング後にキャッシュをクリアするためにレジストリーを再デプロイする必要があります。

    $ oc rollout restart deployment/image-registry -n openshift-image-registry
    Copy to Clipboard Toggle word wrap
  • 統合レジストリーが Redis キャッシュを使用する場合、データベースを手動でクリーンアップする必要があります。
  • プルーニング後にレジストリーを再デプロイすることがオプションでない場合は、キャッシュを永続的に無効にする必要があります。
  • oc adm prune images 操作ではレジストリーのルートが必要です。レジストリーのルートはデフォルトでは作成されません。

13.6.2. イメージをプルーニングする際の制限

イメージをプルーニングする場合、次の制限が適用されます。

  • 外部レジストリーからイメージをプルーニングすることはサポートされていません。
  • イメージがプルーニングされると、status.tags にイメージが含まれているすべてのイメージストリームから、そのイメージへのすべての参照が削除されます。
  • イメージによって参照されなくなったイメージ層は削除されます。

13.6.3. イメージのプルーニングの各種条件

OpenShift Container Platform は、イメージをプルーニングするための 2 つの方法をサポートしています。

  1. 経過時間とタグによるプルーニング
  2. サイズ制限によるプルーニング

これらの方法論は相互に排他的です。経過時間とタグでのプルーニング、またはサイズ制限でのプルーニングのどちらかを選択する必要があります。選択した方法にかかわらず、イメージプルーナーは使用中のイメージが削除されないようチェックします。

イメージは、主な条件を満たし、さらに システムコンポーネントによるアクティブな参照がない場合にのみ削除されます。

13.6.3.1. 経過時間とタグによるイメージのプルーニング

経過時間とタグによるイメージのプルーニングは、デフォルトのプルーニングストラテジーです。--keep-younger-than および --keep-tag-revisions フラグを使用して、削除するイメージを識別します。イメージを経過時間とタグでプルーニングする場合は、イメージが --keep-younger-than しきい値よりも古く、最新のタグリビジョンの 1 つではなく、アクティブなワークロードによって使用されていないことが条件となります。

イメージを経過時間とタグでプルーニングするには、次の条件 すべて を満たす必要があります。

  1. イメージは OpenShift Container Platform によって管理されるか、openshift.io/image.managed アノテーションが付いている。
  2. --keep-younger-than フラグで指定された期間よりも古いイメージである。
  3. --keep-tag-revisions フラグで指定されているように、このタグの最新イメージの 1 つではない。
  4. イメージは、次に示すアクティブまたは最近の API オブジェクトのいずれによっても 参照されていない

    • --keep-younger-than 期間よりも最近に作成された Pod またはイメージストリーム。
    • 実行中または保留中の Pod
    • デプロイメント、レプリケーションコントローラー、レプリカセット、またはステートフルセット。
    • ビルド、ビルド設定、ジョブ、または cron ジョブ。

イメージは、古く、最近のタグリビジョンではなく、システムコンポーネントによるアクティブな参照がないことが確認された場合にのみ削除されます。

13.6.3.2. サイズ制限によるイメージのプルーニング

サイズ制限によってイメージをプルーニングするには、--prune-over-size-limit フラグを使用します。この方法は、プロジェクトを定義されたイメージストレージ制限内に戻すために使用されます。

注記

--prune-over-size-limit フラグは、--keep-tag-revisions フラグまたは --keep-younger-than フラグと共に使用することができません。これを実行すると、この操作が許可されないことを示す情報が返されます。

この方法を使用してイメージをプルーニングするには、次の条件がすべて満たされている必要があります。

  1. このイメージは、現在定義されている最小サイズ制限を超えているプロジェクトの一部である。
  2. イメージは、合計サイズを削減するために、プルーナーによって削除候補として選択されている。
  3. このイメージは現在、次のアクティブな API オブジェクトのいずれによっても参照されていない。

    • running または pending 状態の Pod。
    • デプロイメント、レプリケーションコントローラー、レプリカセット、またはステートフルセット。
    • ビルド、ビルド設定、ジョブ、または cron ジョブ。

この方法では、主なトリガーはプロジェクトのサイズですが、イメージがアクティブに使用されていないことを確認するための安全性チェックも実行されます。

13.6.4. イメージのプルーニング操作の実行

イメージのプルーニング操作を実行するには、次の手順に従います。

前提条件

  • アクセストークンを使用して CLI にログインした。
  • system:image-pruner 以上のクラスターロール (例: cluster-admin) を持っている。
  • イメージレジストリーが公開されている。
  • このドキュメントの「手動でイメージを削除する場合の考慮事項」セクションを確認した。

手順

  1. オプション: 次のコマンドを入力して、プルーニングされるイメージをプレビューします。このコマンドは、削除されるイメージ、イメージストリーム、および Pod のリストを出力します。--confirm フラグを追加するまで何も削除されないことに注意してください。

    $ oc adm prune images <image_prune_option_one> <image_prune_option_two> 
    1
    Copy to Clipboard Toggle word wrap
    1
    使用可能なプルーニングオプションの詳細は、「手動イメージプルーニングコマンドのオプション」を参照してください。
  2. 出力をレビューして、削除されるイメージ、イメージストリーム、および Pod のリストを確認します。
  3. クラスターに適切なオプションを指定して oc adm prune images コマンドを実行します。削除を確認するには、--confirm フラグを追加します。以下に例を示します。

    $ oc adm prune images <image_prune_option_one> <image_prune_option_two> --confirm
    Copy to Clipboard Toggle word wrap

13.6.5. セキュアまたは非セキュアな接続の使用

セキュアな通信の使用は優先され、推奨される方法です。これは、必須の証明書検証と共に HTTPS 経由で実行されます。prune コマンドは、可能な場合は常にセキュアな通信の使用を試行します。これを使用できない場合には、非セキュアな通信にフォールバックすることがあり、これには危険が伴います。この場合、証明書検証は省略されるか、単純な HTTP プロトコルが使用されます。

非セキュアな通信へのフォールバックは、--certificate-authority が指定されていない場合、以下のケースで可能になります。

  1. prune コマンドが --force-insecure オプションと共に実行される。
  2. 指定される registry-url の前に http:// スキームが付けられる。
  3. 指定される registry-url はローカルリンクアドレスまたは localhost である。
  4. 現行ユーザーの設定が非セキュアな接続を許可する。これは、ユーザーが --insecure-skip-tls-verify を使用してログインするか、プロンプトが出される際に非セキュアな接続を選択することによって生じる可能性があります。
重要

レジストリーのセキュリティーが、OpenShift Container Platform で使用されるものとは異なる認証局で保護される場合、これを --certificate-authority フラグを使用して指定する必要があります。そうしない場合、prune コマンドがエラーを出して失敗します。

13.6.6. イメージプルーニングの CLI オプション

次の表では、oc adm prune images <image_prune_option> コマンドで使用できるオプションについて説明します。

Expand
表13.4 手動イメージプルーニングコマンドのオプション
オプション説明

--all

レジストリーにプッシュされていないものの、プルスルー (pullthrough) でミラーリングされたイメージを組み込みます。これはデフォルトでオンに設定されます。プルーニングを統合レジストリーにプッシュされたイメージに制限するには、--all=false を渡します。

--certificate-authority

OpenShift Container Platform で管理されるレジストリーと通信する際に使用する認証局ファイルへのパスです。デフォルトは現行ユーザーの設定ファイルの認証局データに設定されます。これが指定されている場合、セキュアな通信が実行されます。

--confirm

test-run を実行する代わりにプルーニングが実行されることを示します。これには、統合コンテナーイメージレジストリーへの有効なルートが必要になります。このコマンドがクラスターネットワーク外で実行される場合、ルートは --registry-url を使用して指定される必要があります。

--force-insecure

このオプションは注意して使用してください。HTTP 経由でホストされるか、無効な HTTPS 証明書を持つコンテナーレジストリーへの非セキュアな接続を許可します。

--keep-tag-revisions=<N>

それぞれのイメージストリームについては、タグごとに最大 N のイメージリビジョンを保持します (デフォルト: 3)。

--keep-younger-than=<duration>

現在の時間との対比で <duration> より後の新しいイメージはプルーニングしません。または、現在の時間との対比で <duration> より後の他のオブジェクトで参照されるイメージはプルーニングしません (デフォルト: 60m)。

--prune-over-size-limit

同じプロジェクトに定義される最小の制限を超える各イメージをプルーニングします。このフラグは --keep-tag-revisions または --keep-younger-than と共に使用することはできません。

--registry-url

レジストリーと通信する際に使用するアドレスです。このコマンドは、管理されるイメージおよびイメージストリームから判別されるクラスター内の URL の使用を試行します。これに失敗する (レジストリーを解決できないか、これにアクセスできない) 場合、このフラグを使用して他の機能するルートを指定する必要があります。レジストリーのホスト名の前には、特定の接続プロトコルを実施する https:// または http:// を付けることができます。

--prune-registry

他のオプションで規定される条件と共に、このオプションは、OpenShift Container Platform イメージ API オブジェクトに対応するレジストリーのデータがプルーニングされるかどうかを制御します。デフォルトで、イメージのプルーニングは、イメージ API オブジェクトとレジストリーの対応するデータの両方を処理します。

このオプションは、イメージオブジェクトの数を減らすなどの目的で etcd の内容のみを削除することを検討していているか (ただしレジストリーのストレージのクリーンアップは検討していない場合)、レジストリーの適切なメンテナンス期間中にレジストリーのハードプルーニングによってこれを別途実行しようとする場合に役立ちます。

13.6.6.1. --prune-registry フラグに関する追加情報

--prune-registry=false フラグを渡すことで、OpenShift Container Platform イメージ API オブジェクトの削除とレジストリー内のイメージデータの削除を分離できます。たとえば、次のコマンドは、レジストリーストレージはそのまま残し、API オブジェクトのみを削除します。

$ oc adm prune images --keep-tag-revisions=3 --keep-younger-than=60m --confirm --prune-registry=false
Copy to Clipboard Toggle word wrap

次に、レジストリーのハードプルーニングを実行して、関連するイメージデータを削除します。このアプローチでは、1 つのコマンドで両方を削除する場合と比較して、競合状態のが発生し得るタイミングウィンドウを短くできます。

ただし、タイミングウィンドウは完全になくなるわけではありません。たとえば、イメージがプルーニング対象として識別されていても、そのイメージを参照する Pod が作成されることがあります。プルーニング中に作成された API オブジェクトを追跡し、削除されたコンテンツを参照していないことを確認する必要があります。

--prune-registry オプションを指定せずに、または --prune-registry=true を指定してプルーニングを再実行しても、以前に --prune-registry=false を指定してプルーニングされたイメージに関連付けられたレジストリーストレージは削除されません。これらのイメージは、レジストリーのハードプルーニングを実行することによってのみ、レジストリーストレージから削除できます。詳細は、「レジストリーのハードプルーニング」を参照してください。

13.6.7. イメージのプルーニングに関する問題

13.6.7.1. イメージがプルーニングされない

イメージが蓄積し続け、prune コマンドが予想よりも小規模な削除を実行する場合、プルーニング候補のイメージについて満たすべきイメージプルーティングの条件があることを確認します。

とくに削除する必要のあるイメージが、それぞれのタグ履歴において選択したタグリビジョンのしきい値よりも高い位置にあることを確認します。たとえば、sha256:abz という名前の古く陳腐化したイメージがあるとします。イメージがタグ付けされている namespace で以下のコマンドを実行すると、イメージが myapp という単一イメージストリームで 3 回タグ付けされていることに気づかれるでしょう。

$ oc get is -n <namespace> -o go-template='{{range $isi, $is := .items}}{{range $ti, $tag := $is.status.tags}}'\
'{{range $ii, $item := $tag.items}}{{if eq $item.image "sha256:<hash>"}}{{$is.metadata.name}}:{{$tag.tag}} at position {{$ii}} out of {{len $tag.items}}\n'\
'{{end}}{{end}}{{end}}{{end}}'
Copy to Clipboard Toggle word wrap

出力例

myapp:v2 at position 4 out of 5
myapp:v2.1 at position 2 out of 2
myapp:v2.1-may-2016 at position 0 out of 1
Copy to Clipboard Toggle word wrap

デフォルトオプションが使用される場合、イメージは myapp:v2.1-may-2016 タグの履歴の 0 の位置にあるためプルーニングされません。イメージがプルーニングの対象とみなされるようにするには、管理者は以下を実行する必要があります。

  • oc adm prune images コマンドで --keep-tag-revisions=0 を指定します。

    警告

    このアクションを実行すると、イメージが指定されたしきい値よりも新しいか、これよりも新しいオブジェクトによって参照されていない限り、すべてのタグが基礎となるイメージと共にすべての namespace から削除されます。

  • リビジョンのしきい値の下にあるすべての istags、つまり myapp:v2.1 および myapp:v2.1-may-2016 を削除します。
  • 同じ istag にプッシュする新規ビルドを実行するか、他のイメージをタグ付けしてイメージを履歴内でさらに移動させます。ただし、これは古いリリースタグの場合には常に適切な操作となる訳ではありません。

特定のイメージのビルド日時が名前の一部になっているタグは、その使用を避ける必要があります (イメージが未定義の期間保持される必要がある場合を除きます)。このようなタグは履歴内で 1 つのイメージのみに関連付けられる可能性があり、その場合にこれらをプルーニングできなくなります。

13.6.7.2. 非セキュアなレジストリーに対するセキュアな接続の使用

oc adm prune images コマンドの出力で以下のようなメッセージが表示される場合、レジストリーのセキュリティーは保護されておらず、oc adm prune images クライアントがセキュアな接続の使用を試行することを示しています。

error: error communicating with registry: Get https://172.30.30.30:5000/healthz: http: server gave HTTP response to HTTPS client
Copy to Clipboard Toggle word wrap
  • 推奨される解決法として、レジストリーのセキュリティーを保護することができます。そうしない場合は、--force-insecure をコマンドに追加して、クライアントに対して非セキュアな接続の使用を強制することができますが、これは推奨される方法ではありません。

13.6.7.3. セキュリティーが保護されたレジストリーに対する非セキュアな接続の使用

oc adm prune images コマンドの出力に以下のエラーのいずれかが表示される場合、レジストリーのセキュリティー保護に使用されている認証局で署名された証明書が、接続の検証用に oc adm prune images クライアントで使用されるものとは異なることを意味します。

error: error communicating with registry: Get http://172.30.30.30:5000/healthz: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
error: error communicating with registry: [Get https://172.30.30.30:5000/healthz: x509: certificate signed by unknown authority, Get http://172.30.30.30:5000/healthz: malformed HTTP response "\x15\x03\x01\x00\x02\x02"]
Copy to Clipboard Toggle word wrap

デフォルトでは、ユーザーの接続ファイルに保存されている認証局データが使用されます。これはマスター API との通信の場合も同様です。

--certificate-authority オプションを使用してコンテナーイメージレジストリーサーバーに適切な認証局を指定します。

13.6.7.4. 正しくない認証局の使用

以下のエラーは、セキュリティーが保護されたコンテナーイメージレジストリーの証明書の署名に使用される認証局がクライアントで使用される認証局とは異なることを示しています。

error: error communicating with registry: Get https://172.30.30.30:5000/: x509: certificate signed by unknown authority
Copy to Clipboard Toggle word wrap

フラグ --certificate-authority を使用して適切な認証局を指定します。

回避策として、--force-insecure フラグを代わりに追加することもできます。ただし、これは推奨される方法ではありません。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat