Реестр контейнеров GCP построен поверх облачного хранилища GCP, и там можно установить довольно сложные политики хранения.
Однако в реестре контейнеров такой функциональности нет, и поскольку нет разделения между изображениями в хранилище (все имена файлов изображений являются ша-хешами и находятся в одном каталоге в одном сегменте), нельзя, например, установить политику сохранения только последние пять версий одного изображения.
Кто-нибудь знает, можно ли установить более сложные политики хранения для изображений в GCP и как это делать?
Похоже, что в настоящее время нет возможности добавить политики хранения в реестр контейнеров. Однако удаление лишних изображений можно автоматизировать с помощью gcloud. Вот сценарий, который я написал, который можно использовать в качестве задания cron: он выполняет итерацию по изображениям и удаляет все, кроме пяти новейших версий изображения.
#!/bin/bash
for image_name in $(gcloud container images list); do
for digest in $(gcloud container images list-tags $image_name --format=json | awk '/digest/{ print $2 }' | sed -e 's/^"//' -e 's/.\{2\}$//' | tail -n +6); do
gcloud container images -q delete $image_name@$digest;
done;
done;
Количество сохраненных изображений можно изменить, изменив tail
's -n параметр, значение равно + (N + 1), N - количество изображений, которые нужно сохранить.
Я предоставлю спецификацию Kubernetes CronJob позже.
РЕДАКТИРОВАТЬ: вот инструмент, который я сделал https://bitbucket.org/Fleuri/containerretention. Не стесняйтесь использовать!