Português (Portugal)
  • postmortem
  • serviço cloud
  • incidente

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.

Simeng
Simeng
Developer

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

TempoEvento
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 UTCServiç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 UTCIncidente reconhecido pelo nosso engenheiro de plantão.
2023-12-17 04:10:00 UTCNovo deployment do serviço cloud Logto e serviço core Logto iniciado com a imagem mais recente.
2023-12-17 04:15:00 UTCServiç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.

Registo do Serviço

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.