はじめに
Google Container Registryにおいて、適当に並列化してイメージ削除するようなツール作ってみました。
経緯
Google Container Registryでタグ無しの不要なイメージを精神衛生上消したいな…と思った時、コンソール画面から行うと・・・。
10件以上まとめて行うとほぼ確実に、下記のように
1つ以上の選択したイメージを削除できませんでした。
と表示されていくつかの削除に失敗します。
じゃあシェルから下記のように実行すると、安定して削除できるけれども1つのイメージ削除に、5秒くらいかかり、 ものすごく遅い。
# get image list
gcloud container images list-tags asia.gcr.io/{project-id}/${image-name} --filter="NOT tags:* AND timestamp.datetime < '2018-06-01'"
# delete image
gcloud container images delete asia.gcr.io/{project-id}/${image-name}@sha256:{digest} --force-delete-tags --quiet
それじゃ並列化して削除すればいいじゃん!って事でツール作ってみました。
ツール
できたもの
削除対象の確認
$ java -jar gcr-garbage-collect-0.0.1-SNAPSHOT.jar --dry-run=true
削除実行
$ java -jar gcr-garbage-collect-0.0.1-SNAPSHOT.jar --dry-run=false
特定のイメージだけ削除
java -jar gcr-garbage-collect-0.0.1-SNAPSHOT.jar --gcloud.container.image=asia.gcr.io/{gcp-project-id}/{image-name}
並列数の変更
$ java -jar gcr-garbage-collect-0.0.1-SNAPSHOT.jar --parallelism=16
作成に関して
- container registryに対するAPIが、Googleドキュメント見てもない…。仕方がないのでgcloud直接実行形式にしてます。
- windows環境では、application.yaml、もしくは実行時引数として
--gcloud.command="C:/Program Files (x86)/Google/Cloud SDK/google-cloud-sdk/bin/gcloud.cmd"
等指定してください。
その他
- 久々にProcessBuilder使ったけど、OS毎による
<
や、"
の扱い、やっぱ吸収してくれないのね。 - docker image化しようと思ったけど、gcloudの認証周りめんどくさいし、やめました。
- どれくらい早くなったかなーと思って比較しようと思いましたが、そもそも速度図っていないのでやめました。
- 精神衛生上だけの問題で削除してます。別に古いのが残っていたとしてもたいして実害無いです。(GCSの料金も気になるほどじゃないです )