Анализ: Docker образ не найден
Отчет о происшествии, связанный с отключением сервиса Logto 2023-12-17 из-за утраты Docker образа для производства.
Резюме
Мы столкнулись с отключением сервиса 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.