После удаления изображения из реестра контейнеров Google и загрузки другого с таким же тегом удаленное изображение по-прежнему сохраняется.
Я не знаю, является ли это предполагаемым поведением или ошибкой в GCR. В основном я пытался сделать это так:
- Создайте образ из локальных файлов с помощью Docker в Windows (образ на основе Linux).
- Перед созданием изображения я удаляю все локальные изображения с тем же именем / тегом.
- Изображение помечено как репозиторий / проект / имя:v1
- При локальном тестировании образа имеют правильные версии исполняемых файлов (Docker запускает imageID).
- Перед отправкой изображения в GCR я удаляю все изображения из GCR с одинаковым тегом / именем.
- При попытке вытащить новое изображение из GCR в пример kubernetes он извлекает первое (когда-либо) изображение, загруженное под определенным тегом.
Я хочу использовать один и тот же тег, чтобы не изменять конфигурационный файл при каждом тесте, и мне не нужно хранить предыдущие версии изображений.
1 ответ
Решение
Похоже, вы столкнулись с проблемой, описанной в https://github.com/kubernetes/kubernetes/pull/42171.
tl; dr, политика извлечения по умолчанию для kubernetes нарушена, так что вы не можете повторно использовать теги ( кроме latest
). Я считаю, что руководство сообщества k8s должно использовать "неизменяемые теги", что немного оксюморон.
У вас есть несколько вариантов:
- Переключитесь на использование
latest
тег, поскольку kubernetes жестко закодировал это в своей логике политики извлечения по умолчанию (я верю в попытку смягчить возникшую проблему). - Никогда не используйте тег повторно.
- Переключитесь на явное использование
PullAlways
ImagePullPolicy. Если вы сделаете это, вы понесете небольшие накладные расходы, так как ваш узел должен будет проверить в реестре, что тег не изменился. - Переключитесь на развертывание по дайджесту изображения с помощью
PullIfNotPresent
ImagePullPolicy. Более подробное объяснение в связях с общественностью, которые я связал, но это дает вам лучшее из обоих миров.