다음을 통해 공유


ARO(Azure Red Hat OpenShift) 클러스터에서 Azure Spot Virtual Machines 사용

이 문서에서는 ARO(Azure Red Hat OpenShift) 클러스터에서 Azure Spot Virtual Machines를 사용하도록 구성하는 데 필요한 세부 정보를 제공합니다.

Azure Spot Virtual Machines를 사용하면 대폭 절감된 비용으로 사용되지 않은 용량을 활용할 수 있습니다. Azure에 용량이 다시 필요한 경우 언제든지 인프라에서 Azure 스폿 가상 머신을 제거합니다. 스폿 인스턴스에 대한 자세한 내용은 스폿 Virtual Machines를 참조하세요.

시작하기 전에

시작하기 전에 Azure Red Hat Openshift 클러스터가 배포되었는지 확인합니다. ARO 클러스터가 필요한 경우 퍼블릭 클러스터에 대해서는 ARO 빠른 시작을 참조하고, 프라이빗 클러스터에 대해서는 프라이빗 클러스터 자습서를 참조하세요. 스폿 VM을 사용하도록 클러스터를 구성하는 단계는 프라이빗 및 퍼블릭 클러스터 모두에 대해 동일합니다.

ARO 클러스터에는 항상 스폿이 아닌 VM인 작업자 노드 3개 이상과 제어 노드 3개가 있어야 합니다. ARO 클러스터에는 스폿 VM 기반 제어 노드가 있을 수 없습니다.

스폿 VM 추가

Azure Red Hat Openshift의 머신 관리는 MachineSet을 사용하여 수행됩니다. MachineSet 리소스는 머신의 그룹입니다. ReplicaSets가 Pod인 것처럼 MachineSets도 머신에 해당합니다. 더 많은 머신이 필요하거나 축소해야 하는 경우 컴퓨팅 요구 사항에 맞게 머신 집합의 복제본 필드를 변경합니다. 자세한 내용은 OpenShift MachineSet 설명서를 참조하세요.

스폿 VM의 사용은 MachineSet의 템플릿 사양 내에 spotVMOptions 필드를 추가하여 지정됩니다. 이 MachineSet을 만들려면 다음을 수행합니다.

  1. 클러스터에서 실행되는 MachineSet의 복사본을 가져옵니다.
  2. 수정된 MachineSet 구성을 만듭니다.
  3. 사용자의 클러스터에 이 MachineSet을 배포합니다.

먼저 CLI를 사용하여 OpenShift 클러스터에 연결합니다.

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

다음으로, 클러스터의 MachineSets를 나열합니다. 기본 클러스터에는 3개의 MachineSets가 배포됩니다.

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>을 위에 나열된 MachineSets 중 하나로 바꾸고 이를 파일에 출력합니다.

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(이 필드를 추가하고 {}로 설정합니다.)

다음은 컨텍스트에 대한 몇 가지 추가 정보를 포함하여 기존 작업자 MachineSet를 기반으로 새 스폿 MachineSet를 사용할 때 수행해야 하는 주요 변경 사항을 강조 표시하는 스폿 MachineSet YAML의 요약된 예제입니다. (이 예제에서는 전체 기능 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

중단 가능한 워크로드 예약

중단 불가능한 노드가 예약되지 않도록 스폿 노드에 taint를 추가하고 예약하려는 모든 Pod에 이 taint의 toleration을 추가하는 것이 좋습니다. MachineSet 사양을 통해 노드를 taint할 수 있습니다.

예를 들어, 다음 YAML을 spec.template.spec에 추가할 수 있습니다.

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

이렇게 하면 spot='true' taint에 대한 toleration이 없는 한 결과 노드에서 Pod가 예약되지 않으며, 해당 toleration이 없는 모든 Pod가 제거됩니다.

taint 및 toleration 적용에 대한 자세한 내용은 노드 taint를 사용한 Pod 배치 제어를 참조하세요.

할당량

사용 중인 컴퓨터 유형에 대한 할당량이 짧은 시간 동안 너무 낮으면 결국 충분해지더라도 할당량 문제로 인해 컴퓨터가 실패 상태가 될 수 있습니다(예: 다른 노드를 생성 중일 때 한 노드가 계속 삭제 중인 경우). 이 때문에 스폿 인스턴스에 사용할 머신 유형에 대한 할당량을 필요한 것보다 약간 높게 설정하는 것이 좋습니다(예: 2*n, 여기서 n은 머신에서 사용하는 코어 수임). 이 오버헤드는 실패한 머신을 해결할 필요가 없으며, 비교적 간단하지만 여전히 수동 개입입니다.

노드 준비 상태

위에 연결된 스폿 VM 설명서에 설명된 것처럼 VM은 더 이상 사용할 수 없거나 지정된 최대 가격으로 더 이상 사용할 수 없는 경우 할당 취소된 프로비전 상태로 전환됩니다.

OpenShift에서 준비되지 않은 노드로 표시됩니다. 머신은 노드로 프로비전된 단계에서 정상 상태로 유지됩니다.

VM을 다시 사용할 수 있게 되면 준비 상태로 돌아갑니다.

문제 해결

노드가 준비되지 않음 상태로 중단되고 기본 VM의 할당이 취소됩니다.

VM의 할당이 취소된 후 노드가 준비되지 않음 상태로 오랜 시간 동안 중단된 경우 노드를 삭제하거나 해당 OpenShift 머신 개체를 삭제할 수 있습니다.

스폿 머신이 실패 상태로 중단됨

스폿 VM을 사용하는 머신(OpenShift 개체)이 실패 상태로 중단된 경우 수동으로 삭제해 보세요. VM이 더 이상 존재하지 않아 403으로 인해 삭제할 수 없는 경우 컴퓨터를 편집하고 종료자를 제거합니다.