• анализ
  • облачный-сервис
  • инцидент

Анализ: Docker образ не найден

Отчет о происшествии, связанный с отключением сервиса Logto 2023-12-17 из-за утраты Docker образа для производства.

Simeng
Simeng
Developer

Резюме

Мы столкнулись с отключением сервиса 2023-12-17 из-за утраты Docker образа для производства Logto.

  • Время инцидента: 2023-12-17 03:56:00 UTC
  • Продолжительность инцидента: 18 минут
  • Влияние на сервис: облачный сервис Logto и основной сервис Logto были недоступны во время инцидента.
  • Уровень воздействия: Критический
  • Коренная причина: Docker образ для производства Logto был удален по ошибке. Не удалось получить образ из GitHub Container Registry.

Хронология

ВремяСобытие
Раннее время 2023-12-17 (точное время неизвестно)Автоматизированный процесс удержания изображений GitHub для Logto выполнялся. Образы для производства logto и logto-cloud были удалены по ошибке.
2023-12-17 03:56:00 UTCОблачный сервис Logto и основной сервис Logto стали недоступны. Инцидент был обнаружен нашей системой мониторинга.
2023-12-17 04:03:00 UTCИнцидент был подтвержден нашим дежурным инженером.
2023-12-17 04:10:00 UTCБыло инициировано новое развертывание облачного сервиса Logto и основного сервиса Logto с последним образом.
2023-12-17 04:15:00 UTCОблачный сервис Logto и основной сервис Logto стали доступны. Инцидент был решен автоматически.

Анализ инцидента

Что случилось

Образы для производства сервиса Logto были удалены нашим автоматизированным процессом удержания изображений GitHub. Облачный сервис не смог получить образ из GitHub Container Registry и стал недоступен.

Журнал сервиса

Почему это случилось

Автоматизированный процесс удержания изображений GitHub удалил образы для производства по ошибке. Процесс был разработан для удаления всех старых, не промаркированных, устаревших образов, которым более 3-х дней.

Мы пометили изображения для производства как prod, чтобы идентифицировать их как производственные. Когда инициируется новое развертывание, создается и отправляется в GitHub Container Registry новый образ с меткой prod. Метка prod удаляется со старого образа после успешного создания и отправки нового. Старый образ становится не промаркированным и будет удален автоматизированным процессом удержания изображений GitHub.

Образ сервиса Logto был построен для поддержки нескольких архитектур. Он был создан с использованием buildx и отправлен в GitHub Container Registry с флагом --platform. Все метки были применены к корневому списку манифестов. Метка prod также была применена к корневому списку манифестов. Все под-изображения, перечисленные в списке манифестов для нескольких архитектур, остаются не промаркированными.

Из-за отсутствия внимательного рассмотрения структуры меток и списка манифестов Docker образов, мы просто настроили автоматизированный процесс удержания изображений GitHub для удаления всех не промаркированных изображений. Процесс удалил все под-изображения, перечисленные в списке манифестов для нескольких архитектур.

Воздействие

Этот инцидент сделал облачный сервис Logto и основной сервис Logto недоступными примерно на 18 минут. Конечные пользователи не могли войти в Logto и получить доступ к своим клиентским приложениям. Портал администратора облака Logto также был недоступен во время инцидента.

Решение

Мы остановили автоматизированный процесс удержания изображений GitHub и развернули новый образ с меткой prod в GitHub Container Registry. Новый образ был успешно получен облачным сервисом Logto и основным сервисом Logto. Сервис снова стал доступен.

Извлеченные уроки

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

Корректирующие и предупреждающие меры

  • ✅ Немедленно остановить автоматизированный процесс удержания изображений GitHub.