Gcp Preemptible Instance Speficication
先占虛擬機終止流程 (Preemption process) 子曰:未知生焉知死。但做工程師要反過來,考量最差情形,也就是要知道應用可能如何死去。不知道應用可能怎麼死,別說你知道應用活得好好的,大概想表達這麼意思。 這對先占虛擬機來說特別重要,一般應用面對的機器故障或是機器終止,在使用先占西你幾的狀況下,變成每日的必然,因此,需要對應用的終止情境,與終止流程有更精細的掌控。如同前幾篇所說的,先占虛擬機會被公有雲收回,但收回的時候不會突然機器就 ben 不見,會有一個固定的流程。 如果你的應用已經帶有可容錯的機制,能夠承受機器突然變不見,服務還好好的,仍然要花時間理解這邊的流程,藉此精算每天虛擬機的終止與替換:應用會有什麼反應,會產生多少衝擊,稍後可以量化服務的影響。例如 應用重啟初始化時 cpu memory 突然拉高 承受節點錯誤後的復原流程,需要消耗額外算力。例如需要從上個 checkpoint 接續做,需要去讀取資料造成 IO,或是資料需要做 rebalance …等等 如果你的應用需要有 graceful shutdown 的機制,那你務必要細心理解這邊的步驟。並仔細安排安全下樁的步驟。又或是無法保證在先占虛擬機回收的作業時限內,完成優雅終止,需要考慮其他可能的實作解法。 這邊有幾個面向要注意 GCP 如何終止先占節點 GCP 移除節點對 GKE 、以及執行中應用的影響 GKE 集群如何應對的節點失效 GCP 自動調度補足新的先占節點 GKE 集群如何應對節點補足 三個重點 先占虛擬機終止對集群的影響 Pod 隨之終止對應用的影響,是否能夠優雅終止 有沒有方法可以避免上面兩者的影響 劇透一下:有的,有一些招式可以處理。讓我們繼續看下去。 GCP 如何終止虛擬機 先占虛擬機的硬體終止步驟與一般隨選虛擬機相同,所以我們要先理解虛擬機的停止流程 這裡指的終止 (Stop) 是虛擬機生命週期 的 RUNNING -> instances.stop() -> STOPPING -> TERMINATED 的步驟。 instances.stop() ACPI shutdown OS 會進行 shutdown 流程,並嘗試執行各個服務的終止流程,以安全的終止服務。如果虛擬機有設定Shtudown Script 會在這步驟處理 等待至少 90 秒,讓 OS 完成終止的流程 逾時的終止流程,GCP 會直接強制終止,就算 shutdown script 還沒跑完 GCP 不保證終止時限的時間,官方建議不要寫重要的依賴腳本在終止時限內 虛擬機變成 TERMINATED 狀態 GCP 如何終止先占虛擬機 與隨選虛擬機不同 ...