部署流程
每個服務獨立部署。服務上的 部署(或 重新部署)會建置或拉取這個服務,並以當前設定重啟它;專案中的其他服務保持原樣執行。新增服務時會自動部署它,網路設定的修改會重新部署對應的服務。
要一次發布所有服務(例如修改了好幾個之後),使用專案 設定 中的 全部部署。全部部署還會移除你從專案中刪除的服務。
步驟
每個服務會經歷以下狀態,顯示在它的概覽和側邊欄中:
| 狀態 | 正在發生什麼 |
|---|---|
| 等待中 | 在本次部署中排隊 |
| 建置中 | Git 服務正在 Zenavo 的建置機上建置 |
| 部署中 | 正在把 Kubernetes 物件應用到伺服器 |
| 啟動中 | 容器正在啟動,等待透過健康檢查 |
| 執行中 | 所有實例都已就緒 |
| 失敗 / 已崩潰 | 建置或發布失敗,或者容器反覆退出。開啟 日誌 檢視原因。 |
- 建置。 Git 服務會被複製並建置(建置方案),映像檔存入 Zenavo 的映像檔儲存區,每個服務一個儲存庫,伺服器從這裡拉取(中國大陸的伺服器從上海的副本拉取)。映像檔服務會被解析為 digest,所以回滾時執行的是完全相同的映像檔。
- 應用。 套用服務設定;全部部署時,服務按相依順序套用,每個服務等待它的依賴就緒。
- 發布。 沒有儲存卷的服務零停機更新:新實例必須健康之後,舊實例才會停止。有儲存卷的服務先停止再啟動,確保不會有兩個實例同時寫同一份資料。
- 初始化。 如果服務有初始化指令(來自模板),會在服務啟動前,用相同的映像檔、變數和儲存卷在一個任務中執行一次。
建置佇列
Git 建置在 Zenavo 的建置機上執行,所有團隊共享。一個團隊同時執行的建置數取決於它的方案(見用量與帳單);更多的建置會等待,日誌中會說明。
建置機繁忙時,空出來的建置機會分給方案最高的等待中的建置:Team、Pro、Dev、Free 依次排列,同一方案內先到先得。等待滿 10 分鐘的建置無論方案都會排到下一個,所以不會有建置等太久。部署 Docker 映像檔或資料庫不需要建置,也不會在這裡排隊。
部署時 Zenavo 重新啟動
Zenavo 的控制面偶爾會重新啟動,例如在更新時。進行中的部署會從中斷的地方繼續,日誌裡會寫明(Control plane restarted; resuming from …):
- 建置時: 部署重新排隊,再建置一次。
- 建置完成後: 直接部署已建置好的映像,不再重新建置。
- 發布時: 伺服器會自己把發布做完。Zenavo 只套用還沒輪到的服務,等其餘服務就緒,然後照常把部署標記為成功或失敗,並通知你。
如果當時某個服務的初始化命令(例如資料庫遷移)正在執行,Zenavo 不會中止它,也不會再執行一次:部署會被標記為已中斷,方便你確認命令的結果後再重新部署。一次部署最多在 2 次重新啟動後繼續,第 3 次時同樣標記為已中斷。其他操作(如備份、搬移專案)不會自動重做,而是標記為已中斷,由你檢查。
日誌
每次部署的輸出在 日誌 → 建置日誌 中,執行期間和結束後都可以檢視。詳見日誌。