事後分析:找不到 Docker 映像檔
2023-12-17 日 Logto 服務中斷事件報告,原因是生產環境 Docker 映像檔丟失。
總結
我們在 2023-12-17 因為 Logto 生產環境 Docker 映像檔丟失,經歷了一次服務中斷。
- 事件時間:2023-12-17 03:56:00 UTC
- 事件持續時間:18 分鐘
- 服務影響:事件期間,Logto 雲端服務和 Logto 核心服務無法使用。
- 影響等級:嚴重
- 根本原因:Logto 生產環境 docker 映像檔被錯誤刪除。從 GitHub Container Registry 獲取映像失敗。
時間軸
時間 | 事件 |
---|---|
2023-12-17 早些時候(具體時間不詳) | Logto 自動化 GitHub 映像保留工作流程執行。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 核心服務恢復可用。事件自動解決。 |
事件分析
事件經過
我們的自動化 GitHub 映像保留工作流程錯誤刪除了 Logto 服務生產映像。雲端服務無法從 GitHub Container Registry 獲取映像而變得無法使用。
事件原因
自動化 GitHub 映像保留工作流程錯誤刪除了生產映像。該工作流程的設計目的是刪除所有標籤遺失超過 3 天的舊映像。
我們用 prod
標籤標識生產映像。每當觸發生產部署時,會建立一個帶有 prod
標籤的新映像並推送到 GitHub Container Registry。新映像成功建立並推送後,舊映像的 prod
標籤會被移除。舊映像會變成無標籤,然後被自動化 GitHub 映像保留工作流程刪除。
Logto 服務映像建立用於支持多重架構。該映像使用 buildx
建立,並用 --platform
標誌推送到 GitHub Container Registry。所有標籤都應用在主目錄清單中。prod
標籤也被應用在主目錄清單中。多重架構清單下的所有子映像都保持無標籤。
由於缺乏對 Docker 映像的標籤和清單結構的仔細審查,我們簡單地配置了自動化 GitHub 映像保留工作流程來刪除所有無標籤的映像。結果,該工作流程刪除了多重架構清單下的所有子映像。
影響
此事件導致 Logto 雲端服務和 Logto 核心服務大約 18 分鐘無法使用。終端用戶無法登錄到 Logto 並訪問其客戶端應用。在事件期間,Logto 雲端管理門戶也無法使用。
解決方案
我們已經停止了自動化 GitHub 映像保留工作流程,並部署了一個帶有 prod
標籤的新映像到 GitHub Container Registry。Logto 雲端服務和 Logto 核心服務成功獲取了新映像。服務再次變得可用。
經驗教訓
- 絕不要在未充分審查和測試的情況下,將工作流程發布到生產環境。
- 在執行資源刪除工作前,必須進行試驗運行。
- 永遠要有一個生產環境的備份計畫。
- 仔細定義新的映像保留政策。
矯正和預防措施
- ✅ 立即停止自動化 GitHub 映像保留工作流程。