健康檢查
健康檢查告訴 Zenavo 實例何時可以接收流量。部署時,新實例在舊實例旁邊啟動,只有新實例透過檢查後才切換流量,這就是零停機發布的原理。
在 服務 → 設定 → 健康檢查 中選擇檢查方式:
- 連接埠(預設):Zenavo 檢查服務的第一個 TCP 或 HTTP 連接埠能否接受連線,每 10 秒一次,逾時 5 秒,允許失敗 3 次。沒有這類連接埠的服務不做檢查,啟動後即視為就緒。
- HTTP:Zenavo 在服務的第一個 TCP 或 HTTP 連接埠(或你指定的連接埠)上請求一個路徑,例如
/healthz。任何 2xx 或 3xx 回應都表示就緒。請求從叢集內發出,所以映像檔中不需要curl或wget。這是 Web 應用的最佳選擇。 - 指令:在容器內執行的指令,例如
pg_isready -U postgres;退出碼為 0 表示就緒。指令不經過 shell 執行,所以需要&&、|或$VARIABLES時請寫成sh -c "…"。從控制台新增的資料庫和許多模板都自帶這種檢查。
HTTP 和指令檢查的時間參數可以調整:兩次檢查之間的間隔、單次檢查的逾時、實例被判定為不健康之前允許的失敗次數(預設 6),以及容器啟動後的啟動等待時間(預設 10 秒)。啟動較慢的應用,例如 Java 應用或啟動時執行資料庫遷移的應用,請調大啟動等待時間。
在 manifest 中:
json
"healthcheck": { "http": { "path": "/healthz" }, "interval": 10, "timeout": 5, "retries": 6, "start_period": 10 }或者用 "command": ["pg_isready", "-U", "postgres"] 代替 "http"。
檢查失敗時
- 部署期間: 如果新實例持續無法透過檢查,一旦可以確定,部署就會失敗,並給出最後一次檢查的原因(例如
HTTP probe failed with statuscode: 404)和實例最新的日誌。舊實例繼續提供服務。 - 部署之後: 不再透過檢查的實例不會再接收流量,服務顯示為 不健康。Zenavo 不會因為檢查失敗而重啟它;請檢視日誌,然後重新部署或重啟。
崩潰限制
如果服務反覆崩潰,Zenavo 可以在重啟一定次數(即崩潰限制)後暫停它,而不是無限重啟。服務隨後會顯示提示;請檢視日誌,然後恢復服務或部署修復。