2.2. Azure에서 머신 세트 만들기

Microsoft Azure의 OpenShift Container Platform 클러스터에서 특정 목적을 충족하기 위해 다른 머신 세트를 만들 수 있습니다. 예를 들어, 지원되는 워크로드를 새 머신으로 이동할 수 있도록 인프라 머신 세트 및 관련 머신을 작성할 수 있습니다.

중요

머신 API가 작동하는 클러스터에서만 고급 머신 관리 및 스케일링 기능을 사용할 수 있습니다. 사용자 프로비저닝 인프라가 있는 클러스터에는 Machine API를 사용하려면 추가 검증 및 구성이 필요합니다.

인프라 플랫폼 유형의 클러스터가 Machine API를 사용할 수 없습니다. 이 제한은 클러스터에 연결된 컴퓨팅 시스템이 기능을 지원하는 플랫폼에 설치된 경우에도 적용됩니다. 이 매개변수는 설치 후 변경할 수 없습니다.

클러스터의 플랫폼 유형을 보려면 다음 명령을 실행합니다.

$ oc get infrastructure cluster -o jsonpath='{.status.platform}'

2.2.1. Azure의 머신 세트사용자 지정 리소스에 대한 샘플 YAML

이 샘플 YAML은 리전의 1 Microsoft Azure 영역에서 실행되는 머신 세트를 정의하고 node-role.kubernetes.io/<role>: "" 로 레이블이 지정된 노드를 만듭니다.

이 샘플에서 <infrastructure_id>는 클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로 하는 인프라 ID 레이블이며 <role>은 추가할 노드 레이블입니다.

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
    machine.openshift.io/cluster-api-machine-role: <role> 2
    machine.openshift.io/cluster-api-machine-type: <role> 3
  name: <infrastructure_id>-<role>-<region> 4
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 6
  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 7
        machine.openshift.io/cluster-api-machine-role: <role> 8
        machine.openshift.io/cluster-api-machine-type: <role> 9
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 10
    spec:
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/<role>: "" 11
      providerSpec:
        value:
          apiVersion: azureproviderconfig.openshift.io/v1beta1
          credentialsSecret:
            name: azure-cloud-credentials
            namespace: openshift-machine-api
          image: 12
            offer: ""
            publisher: ""
            resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/images/<infrastructure_id> 13
            sku: ""
            version: ""
          internalLoadBalancer: ""
          kind: AzureMachineProviderSpec
          location: <region> 14
          managedIdentity: <infrastructure_id>-identity 15
          metadata:
            creationTimestamp: null
          natRule: null
          networkResourceGroup: ""
          osDisk:
            diskSizeGB: 128
            managedDisk:
              storageAccountType: Premium_LRS
            osType: Linux
          publicIP: false
          publicLoadBalancer: ""
          resourceGroup: <infrastructure_id>-rg 16
          sshPrivateKey: ""
          sshPublicKey: ""
          subnet: <infrastructure_id>-<role>-subnet 17 18
          userDataSecret:
            name: worker-user-data 19
          vmSize: Standard_DS4_v2
          vnet: <infrastructure_id>-vnet 20
          zone: "1" 21
1 5 7 15 16 17 20
클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로 하는 인프라 ID를 지정합니다. OpenShift CLI 패키지가 설치되어 있으면 다음 명령을 실행하여 인프라 ID를 얻을 수 있습니다.
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster

다음 명령을 실행하여 서브넷을 가져올 수 있습니다.

$  oc -n openshift-machine-api \
    -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}{"\n"}' \
    get machineset/<infrastructure_id>-worker-centralus1

다음 명령을 실행하여 vnet을 가져올 수 있습니다.

$  oc -n openshift-machine-api \
    -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}{"\n"}' \
    get machineset/<infrastructure_id>-worker-centralus1
