Как я могу перечислить и удалить изображения GCP AppEngine из командной строки? - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу удалить свои старые неиспользуемые изображения AppEngine из Google Cloud Platform, чтобы не платить за их хранение.

Я могу вручную перечислить и удалить изображения, созданные для моего проекта GCP AppEngine.с этого URL: https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID

(очевидно, замените GOOGLE_CLOUD_PROJECT_ID на соответствующий идентификатор проекта GCP.)

Есть ли способ перечислить их из командной строки?например, через gcloud?

Это не сработает так, как я ожидал:

$ gcloud compute images list --no-standard-images
Listed 0 items.

Так же не получается:

$ gcloud container images list 
Listed 0 items.
Only listing images in gcr.io/GOOGLE_CLOUD_PROJECT_ID. Use --repository to list images in other repositories.

Это немного больнои удалите многие из них вручную, так как каждое изображение в https://console.cloud.google.com/gcr/images/GOOGLE_CLOUD_PROJECT_ID/US/appengine находится в отдельном каталоге, в котором я должен сначала щелкнуть, чтобы выбрать изображение, а затем нажать кнопку удаления, а затем вернуться в каталог appengine иначните процесс заново для любых других изображений.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Список изображений

Благодаря ответу LundinCast я использовал us.gcr.io в качестве имени хоста и смог сделать это:

$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID
NAME
us.gcr.io/GCP_PROJECT_ID/appengine

Очевидно, AppEngine использует вложенный репозиторий:

$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine
NAME
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t162317
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t132223
us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181113t150454
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t184629
us.gcr.io/GCP_PROJECT_ID/appengine/default.20181108t205831
us.gcr.io/GCP_PROJECT_ID/appengine/DEF.20181113t163644

Это не сработало, как я ожидал:

$ gcloud container images list --repository=us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Listed 0 items.

Вместо этого я должен был сделать:

$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 
DIGEST        TAGS    TIMESTAMP
c8e3797d36b2  latest  2018-11-10T12:57:58

Удаление изображений

Согласно документации для удаления изображений возможно удаление ...

  • Изображение, идентифицированное его дайджестом
  • Изображение, идентифицированное по его тегу, и имеет несколько тегов

Удаление изображений по (неявному) тегу

Когда я пытался удалить одну версию / тег, мне отображалось приглашение:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
  Associated tags:
 - latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
This operation will delete the tags and images identified by the 
digests above.

Do you want to continue (Y/n)?  n

ERROR: (gcloud.container.images.delete) Aborted by user.

Это немного проблематично для написания скрипта или программы, которая может автоматически удалять старые изображения (хотя я мог бы перенаправить команду yes в команду gcloud container images delete IMAGE); К счастью, есть аргумент --quiet, который можно использовать:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425 --quiet
WARNING: Implicit ":latest" tag specified: us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181
  Associated tags:
 - latest
Tags:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t125425@sha256:c8e3797d36b27599c91e231afd5521e6a1283319fce5a0fd978b7cdcdb1d4181].

Итак, это сработало.

Удаление изображений по дайджесту

Попытка еще раз для другого изображения с использованием дайджест-метода удаления изображений:

$ gcloud container images list-tags us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726
DIGEST        TAGS    TIMESTAMP
4d860e73f85f  latest  2018-11-10T15:50:55

Сюрприз! Вы не можете просто использовать дайджест, как указано:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f
ERROR: (gcloud.container.images.delete) [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@4d860e73f85f] digest must be of the form "sha256:<digest>".

Это было немного странно (есть только один тег, «последний», и он даже не отображается в ошибке):

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f
ERROR: Tags:
ERROR: (gcloud.container.images.delete) This operation will implicitly delete the tags listed above. Please manually remove with the `untag` command or re-run with --force-delete-tags to confirm.

ОК, давайте использовать --force-delete-tags:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
  Associated tags:
 - latest
This operation will delete the tags and images identified by the digests above.

Do you want to continue (Y/n)?  n

ERROR: (gcloud.container.images.delete) Aborted by user.

Как и раньше, давайте используем --quiet, чтобы не показывать подсказку:

$ gcloud container images delete us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85f --force-delete-tags --quiet
Digests:
- us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542
  Associated tags:
 - latest
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726:latest].
Deleted [us.gcr.io/GCP_PROJECT_ID/appengine/ABC.20181110t154726@sha256:4d860e73f85fdddb485e85dc867653e3e6095a5225f4f670200c98ede10fb542].

Итак, удаление по дайджесту требует более подробной командной строки.

0 голосов
/ 14 ноября 2018

Ссылка на предоставленную вами консоль разработчика относится к Реестру контейнеров , где хранятся образы контейнеров, в том числе созданные во время развертываний App Engine Flexible.

Вы можете перечислить эти изображения по местоположению, используя следующую команду gcloud:

gcloud container images list --repository=[HOSTNAME]/[PROJECT-ID]

где [HOSTNAME] - один из четырех вариантов: gcr.io, us.gcr.io, eu.gcr.io или asia.gcr.io.

Затем вы можете удалить изображения, используя следующую команду:

gcloud container images delete [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]

Подробную информацию об этом вы найдете в онлайн-документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...