前面提到為了與朋友連線Steam上的遊戲Project Zomboid,我在GCP上架了一台VM來跑伺服器。這台VM是開e2-medium等級,不間斷跑一個月大概費用是$29.32美金(約$856台幣),窮者如我,這筆錢還是得省,與AI小老師討論後,大抵討論出兩個方式可以使用:
- 設定排程開關機,節省凌晨沒有連線需求的機器運行費用
- 將機器類型改為Spot VM(搶占式虛擬機)
第一個解決方案,因為在凌晨時打遊戲好像還滿稀鬆平常的,就放棄考慮。接著就著手進行第二個解決方案的佈建:使用Spot VM。
用Spot VM能省多少錢?
我們用Google Cloud's pricing calculator試算,以e2-medium為例,一般機器一個月$29.32美金,Spot VM則是一個月$10.78美元。價差了一倍不止。另外要注意的是Spot VM的價錢是浮動的,要再依據當月GCP的資源狀況決定。

什麼是Spot VM?
看看AI小老師給的小綱要:
- Spot VM 是 GCP 利用「過剩運算資源」以大幅折扣價格提供的虛擬機。
- 與一般 VM 相比,Spot VM 的價格可低至 60%~91% 折扣,依據機型與資源供需而異。
- 這類 VM 沒有 SLA(服務水準協議)保證,且可能隨時被 GCP 回收終止,尤其當資源緊張時。
- Spot VM 最多可運行 24 小時,但實際可能更短,完全取決於 GCP 當下的資源狀況。
看起來就是拿別人用剩的零碎運算資源來使用,實際上這類型的機器對於遊戲伺服器來說,並不是適合的應用。但第一:我窮;第二:這也不是正式提供的對外服務,僅是朋友之間偶爾連線共玩用罷了。也當作是技術研究,實際跑一次應用情境收穫最大嘛。
如何部署Spot VM?
我們等等會需要設定兩個東西:執行個體範本、執行個體群組。中文聽起來超繞口的,英文比較好理解,執行個體範本是Instance Template,執行個體群組是Instance Group。那Instance是什麼呢?就是我們常常在開的VM本人了。
- 執行個體範本(Instance Template):預先定義 VM 設定的藍圖,用於自動化、標準化建立執行個體。大抵上就是每次開VM要填的資料都能在定義成一個模板,往後開VM都以這個模板為基準。
- 執行個體群組(Instance Group):一組共用相同設定的 VM 執行個體,方便統一管理與自動擴展。
他們之間的關係是:我們用Instance Template來定義每次要開的VM的規格內容;再用Instance Group來管理要開幾台機器、什麼情況要加機器、這些機器故障了要怎麼處理?
Spot VM設定流程
我的目標是:只開一台VM,不需要幫我擴展機器。跟一般MIG的應用情境可能不太一樣,什麼叫一般的應用情境呢?比如說架設對外的網站,但怕因為流量過大網站爆掉,因此設定當流量過高導致機器負載過大時,自動再開一台機器來服務使用者,諸如此類。
下面就依照我的需求來跑一次流程。
- 到GCP的Compute Engine內選擇 執行個體群組,選擇 建立執行個體群組。
- 選擇要部署的位置,我們希望從台灣連線遊戲可以比較順,因此就放在台灣的區域。

- 設定擴展VM數量的限制。對我來說是沒有作用的設定,對一般的情境來說,就是設定在最低負載狀況時想要維持多少數量的機器在運作,而負載量爆炸時,容許最高開到多少台機器。上限是很重要的設定,畢竟開越多台機器花的錢就越多。

- 設定負載達哪個門檻時,自動擴展機器。我用不到。

- 來設定執行個體範本,我們可以在相同頁面的Instance template選項來建立新的執行個體範本,

- 選擇位置、機器等級,在佈建模型選擇Spot。這大概是最關鍵的一步了。

- 為了怕機器在重開期間外部IP會變動,也可以先到GCP的虛擬私有雲網路下設定一個靜態IP。然後在網路介面中外部IPv4位址的地方,選擇剛剛設定的靜態IP。


- 接著送出設定就建立完成了,回到VM執行個體的頁面就能看到新的VM長出來了。

補充一些事情
MIG的設定不難,另外想補充的是對於我的應用來說,還需要:
- 將伺服器執行程序設定為服務,並讓OS在開機時就執行
- 確認服務在Stop時,有妥善儲存遊戲內容
- 上面有提到的設定靜態IP,保證每次連取的IP相同
以前在公司是使用k8s部署,概念相同,但如果應用相對較小,想節省成本的話,傳統的老方法還是頗能打的。