2 3 8 9 11 18 19
추가할 노드 레이블을 지정합니다.
4 6 10
인프라 ID, 노드 레이블, 리전을 지정합니다.
12
머신 세트의 이미지 세부 정보를 지정합니다. Azure Marketplace 이미지를 사용하려면 "Azure Marketplace 이미지 선택"을 참조하십시오.
13
인스턴스 유형과 호환되는 이미지를 지정합니다. 설치 프로그램에서 만든 Hyper-V 생성 V2 이미지에는 -gen2 접미사가 있으며 V1 이미지는 접미사 없이 이름이 동일합니다.
14
머신을 배치할 리전을 지정합니다.
21
머신을 배치할 리전 내 영역을 지정합니다. 해당 리전이 지정한 영역을 지원하는지 확인합니다.

2.2.2. 머신 세트 만들기

설치 프로그램에서 생성한 컴퓨팅 머신 세트 외에도 고유한 머신 세트를 생성하여 선택한 특정 워크로드의 머신 컴퓨팅 리소스를 동적으로 관리할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터를 배포합니다.
  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 oc에 로그인합니다.

절차

  1. 머신 세트 CR(사용자 지정 리소스) 샘플이 포함된 이름이 <file_name>.yaml인 새 YAML 파일을 만듭니다.

    <clusterID><role> 매개 변수 값을 설정해야 합니다.

  2. 선택 사항: 특정 필드에 설정할 값이 확실하지 않은 경우 클러스터에서 기존 컴퓨팅 머신 세트를 확인할 수 있습니다.

    1. 클러스터의 컴퓨팅 머신 세트를 나열하려면 다음 명령을 실행합니다.

      $ oc get machinesets -n openshift-machine-api

      출력 예

      NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
      agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
      agl030519-vplxk-worker-us-east-1d   0         0                             55m
      agl030519-vplxk-worker-us-east-1e   0         0                             55m
      agl030519-vplxk-worker-us-east-1f   0         0                             55m

    2. 특정 컴퓨팅 머신 세트 CR(사용자 정의 리소스)의 값을 보려면 다음 명령을 실행합니다.

      $ oc get machineset <machineset_name> \
        -n openshift-machine-api -o yaml

      출력 예

      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1
        name: <infrastructure_id>-<role> 2
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: <infrastructure_id>
            machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: <infrastructure_id>
              machine.openshift.io/cluster-api-machine-role: <role>
              machine.openshift.io/cluster-api-machine-type: <role>
              machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>
          spec:
            providerSpec: 3
              ...

      1
      클러스터 인프라 ID입니다.
      2
      기본 노드 레이블입니다.
      참고

      사용자 프로비저닝 인프라가 있는 클러스터의 경우 컴퓨팅 머신 세트는 작업자 및 인프라 유형 머신만 생성할 수 있습니다.

      3
      컴퓨팅 머신 세트 CR의 &lt ;providerSpec > 섹션에 있는 값은 플랫폼에 따라 다릅니다. CR의 &lt ;providerSpec > 매개변수에 대한 자세한 내용은 공급자의 샘플 컴퓨팅 머신 세트 CR 구성을 참조하십시오.
  3. 다음 명령을 실행하여 MachineSet CR을 생성합니다.

    $ oc create -f <file_name>.yaml

검증

  • 다음 명령을 실행하여 컴퓨팅 머신 세트 목록을 확인합니다.

    $ oc get machineset -n openshift-machine-api

    출력 예

    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    agl030519-vplxk-infra-us-east-1a    1         1         1       1           11m
    agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1c   1         1         1       1           55m
    agl030519-vplxk-worker-us-east-1d   0         0                             55m
    agl030519-vplxk-worker-us-east-1e   0         0                             55m
    agl030519-vplxk-worker-us-east-1f   0         0                             55m

    새 머신 세트가 사용 가능한 경우DESIREDCURRENT 값이 일치합니다. 머신 세트를 사용할 수 없는 경우 몇 분 후에 명령을 다시 실행합니다.

