Gcp Preemptible Instance Kubernetes
先占虛擬機與 Kubernetes 在 GCP 使用先占虛擬機,會需要面對先占虛擬機的額外限制 資料中心會 (可預期或不可預期地) 終止先占虛擬機 先占虛擬機不能自動重啟,而是會被資料中心終止後回收 GCP 不保證有足夠的先占虛擬機 節點的終止會造成額外的維運成本,例如 管理多個節點,容忍先占虛擬機的移除,自動補充新的先占虛擬機 管理多個應用複本,節點終止時,維護整體應用的可用性 將移除節點上的應用,重新排程到其他可用節點 動態維護應用複本的服務發現 (Service Discovery) 與服務端點 (Endpoints) 意思是應用關閉重啟後,換了一個新 IP,還要能持續存取應用。舊的 IP 要主動失效 配合應用的健康檢查 (Health Check) 與可用檢查 (Readiness Check),再分配網路流量 這些需求,必須要有自動化的管理工具,是不可能人工管理的,想像你手上使用 100 個先占節點,平均每天會有 10% - 15% 的先占節點被資料中心回收,維運需要 補足被移除的 15 個節點 計算被移除的應用,補足移除的應用數量 移除失效的應用端點,補上新的應用端點 持續監控應用狀態 … 沒有自動化管理工具,看了心已累 (貓爪掩面) 我們使用 Kubernetes 協助維運自動化,在 GCP 上我們使用 GKE,除了上述提到的容器應用管理自動化外,GKE 還額外整合先占虛擬機的使用 啟用先占虛擬機的節點池 (node-pool),設定節點池的自動拓展,自動補足先占節點的數量 GKE 自動維護先占虛擬機的 labels 關於 GKE 的先占虛擬機的完整細節,請見GCP 官方文件。這份文件底下也提供了 GCP 官方建議的先占虛擬機最佳實踐 架構設計需要假設,部分或是全部的先占虛擬機都不可用的情形 Pod 不一定有時間能優雅終止 (graceful shutdown) 同時使用隨選虛擬機與先占虛擬機,以維持先占虛擬機不可用時,服務依然可用 注意節點替換時的 IP 變更 避免使用有狀態的 Pod 在先占虛擬機上 (這點稍後的文章,我們會試圖超越) 使用 node taint 來協助排程到先占虛擬機,與非先占虛擬機 總之,由於有容器自動化管理,我們才能輕易的使用先占虛擬機。 ...