Share via


在 Azure Red Hat OpenShift (ARO) 叢集中使用 Azure Spot 虛擬機器

本文提供必要的詳細資料,可讓您設定 Azure Red Hat OpenShift 叢集 (ARO) 以使用 Azure Spot 虛擬機器。

使用 Azure Spot 虛擬機器可讓您節省大量成本,利用未使用的容量。 在任何時候,只要 Azure 又需要這些容量,Azure 基礎結構就會收回 Azure Spot Virtual Machines。 如需 Spot 實例的詳細資訊,請參閱 Spot 虛擬機器

開始之前

開始之前,請確定您已部署 Azure Red Hat Openshift 叢集。 如果您需要 ARO 叢集,請參閱 公用叢集的 ARO 快速入門 ,或 私人叢集的私人叢集教學課程 。 針對私人和公用叢集,設定叢集以使用 Spot VM 的步驟相同。

ARO 叢集應該一律至少有三個非現成 VM 的背景工作節點,以及三個控制節點。 ARO 叢集不能有任何現成的 VM 型控制節點。

新增現成 VM

Azure Red Hat Openshift 中的機器管理是使用 MachineSet 來完成。 MachineSet 資源是電腦群組。 MachineSet 是電腦,因為 ReplicaSet 是 Pod。 如果您需要更多機器,或必須將其相應減少,您可以變更 機器集上的 [複 本] 欄位,以符合您的計算需求。 若要深入瞭解,請參閱 OpenShift MachineSet 檔

使用 Spot VM 是藉由在 MachineSet 的範本規格中新增 spotVMOptions 欄位來指定。 若要建立此 MachineSet,我們將:

  1. 取得在叢集上執行的 MachineSet 複本。
  2. 建立修改過的 MachineSet 組態。
  3. 將此 MachineSet 部署至您的叢集

首先, 使用 CLI 連線到您的 OpenShift 叢集。

oc login $apiServer -u kubeadmin -p <kubeadmin password>

接下來,您將列出叢集上的 MachineSets。 預設叢集將部署 3 部 MachineSet:

oc get machinesets -n openshift-machine-api

下列顯示此命令的範例輸出:

NAME                                    DESIRED   CURRENT   READY   AVAILABLE   AGE
aro-cluster-5t2dj-worker-eastus1   1         1         1       1           2d22h
aro-cluster-5t2dj-worker-eastus2   1         1         1       1           2d22h
aro-cluster-5t2dj-worker-eastus3   1         1         1       1           2d22h

接下來,您將描述已部署的 MachineSet。 將 machineset > 取代 < 為上面所列的其中一個 MachineSet,並將它輸出至檔案。

oc get machineset <machineset> -n openshift-machine-api -o yaml > spotmachineset.yaml

您必須在 MachineSet 中變更下列參數:

  • metadata.name
  • spec.selector.matchLabels.machine.openshift.io/cluster-api-machineset
  • spec.template.metadata.labels.machine.openshift.io/cluster-api-machineset
  • spec.template.spec.providerSpec.value.spotVMOptions (新增此欄位,並將其設定為 {} 。)

以下是 Spot MachineSet YAML 的精簡範例,其中強調在現有背景工作 MachineSet 上建立新的 Spot MachineSet 時,您需要進行的重要變更,包括一些內容的其他資訊。 (此範例不代表完整的功能性 MachineSet;下列已省略許多欄位。

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  name: aro-cluster-abcd1-spot-eastus
spec:
  replicas: 2
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: aro-cluster-abcd1
      machine.openshift.io/cluster-api-machineset: aro-cluster-abcd1-spot-eastus
  template:
    metadata:
        machine.openshift.io/cluster-api-machineset: aro-cluster-abcd1-spot-eastus
    spec:
      providerSpec:
        value:
          spotVMOptions: {}
      taints:
        - effect: NoExecute
          key: spot
          value: 'true'

更新檔案之後,請加以套用。

oc create -f spotmachineset.yaml

若要驗證 MachineSet 是否已成功建立,請執行下列命令:

oc get machinesets -n openshift-machine-api

以下是範例輸出。 一旦電腦處於「就緒」狀態,您的 Machineset 即已就緒。

  NAME                                    DESIRED   CURRENT   READY   AVAILABLE   AGE
aro-cluster-5t2dj-worker-eastus1           1         1         1       1           3d1h
aro-cluster-5t2dj-worker-eastus2           1         1         1       1           3d1h
aro-cluster-5t2dj-worker-eastus3           1         1         1       1           3d1h
spot                                       1         1         1       1           2m47s

排程可中斷的工作負載

建議將污點新增至 Spot 節點,以防止無法中斷的節點排程在節點上,並將此污點的任一部分新增至您想要排程在任何 Pod 上。 您可以透過 MachineSet 規格來污點節點。

例如,您可以將下列 YAML 新增至 spec.template.spec

     taints:
        - effect: NoExecute
          key: spot
          value: 'true'

這可防止 Pod 排程在結果節點上,除非它們有污點的容忍 spot='true' ,否則它會收回任何缺少該容忍的 Pod。

若要深入瞭解如何套用污點和容忍,請參閱 使用節點污點 控制 Pod 放置。

Quota

如果所使用的電腦類型的配額太低,所以電腦可能會進入失敗狀態,即使它最終應該足夠(例如,一個節點在建立另一個節點時仍在刪除)。 因此,建議您針對您將用於 Spot 實例的電腦類型設定配額,使其略高於需要(可能為 2*n,其中 n 是電腦所使用的核心數目)。 此額外負荷可避免必須補救失敗的電腦,雖然相對簡單,但仍是手動介入。

節點整備

如上述連結的 Spot VM 檔所述,VM 在不再可用時進入已解除配置的布建狀態,或不再以指定的最高價格提供。

這會在 OpenShift 中將本身顯示為 「未就緒 」節點。 機器會保持狀況良好,並分階段 布建為節點

一旦 VM 再次可供使用,它們就會恢復為 就緒

疑難排解

節點停滯在未就緒狀態,基礎 VM 已解除配置

如果節點在解除配置 VM 之後長時間停滯在未就緒狀態,您可以嘗試刪除它,或刪除其對應的 OpenShift 電腦物件。

現成電腦停滯在失敗狀態

如果使用 Spot VM 的電腦(OpenShift 物件)卡在失敗狀態中,請嘗試手動刪除。 如果因為 VM 已不存在而因 403 而無法刪除,請編輯電腦並移除完成項。