共用方式為


在 Azure Red Hat OpenShift (ARO) 叢集中使用 Azure Spot Virtual Machines

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

使用 Azure Spot Virtual Machines 可讓您以大幅降低的成本使用我們未運用的容量。 在任何時候,只要 Azure 又需要這些容量,Azure 基礎結構就會收回 Azure Spot Virtual Machines。 如需 Spot 執行個體的詳細資訊,請參閱 Spot Virtual Machines

開始之前

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

ARO 叢集應該始終具有三個 Spot VM 的背景工作角色節點,以及三個控制節點。 ARO 叢集不能有任何現成 VM 型控制節點。

新增 Spot VM

Azure Red Hat Openshift 中的機器管理是使用 MachineSet 來完成。 MachineSet 資源是電腦群組。 MachineSet 之於電腦就像 ReplicaSets 之於 Pod 一樣。 如果您需要更多電腦或必須縮小其規模,您可以變更機器集上的 [複本] 欄位,以符合您的計算需求。 若要深入了解,請參閱 OpenShift MachineSet 文件

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

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

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

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

接下來,您會列出叢集上的 MachineSet。 預設叢集會部署 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 放置

配額

如果所使用電腦類型的配額在短時間內太低,則電腦可能進入失敗狀態,即使最後配額應該足夠也一樣 (例如,在建立新節點時仍會刪除另一個節點)。 因此,建議您將要用於 Spot 執行個體的電腦類型配額設定為略高於需要的配額 (可能是 2*n,其中 n 是電腦所使用的核心數目)。 此額外負荷可避免必須補救失敗的電腦,雖然相當簡單,但仍需要人工操作。

節點整備程度

如上面連結的 Spot VM 文件所述,當 VM 不再可供使用或無法再以指定的最高價格提供時,VM 會進入解除配置佈建狀態。

這樣一來,該 VM 就會在 OpenShift 中自行顯示為 [未就緒] 節點。 機器會維持良好狀態,並處於 [佈建為節點] 階段。

一旦 VM 再次可供使用,就會回到 [就緒] 狀態

疑難排解

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

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

Spot Machine 停滯在 [失敗] 狀態

如果使用 Spot VM 的電腦 (OpenShift 物件) 停滯在 [失敗] 狀態,請嘗試將其手動刪除。 如果因為 VM 已不存在產生 403 訊息而無法刪除,請編輯電腦並移除完成項。