deploymentと短期間のロールバックを簡略化するには、-Kubernetesにデプロイする新しいバージョンごとに新しいDockerイメージタグを使用すると便利です。クリーンアップしないと、これは古いイメージ:タグが永久に保持されることを意味します。
どのようにすればKubernetesコンテナで使用されているすべてのimage:tagをリストするになるので、古くて使用されていない古いimage:tagをすべて検索してDocker Registry?
私の目標は、理想的にはGoogle Container Engine(GKE)が未使用のイメージをGoogle Container Registry。
別のアプローチとして、Kubernetesに古いイメージの再生を処理させることを検討することもできます。
現在、ImageManagerは候補画像の再生を処理します。参照: ガベージコレクション
ガベージコレクションは、参照されていないイメージと未使用のコンテナーをクリーンアップするkubeletの便利な機能です。 kubeletは、コンテナのガベージコレクションを毎分実行し、画像のガベージコレクションを5分ごとに実行します。
構成は、次の2つの kublet cliパラメーター によって制御されます。
--image-gc-high-threshold=90: The percent of disk usage after which image garbage collection is always run. Default: 90%
--image-gc-low-threshold=80: The percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. Default: 80%
高/低しきい値を調整して、適切な間隔で収集を強制することができます。
最近のバージョンのkubeletでは、以下のオプションを-image-gc-high-thresholdおよび-imageとして使用します-gc-low-thresholdは廃止予定です:
--eviction-hard
--eviction-soft
詳細はこちら:
DaemonSetで実行されている docker-cleanup コンテナを使用できます。これにより、クラスター内の各ノードで未使用のイメージがクリーンアップされます。
Kubernetesクラスターで使用されているすべてのイメージのリストを取得するには、シェルスクリプトを実行します。
for image in $(kubectl get pods --all-namespaces --output=jsonpath='{..image}')
do
echo $image
done
ただし、現在Google Container Registryから単に画像を削除する方法はないようです( Google Container Registryでプッシュされた画像を削除する方法 を参照)
そのようなメンテナンスを行うための文書化されたアプローチがあるかどうかはわかりません。ただし、Openshift Originは、Dockerイメージをプルーニングし、レジストリーと対話して古いBLOBを削除することで対処しようとします
Originに関連して実装しました。 ソースコード そのためにgithubにあります