Кратко

  • При отправке нового образа с существующим тегом DigitalOcean обновляет тег, но прежний образ остаётся доступным по дайджесту и занимает место.
  • Образы без тегов учитываются в квоте. Удалить имя, удалить манифест и собрать слои, на которые больше нет ссылок, — отдельные действия.
  • Автоматическая сборка мусора доступна в публичной предварительной версии с подключением по желанию и работает без режима только для чтения. Ручной путь включает этот режим и ожидание до пятнадцати минут перед началом сборки.

Уборку склада легко ускорить, если снимать с коробок только этикетки. Отчёт получается коротким, коробки остаются целыми, арендодатель ничего не теряет. В DigitalOcean Container Registry похожая путаница возможна без всякого злого умысла: тег уже ведёт к новой версии, а старая продолжает занимать место.

Руководство по началу работы описывает это прямо. Новый образ с уже используемым тегом меняет назначение тега. Предыдущий образ остаётся доступным по своему дайджесту и расходует хранилище. Выпуск состоялся. Выселение старого содержимого ещё не состоялось.

Иногда выселять его и не нужно. Работавшая версия может понадобиться для отката, конкретный артефакт — для расследования. Но рядом способен годами жить результат давно забытого опыта. Техническая отметка «без тега» не сообщает, какая из этих историй перед нами. Она описывает имя, а не полезность.

Один выпуск, три разных результата

Тег удобен людям и инструментам развёртывания. Дайджест обозначает конкретную версию. Разделение позволяет двигать привычное имя вперёд, сохраняя точный адрес предыдущего содержимого.

Проблема возникает, когда сообщение о выпуске проходит через несколько отделов. «Старую версию заменили» превращается в «старую версию удалили», а затем в «объём хранения сократили». Первая фраза может быть верной сама по себе. Для двух следующих нужны другие операции и подтверждения.

В тарифной документации DigitalOcean отдельно сказано, что образы без тегов входят в квоту хранения. Инструкция по очистке различает дальнейшие этапы. Удаление дайджеста удаляет связанные с ним теги. После удаления манифеста могут остаться слои, на которые больше не ссылается ни один манифест. Их требуется собрать, чтобы освободить место.

Сохранённый манифест может продолжать ссылаться на слои и после потери тега. Поэтому отсутствие тега и отсутствие ссылок — разные состояния. Если считать их одним и тем же, автоматике легко приписать работу, которую она не обязана выполнять, а бюджету — экономию, которую ещё никто не измерил.

При этом старая версия вполне может заслуживать своего места. Плата за возможность вернуться к определённому рабочему состоянию бывает разумной. Необъяснимым расход становится тогда, когда уже никто не помнит, какую именно возможность компания покупает.

Автоматический уборщик не выбирает экспонаты

DigitalOcean предлагает автоматическую сборку мусора в публичной предварительной версии. К ней нужно присоединиться и включить функцию. После этого слои без ссылок непрерывно очищаются в фоне, без перевода реестра в режим только для чтения.

Улучшение практическое: обслуживание хранилища меньше конкурирует с загрузкой новых образов за удобное время. Однако опубликованный предмет автоматизации остаётся узким — слои, потерявшие ссылки. Вопрос о том, какие старые версии компания намерена сохранить, должен решаться отдельно.

Ручная сборка предусматривает отдельную возможность удалить манифесты без тегов. Этот выбор и есть место, где решение о судьбе истории встречается с механикой очистки. Сначала компания отказывается от определённых версий. Затем система может убрать материал, который больше никому не нужен.

Возможны две противоположные ошибки. Первая — ждать, что включённая автоматика сама выселит все старые образы, хотя их слои продолжают иметь ссылки. Вторая — объявить любой манифест без тега мусором, хотя другая команда рассчитывает использовать его дайджест при откате. Одна ошибка оплачивает забывчивость, другая может уничтожить намеренно сохранённый вариант действий.

Слово «автоматически» хорошо описывает способ исполнения. В качестве политики памяти предприятия оно слишком мало.

Десять реестров не умножают лимит на десять

Тариф Professional допускает до десяти реестров, но хранилище между ними общее. Включённые 100 GiB не выдаются заново каждому реестру. Разделить проекты полезно для организации. От такого разделения сами данные легче не становятся.

Опубликованная цена Basic составляет 5 долларов в месяц с 5 GiB, Professional — 20 долларов со 100 GiB. Дополнительное хранение учитывается в конце дня и рассчитывается пропорционально дням превышения квоты в месяце. Чтобы оценить экономию, нужны фактический объём и продолжительность его хранения.

Количество удалённых тегов не заменяет эти величины. Простое сложение размеров всех старых образов тоже способно завысить результат: другие манифесты могут продолжать ссылаться на общие слои. Экономический эффект становится измеримым после того, как принято решение о хранении и действительно освобождено место.

Сохранять выбранные версии и сохранять каждую сборку навсегда — разные покупки. Вторая может появиться без совещания и бюджета, а затем расти вместе со скоростью разработки и размером артефактов. Компания думает, что держит несколько точек возврата, а на практике финансирует музей без смотрителя.

Пятнадцать минут ещё до начала

При ручной сборке реестр временно переводится в режим только для чтения. Перед началом DigitalOcean ждёт истечения ранее выданных разрешений на запись. В зависимости от момента начала последней записи ожидание может занимать до пятнадцати минут.

Это время перед сборкой, а не обещанная продолжительность всей операции. Ручной путь требует согласования с записями. Наличие автоматической предварительной версии также не доказывает, что конкретный реестр уже к ней подключён: расписание зависит от реально выбранного режима.

У отмены есть столь же конкретный предел. Документация позволяет посмотреть, сколько объектов blob было удалено и сколько места освободилось до отмены. Прекращение оставшейся работы не возвращает уже удалённый материал. Решение о том, что должно пережить уборку, требуется раньше.

Другой срок относится к незавершённым загрузкам. При включённой автоматической сборке загрузки образов, не завершившиеся за 24 часа, считаются частичными; их слои становятся кандидатами на удаление. Это условие допуска к сборке, а не точное время уничтожения и не суточный срок жизни всех готовых образов.

В журнале выпуска поэтому полезно различать начало отправки и наличие доступной версии. Намерение сохранить материал не заменяет сам материал. Особенно неприятно обнаруживать разницу в тот момент, когда версия понадобилась для восстановления.

Кто отвечает за оставленную историю

Первичная запись RIPE NCC подтверждает организационную идентичность DigitalOcean, LLC. Рассмотренные правила продукта и оплаты взяты из документов DigitalOcean. Для оценки избыточного хранения или выгоды конкретного клиента не хватает его ссылок по дайджестам, причин сохранения и замеров объёма до и после очистки.

Но распределить ответственность можно уже сейчас. Нужная для отката версия должна иметь обозначенного владельца и цель. Версия, от которой решено отказаться, должна пройти путь до подтверждённого освобождения пространства.

Хороший склад может хранить немало старого программного обеспечения. Его отличает способность объяснить, почему каждая вещь ещё здесь. Снять табличку с двери легко. Решить, кому оплачивать следующий месяц проживания, — уже управление.

Первичные источники