Postmortem: Imagem Docker não encontrada
Relatório de incidente para a interrupção do serviço Logto em 2023-12-17 devido à perda da imagem Docker de produção.
Resumo
Experimentámos uma interrupção de serviço em 2023-12-17 devido à perda da imagem Docker de produção do Logto.
- Tempo do incidente: 2023-12-17 03:56:00 UTC
- Duração do incidente: 18 minutos
- Impacto no serviço: Serviço cloud Logto e serviço core Logto estiveram indisponíveis durante o incidente.
- Nível de impacto: Crítico
- Causa raiz: A imagem Docker de produção do Logto foi eliminada por engano. Falha ao buscar a imagem no GitHub Container Registry.
Cronologia
Tempo | Evento |
---|---|
Início de 2023-12-17 (Hora específica desconhecida) | Fluxo de trabalho de retenção de imagens GitHub automatizado do Logto sendo executado. As imagens de produção logto e logto-cloud foram eliminadas por engano. |
2023-12-17 03:56:00 UTC | Serviço cloud Logto e serviço core Logto ficaram indisponíveis. Incidente detetado pelo nosso sistema de monitorização. |
2023-12-17 04:03:00 UTC | Incidente reconhecido pelo nosso engenheiro de plantão. |
2023-12-17 04:10:00 UTC | Novo deployment do serviço cloud Logto e serviço core Logto iniciado com a imagem mais recente. |
2023-12-17 04:15:00 UTC | Serviço cloud Logto e serviço core Logto ficaram disponíveis. Incidente resolvido automaticamente. |
Análise do incidente
O que aconteceu
As imagens de produção do serviço Logto foram eliminadas pelo nosso fluxo de trabalho de retenção de imagens GitHub automatizado. O serviço cloud falhou ao buscar a imagem no GitHub Container Registry e ficou indisponível.
Porque aconteceu
O fluxo de trabalho automatizado de retenção de imagens GitHub eliminou as imagens de produção por engano. O fluxo de trabalho foi desenhado para eliminar todas as imagens legadas sem tag que têm mais de 3 dias.
Marcámos as imagens de produção com a tag prod
para identificá-las como imagens de produção. Sempre que uma implementação de produção é iniciada, uma nova imagem com a tag prod
será construída e enviada para o GitHub Container Registry. A tag prod
será removida da imagem antiga após a nova imagem ser construída e enviada com sucesso. A imagem antiga ficará sem tag e será eliminada pelo fluxo de trabalho automatizado de retenção de imagens GitHub.
A imagem do serviço Logto foi construída para suportar múltiplas arquiteturas. A imagem foi construída com buildx
e enviada para o GitHub Container Registry com o parâmetro --platform
. Todas as tags foram aplicadas à lista de manifestos raiz. A tag prod
também foi aplicada à lista de manifestos raiz. Todas as subimagens listadas sob a lista de manifestos multi-arquitetura permanecem sem tag.
Falta de revisão cuidadosa da estrutura de tag e da lista de manifestos da imagem Docker, configurámos simplesmente o fluxo de trabalho automatizado de retenção de imagens GitHub para eliminar todas as imagens sem tag. O fluxo de trabalho eliminou todas as subimagens listadas sob a lista de manifestos multi-arquitetura.
Impacto
Este incidente causou a indisponibilidade do serviço cloud Logto e do serviço core Logto por cerca de 18 minutos. Os utilizadores finais não conseguiram fazer login no Logto e acessar as suas aplicações cliente. O portal de administração cloud do Logto também ficou indisponível durante o incidente.
Resolução
Parámos o fluxo de trabalho automatizado de retenção de imagens GitHub e implementámos uma nova imagem com a tag prod
no GitHub Container Registry. A nova imagem foi buscada com sucesso pelo serviço cloud Logto e pelo serviço core Logto. O serviço ficou disponível novamente.
Lições aprendidas
- Nunca publique um fluxo de trabalho sem revisão e testes cuidadosos no ambiente de produção.
- Faça uma execução a seco de qualquer trabalho de eliminação de recursos antes de executá-lo.
- Sempre tenha um plano de backup para o ambiente de produção.
- Defina cuidadosamente uma nova política de retenção de imagens.
Medidas corretivas e preventivas
- ✅ Pare imediatamente o fluxo de trabalho automatizado de retenção de imagens GitHub.