執行先佔 VM

本頁面提供 Google Kubernetes Engine 中先佔 VM 支援的總覽。

總覽

先佔 VM 是 Google Compute Engine VM 執行個體,生命週期最長可達 24 小時,但不提供可用性保證。與標準 Compute Engine VM 相比,先佔 VM 的價格較為低廉,並提供相同的機器類型和選項。

您可以在 GKE 叢集或節點集區中使用先佔 VM 來執行比較不會受到先佔 VM 的暫時性和無保證性質影響的批次或容錯工作。

如要進一步瞭解先佔 VM,請參閱 Compute Engine 說明文件中的先佔 VM

先佔 VM 的運作方式

GKE 叢集或節點集區建立 Compute Engine VM 時,VM 的行為類似代管執行個體群組。GKE 中的先佔 VM 必須遵守與代管執行個體群組中的先佔執行個體相同的限制。先佔執行個體會在收到先佔通知的 30 秒後終止。

此外,這些先佔 VM 會加上 Kubernetes 標籤 cloud.google.com/gke-preemptible=true。您可以在 nodeSelector 欄位中使用 Kubernetes 標籤,以便將 Pod 排程到特定節點

以下是篩選先佔 VM 的選取器範例:

apiVersion: v1
kind: Pod
spec:
  nodeSelector:
    cloud.google.com/gke-preemptible: "true"

最佳做法

由於先佔 VM 不提供可用性保證,因此設計系統時,您應該假設任何或所有 Compute Engine 執行個體都可能會遭到先佔而無法使用。我們也無法保證這些新的執行個體何時可供使用。

此外,我們也無法保證在先佔 VM 上執行的 Pod 一律可以正常關閉。

如要確保系統在無法使用先佔 VM 的情況下仍能處理您的工作或工作負載,您可以在叢集中同時建立非先佔與先佔節點集區。

建立具有先佔 VM 的叢集或節點集區

您可以使用 gcloud 指令列工具或 GCP 主控台來建立具有先佔 VM 的叢集或節點集區。

gcloud

您可以指定 --preemptible 標記來建立具有先佔 VM 的叢集或節點集區。

如要建立具有先佔 VM 的叢集,請執行下列指令:

gcloud beta container clusters create [CLUSTER_NAME] --preemptible

其中 [COMPUTE_ZONE] 是叢集的運算區域

若要建立具有先佔 VM 的節點集區:

gcloud beta container node-pools create [POOL_NAME] --preemptible \
--cluster [CLUSTER_NAME]

主控台

  1. 造訪 GCP 主控台的 Google Kubernetes Engine 選單。

    造訪 Google Kubernetes Engine 選單

  2. 按一下 [建立叢集]

  3. 選擇 [標準叢集] 範本,或者為您的工作負載選擇適當的範本

  4. 視需要設定您的叢集,然後按一下您要修改的節點集區的 [進階編輯功能]

  5. 在「先佔節點」區段中,選取 [啟用先佔節點]

  6. 按一下 [儲存] 以關閉「進階編輯」重疊視窗。

  7. 按一下 [建立]。

使用節點 taint 以避免排程到先佔 VM 節點

根據您的用途而定,您可能想避免將重要的 Pod 排程到先佔 VM 節點上。在這種情況下,您可以使用節點 taint 和容許條件,來避免將 Pod 排程到具有先佔 VM 的節點上。

為先佔 VM 新增節點 taint

若要為具有先佔 VM 的節點新增節點 Taint,請執行下列指令:

kubectl taint nodes [NODE_NAME] cloud.google.com/gke-preemptible="true":NoSchedule

現在,只有可容忍節點 Taint 的 Pod 會排程到節點。

新增 Pod 的容許條件

如要為您的 Pod 新增相關容許條件,請將以下內容加到 Pod 規格,或物件的 Pod 範本規格中:

tolerations:
- key: cloud.google.com/gke-preemptible
  operator: Equal
  value: "true"
  effect: NoSchedule

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件