2.2.3. Azure Marketplace 이미지 선택

Azure에서 실행되는 머신 세트를 생성하여 Azure Marketplace 오퍼링을 사용하는 머신을 배포할 수 있습니다. 이 제품을 사용하려면 먼저 Azure Marketplace 이미지를 가져와야 합니다. 이미지를 가져올 때 다음 사항을 고려하십시오.

  • 이미지가 동일하지만 Azure Marketplace 게시자는 지역에 따라 다릅니다. 북미에 있는 경우 게시자로 redhat 을 지정합니다. EMEA에 있는 경우 게시자로 redhat-limited 를 지정합니다.
  • 이 프로모션에는 rh-ocp-worker SKU 및 rh-ocp-worker-gen1 SKU가 포함되어 있습니다. rh-ocp-worker SKU는 Hyper-V generation 버전 2 VM 이미지를 나타냅니다. OpenShift Container Platform에서 사용되는 기본 인스턴스 유형은 버전 2와 호환됩니다. 버전 1 호환 가능한 인스턴스 유형을 사용하려는 경우 rh-ocp-worker-gen1 SKU와 연결된 이미지를 사용합니다. rh-ocp-worker-gen1 SKU는 Hyper-V 버전 1 VM 이미지를 나타냅니다.

사전 요구 사항

  • Azure CLI 클라이언트 (az) 를 설치했습니다.
  • Azure 계정에는 제공 권한이 있으며 Azure CLI 클라이언트를 사용하여 이 계정에 로그인했습니다.

절차

  1. 다음 명령 중 하나를 실행하여 사용 가능한 모든 OpenShift Container Platform 이미지를 표시합니다.

    • 북미:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat -o table

      출력 예

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  RedHat          rh-ocp-worker       RedHat:rh-ocp-worker:rh-ocpworker:4.8.2021122100               4.8.2021122100
      rh-ocp-worker  RedHat          rh-ocp-worker-gen1  RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100         4.8.2021122100

    • EMEA:

      $  az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table

      출력 예

      Offer          Publisher       Sku                 Urn                                                             Version
      -------------  --------------  ------------------  --------------------------------------------------------------  --------------
      rh-ocp-worker  redhat-limited  rh-ocp-worker       redhat-limited:rh-ocp-worker:rh-ocp-worker:4.8.2021122100       4.8.2021122100
      rh-ocp-worker  redhat-limited  rh-ocp-worker-gen1  redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100  4.8.2021122100

    참고

    설치하는 OpenShift Container Platform 버전에 관계없이 사용할 올바른 버전의 Azure Marketplace 이미지는 4.8.x입니다. 필요한 경우 설치 프로세스의 일부로 VM이 자동으로 업그레이드됩니다.

  2. 다음 명령 중 하나를 실행하여 제안의 이미지를 검사합니다.

    • 북미:

      $ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • EMEA:

      $ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  3. 다음 명령 중 하나를 실행하여 제안 조건을 검토합니다.

    • 북미:

      $ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • EMEA:

      $ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  4. 다음 명령 중 하나를 실행하여 제품 약관에 동의합니다.

    • 북미:

      $ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
    • EMEA:

      $ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
  5. 제공의 이미지 세부 정보, 특히 게시자 의 값,제공,sku버전 을 기록합니다.
  6. 제안의 이미지 세부 정보를 사용하여 머신 세트 YAML 파일의 providerSpec 섹션에 다음 매개변수를 추가합니다.

    Azure Marketplace 컴퓨팅 머신의 샘플 providerSpec 이미지 값

    providerSpec:
      value:
        image:
          offer: rh-ocp-worker
          publisher: redhat
          resourceID: ""
          sku: rh-ocp-worker
          type: MarketplaceWithPlan
          version: 4.8.2021122100

2.2.4. 머신을 Spot 가상머신으로 배포하는 머신 세트

