執行個體生命週期
執行個體任何時候都恰好處於八種狀態中的一種。它處於哪一種狀態決定了你在意的三件事:你能不能連上它、它是不是正在對你計費,以及有哪些操作可用。
狀態機
正常路徑是 creating → running → stopping → stopped → starting → running。拆除一律是 destroying → destroyed,而且可以從 running、stopped 或 error 開始。
沒有其他合法的轉換。要求目前狀態不允許的動作 — 啟動一個已經在執行的執行個體、停止一個還在建立中的執行個體 — 會被拒絕,執行個體維持原狀。
每一種狀態
| 狀態 | 過渡中 | 計費 | 代表的意義 |
|---|---|---|---|
creating | 是 | 無 | 切片已保留,你的工作負載正在第一次啟動。 |
starting | 是 | 無 | 已停止的執行個體正在同一台機器上、以同一顆硬碟重新啟動。 |
running | 否 | GPU,按秒 | 工作負載已就緒。SSH、JupyterLab 與你發布的連接埠都連得上。 |
stopping | 是 | 無 | 容器正在關閉。你的硬碟會保留。 |
stopped | 否 | 硬碟,每 GB 每小時 | 沒有任何東西在執行。硬碟與 GPU 插槽仍為你保留。 |
destroying | 是 | 無 | 容器與硬碟正在拆除。 |
destroyed | 否 | 無 | 終點。硬碟已消失,報價回到市集上。 |
error | 否 | 無 | 執行個體無法啟動。詳見下文。 |
過渡狀態是平台正在積極處理中的那四種;主控台會用閃動的徽章顯示它們,並在進行期間更頻繁地重新整理。它們會自行完成 — 沒有東西要按,也沒有動作需要重試。
非過渡狀態是穩定的。執行個體會停在 running、stopped、destroyed 或 error,直到你或計費系統讓它移動。
每個轉換的成因
| 轉換 | 觸發條件 |
|---|---|
→ creating | 你進行部署:以一則報價、一個範本與一個硬碟大小呼叫 POST /v1/instances。 |
creating/starting → running | 工作負載回報自己已就緒。GPU 計量從這裡開始,而不是在部署時。 |
creating/starting → error | 工作負載無法啟動。 |
running → stopping | 你停止它,或你的餘額到達 $0。 |
stopping → stopped | 關閉完成。硬碟計量從這裡開始。 |
stopped → starting | 你啟動它。需要餘額為正。 |
running/stopped/error → destroying | 你銷毀它,或你的餘額到達 −$5。 |
destroying → destroyed | 拆除完成。硬碟已刪除,報價已釋出。 |
其中兩個觸發條件不是你發動的。組織餘額歸零時,執行中的執行個體會自動停止;如果餘額繼續掉到 −$5,所有東西都會被銷毀。兩者都在自動停止與自動銷毀中說明。
部署與啟動都需要餘額大於零。停止與銷毀從來不需要 — 不論餘額是多少,你隨時都能把東西關掉。
計費跟著狀態走
費用依執行個體實際所處狀態的費率結算,而且每次狀態變更都會在變更生效前先結清先前欠的部分。GPU 計量只在 running 時運作。硬碟計量只在 stopped 時運作。四種過渡狀態、error 與 destroyed 都不計費。
這就是為什麼一次花兩分鐘才啟動完成的部署不會為那兩分鐘計費,也是為什麼已停止的執行個體仍會每分鐘在你的帳本裡產生一筆費用。
「error」代表什麼
error 表示平台無法讓你的工作負載啟動 — 映像檔拉取失敗、容器拒絕啟動,或主機在啟動過程中停止回報。
由此可以推出四件事:
- 不會對你計費。 在
error狀態下計量是關閉的,執行個體停在那裡也不會累計任何費用。 - 它不會自己修好。 沒有自動重試。執行個體會停在
error,直到你採取行動。 - 報價仍被佔住。 在執行個體進入
destroyed之前,切片不會釋回市集。 - 銷毀是唯一的動作。 你不能啟動、停止或修復一個出錯的執行個體。銷毀它、修好原因,然後重新部署。
常見原因出在範本而不是硬體:不存在的映像檔名稱或標籤,或是私有登錄庫的憑證有誤。映像檔不是以 Superheat 基礎映像檔為基底的 ssh 或 jupyter 範本也啟動不了,因為這兩種模式依賴基礎映像檔的進入點。
從未進入 running 的執行個體沒有日誌可讀,所以請從範本而不是從執行個體來除錯。疑難排解會逐一說明各種具體的失敗情形。
它不花錢,但別人租不到那個切片,你自己也無法重新部署到它上面。銷毀它,讓切片回到市集上。
你在哪裡看得到狀態
執行個體頁面會列出除了已銷毀之外的所有項目。透過 API,GET /v1/instances?include_destroyed=true 可以把它們找回來。
每個執行個體頁面會以徽章顯示目前狀態、只顯示目前狀態允許的操作 — 已停止的執行個體顯示「啟動」,執行中的顯示「停止」,執行中、已停止或出錯的顯示「銷毀」 — 並在工作負載就緒後,在連線分頁顯示連線資訊。