This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.8.6. レジストリーのハードプルーニング
OpenShift Container レジストリーは、OpenShift Container Platform クラスターの etcd で参照されない Blob を蓄積します。基本的なイメージプルーニングの手順はこれらに対応しません。これらの Blob は 孤立した Blob と呼ばれています。
孤立した Blob は以下のシナリオで発生する可能性があります。
-
oc delete image <sha256:image-id>
コマンドを使ってイメージを手動で削除すると、etcd のイメージのみが削除され、レジストリーのストレージからは削除されません。 - デーモンの障害によって生じるレジストリーへのプッシュにより、一部の Blob はアップロードされるものの、(最後のコンポーネントとしてアップロードされる) イメージマニフェスト はアップロードされません。固有のイメージ Blob すべてが孤立します。
- OpenShift Container Platform がクォータの制限によりイメージを拒否します。
- 標準のイメージプルーナーがイメージマニフェストを削除するが、関連する Blob を削除する前に中断されます。
- 対象の Blob を削除できないというレジストリープルーナーのバグにより、それらを参照するイメージオブジェクトは削除され、Blob は孤立します。
基本的なイメージプルーニングとは異なるレジストリーの ハードプルーニング により、クラスター管理者は孤立した Blob を削除することができます。OpenShift Container レジストリーのストレージ領域が不足している場合や、孤立した Blob があると思われる場合にはハードプルーニングを実行する必要があります。
これは何度も行う操作ではなく、多数の孤立した Blob が新たに作成されているという証拠がある場合にのみ実行する必要があります。または、(作成されるイメージの数によって異なりますが) 1 日 1 回などの定期的な間隔で標準のイメージプルーニングを実行することもできます。
手順
孤立した Blob をレジストリーからハードプルーニングするには、以下を実行します。
ログイン
CLI で
kubeadmin
として、またはopenshift-image-registry
namespace へのアクセスのある別の特権ユーザーとしてクラスターにログインします。基本的なイメージプルーニングの実行
基本的なイメージプルーニングにより、不要になった追加のイメージが削除されます。ハードプルーニングによってイメージが削除される訳ではありません。レジストリーストレージに保存された Blob のみが削除されます。したがって、ハードプルーニングの実行前にこれを実行する必要があります。
レジストリーの読み取り専用モードへの切り替え
レジストリーが読み取り専用モードで実行されていない場合、プルーニングと同時に実行されているプッシュの結果は以下のいずれかになります。
- 失敗する。孤立した Blob が新たに発生します。
- 成功する。ただし、(参照される Blob の一部が削除されたため) イメージをプルできません。
プッシュは、レジストリーが読み取り書き込みモードに戻されるまで成功しません。したがって、ハードプルーニングは注意してスケジューリングする必要があります。
レジストリーを読み取り専用モードに切り換えるには、以下を実行します。
configs.imageregistry.operator.openshift.io/cluster
で、spec.readOnly
をtrue
に設定します。oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":true}}' --type=merge
$ oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":true}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
system:image-pruner
ロールの追加一部のリソースを一覧表示するには、レジストリーインスタンスの実行に使用するサービスアカウントに追加のパーミッションが必要になります。
サービスアカウント名を取得します。
service_account=$(oc get -n openshift-image-registry \ -o jsonpath='{.spec.template.spec.serviceAccountName}' deploy/image-registry)
$ service_account=$(oc get -n openshift-image-registry \ -o jsonpath='{.spec.template.spec.serviceAccountName}' deploy/image-registry)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow system:image-pruner
クラスターロールをサービスアカウントに追加します。oc adm policy add-cluster-role-to-user \ system:image-pruner -z \ ${service_account} -n openshift-image-registry
$ oc adm policy add-cluster-role-to-user \ system:image-pruner -z \ ${service_account} -n openshift-image-registry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
(オプション) プルーナーのドライランモードでの実行
削除される Blob の数を確認するには、ドライランモードでハードプルーナーを実行します。実際の変更は加えられません。
oc -n openshift-image-registry \ rsh deploy/image-registry \ /usr/bin/dockerregistry -prune=check
$ oc -n openshift-image-registry \ rsh deploy/image-registry \ /usr/bin/dockerregistry -prune=check
Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、プルーニング候補の実際のパスを取得するには、ロギングレベルを上げます。
oc -n openshift-image-registry \ rsh deploy/image-registry env REGISTRY_LOG_LEVEL=info \ /usr/bin/dockerregistry -prune=check
$ oc -n openshift-image-registry \ rsh deploy/image-registry env REGISTRY_LOG_LEVEL=info \ /usr/bin/dockerregistry -prune=check
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル (切り捨て済み)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ハードプルーニングの実行
ハードプルーニングを実行するには、
image-registry
Pod の実行中のインスタンスで以下のコマンドを実行します。oc -n openshift-image-registry \ rsh deploy/image-registry \ /usr/bin/dockerregistry -prune=delete
$ oc -n openshift-image-registry \ rsh deploy/image-registry \ /usr/bin/dockerregistry -prune=delete
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力サンプル
oc exec image-registry-3-vhndw \ -- /usr/bin/dockerregistry -prune=delete
$ oc exec image-registry-3-vhndw \ -- /usr/bin/dockerregistry -prune=delete Deleted 13374 blobs Freed up 2.835 GiB of disk space
Copy to Clipboard Copied! Toggle word wrap Toggle overflow レジストリーを読み取り/書き込みモードに戻す
プルーニングの終了後は、レジストリーを読み取り/書き込みモードに戻すことができます。
configs.imageregistry.operator.openshift.io/cluster
で、spec.readOnly
をfalse
に設定します。oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":false}}' --type=merge
$ oc patch configs.imageregistry.operator.openshift.io/cluster -p '{"spec":{"readOnly":false}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow