事後分析:找不到 Docker 映像檔
2023-12-17 日 Logto 服務中斷事件報告,原因是生產環境 Docker 映像檔丟失。
2023-12-17 日 Logto 服務中斷事件報告,原因是生產環境 Docker 映像檔丟失。
我們在 2023-12-17 因為 Logto 生產環境 Docker 映像檔丟失,經歷了一次服務中斷。
| 時間 | 事件 |
|---|---|
| 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 核心服務成功獲取了新映像。服務再次變得可用。