Azure에서 실행되는 머신 세트를 생성하여 머신을 보장되지 않는 Spot 가상 머신으로 배포하면 비용을 절감할 수 있습니다. Spot 가상 머신은 사용되지 않은 Azure 용량을 사용하며 표준 가상 머신보다 비용이 저렴합니다. 일괄 처리 또는 상태 비저장, 수평적으로 확장 가능한 워크로드와 같이 인터럽트를 허용할 수 있는 워크로드에 Spot 가상 머신을 사용할 수 있습니다.

Azure는 언제든지 Spot 가상 머신을 종료 할 수 있습니다. Azure는 중단이 발생하면 사용자에게 30 초 동안 경고 메세지를 보냅니다. OpenShift Container Platform은 Azure가 종료 경고를 발행할 때 영향을 받는 인스턴스에서 워크로드를 제거하기 시작합니다.

다음과 같은 이유로 Spot 가상 머신을 사용할 때 중단될 수 있습니다.

  • 인스턴스 가격이 최대 가격을 초과합니다.
  • Spot 가상 머신의 공급이 감소합니다.
  • Azure는 용량을 복원해야합니다.

Azure가 인스턴스를 종료하면 Spot 가상 머신 노드에서 실행되는 종료 프로세스가 머신 리소스를 삭제합니다. 머신 세트 replicas 수량을 충족하기 위해 머신 세트는 Spot 가상 머신을 요청하는 머신을 생성합니다.

2.2.5. 머신 세트를 사용하여 Spot 가상 머신 생성

머신 세트 YAML 파일에 spotVMOptions를 추가하여 Azure에서 Spot 가상 머신을 시작할 수 있습니다.

절차

  • providerSpec 필드 아래에 다음 행을 추가합니다.

    providerSpec:
      value:
        spotVMOptions: {}

    선택 옵션으로 spotVMOptions.maxPrice 필드를 설정하여 Spot 가상 머신의 비용을 제한할 수 있습니다. 예를 들어 maxPrice: '0.98765'를 설정할 수 있습니다. maxPrice가 설정된 경우 이 값은 시간당 최대 Spot 가격으로 사용됩니다. 설정되지 않은 경우 최대 가격은 기본적으로 -1로 설정된 표준 가상 머신 가격까지 청구됩니다.

    Azure는 Spot 가상 머신 가격을 표준 가격으로 제한합니다. 인스턴스가 기본 maxPrice로 설정된 경우 Azure는 가격 설정에 따라 인스턴스를 제거하지 않습니다. 그러나 용량 제한으로 인해 인스턴스를 제거할 수 있습니다.

참고

기본 표준 가상 머신 가격을 maxPrice 값으로 사용하고 Spot 가상 머신의 최대 가격을 설정하지 않는 것이 좋습니다.

2.2.6. 머신 세트의 고객 관리 암호화 키 활성화

Azure에 암호화 키를 제공하여 관리 대상 디스크의 데이터를 암호화할 수 있습니다. 시스템 API를 사용하여 고객 관리 키로 서버 측 암호화를 활성화할 수 있습니다.

고객 관리 키를 사용하려면 Azure Key Vault, 디스크 암호화 세트 및 암호화 키가 필요합니다. 디스크 암호화 세트는 CCO(Cloud Credential Operator)에 권한이 부여된 리소스 그룹 앞에 있어야 합니다. 그렇지 않은 경우 디스크 암호화 세트에 추가 reader 역할을 부여해야 합니다.

절차

  • 머신 세트 YAML 파일의 providerSpec 필드에 설정된 디스크 암호화를 구성합니다. 예를 들면 다음과 같습니다.

    ...
    providerSpec:
      value:
        ...
        osDisk:
          diskSizeGB: 128
          managedDisk:
            diskEncryptionSet:
              id: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Compute/diskEncryptionSets/<disk_encryption_set_name>
            storageAccountType: Premium_LRS
    ...

추가 리소스