web-dev-qa-db-ja.com

古い未使用のKubernetesイメージ/タグをクリーンアップする方法は?

deploymentと短期間のロールバックを簡略化するには、-Kubernetesにデプロイする新しいバージョンごとに新しいDockerイメージタグを使用すると便利です。クリーンアップしないと、これは古いイメージ:タグが永久に保持されることを意味します。

どのようにすればKubernetesコンテナで使用されているすべてのimage:tagをリストするになるので、古くて使用されていない古いimage:tagをすべて検索してDocker Registry

私の目標は、理想的にはGoogle Container Engine(GKE)が未使用のイメージをGoogle Container Registry

15
Wernight

別のアプローチとして、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%

高/低しきい値を調整して、適切な間隔で収集を強制することができます。

12
Ryan Cox

最近のバージョンのkubeletでは、以下のオプションを-image-gc-high-thresholdおよび-imageとして使用します-gc-low-thresholdは廃止予定です:

--eviction-hard
--eviction-soft

詳細はこちら:

3
Costas

DaemonSetで実行されている docker-cleanup コンテナを使用できます。これにより、クラスター内の各ノードで未使用のイメージがクリーンアップされます。

2
wolfson109

Kubernetesクラスターで使用されているすべてのイメージのリストを取得するには、シェルスクリプトを実行します。

for image in $(kubectl get pods --all-namespaces --output=jsonpath='{..image}')
do
    echo $image
done

ただし、現在Google Container Registryから単に画像を削除する方法はないようです( Google Container Registryでプッシュされた画像を削除する方法 を参照)

1
Wernight

そのようなメンテナンスを行うための文書化されたアプローチがあるかどうかはわかりません。ただし、Openshift Originは、Dockerイメージをプルーニングし、レジストリーと対話して古いBLOBを削除することで対処しようとします

Originに関連して実装しました。 ソースコード そのためにgithubにあります

0
brooding_goat