2.5. RHV에 머신 세트 생성

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

중요

이 프로세스는 수동으로 프로비저닝된 시스템이 있는 클러스터에는 적용되지 않습니다. 머신 API가 작동하는 클러스터에서만 고급 머신 관리 및 스케일링 기능을 사용할 수 있습니다.

2.5.1. Machine API 개요

Machine API는 업스트림 Cluster API 프로젝트 및 사용자 정의 OpenShift Container Platform 리소스를 기반으로 하는 주요 리소스의 조합입니다.

OpenShift Container Platform 4.8 클러스터의 경우 Machine API는 클러스터 설치가 완료된 후 모든 노드 호스트 프로비저닝 관리 작업을 수행합니다. 이 시스템으로 인해 OpenShift Container Platform 4.8은 퍼블릭 또는 프라이빗 클라우드 인프라에 더하여 탄력적이고 동적인 프로비저닝 방법을 제공합니다.

두 가지 주요 리소스는 다음과 같습니다.

Machine
노드의 호스트를 설명하는 기본 단위입니다. 머신에는 providerSpec 사양이 있으며 이는 다른 클라우드 플랫폼에 제공되는 컴퓨팅 노드 유형을 설명합니다. 예를 들어 AWS(Amazon Web Services)의 작업자 노드에 대한 머신 유형은 특정 머신 유형과 필요한 메타 데이터를 정의할 수 있습니다.
머신 세트

MachineSet 리소스는 머신 그룹입니다. 머신 세트는 머신에 연관되어 있고 복제본 세트는 pod에 연관되어 있습니다. 더 많은 머신이 필요하거나 규모를 줄여야 하는 경우 컴퓨터 요구 사항에 맞게 머신 세트의 replicas 필드를 변경합니다.

주의

컨트롤 플레인 시스템은 머신 세트에서 관리할 수 없습니다.

다음 사용자 지정 리소스는 클러스터에 더 많은 기능을 추가할 수 있습니다.

머신 자동 스케일러
MachineAutoscaler 리소스는 클라우드에서 머신을 자동으로 확장합니다. 지정된 머신 세트에서 노드의 최소 및 최대 스케일링 경계를 설정할 수 있으며 머신 자동 스케일러는 해당 노드 범위를 유지합니다. MachineAutoscaler 객체는 ClusterAutoscaler 객체를 설정한 후에 사용할 수 있습니다. ClusterAutoscalerMachineAutoscaler리소스는 모두 ClusterAutoscalerOperator 오브젝트에서 사용 가능합니다.
Cluster autoscaler
이 리소스는 업스트림 클러스터 자동 스케일러 프로젝트를 기반으로 합니다. OpenShift Container Platform 구현에서는 머신 세트 API를 확장하여 Machine API와 통합됩니다. 코어, 노드, 메모리, GPU 등과 같은 리소스의 클러스터 전체에서 확장 제한을 설정할 수 있습니다. 중요도가 낮은 Pod에 대해 새 노드가 온라인 상태가 되지 않도록 클러스터가 Pod에 우선 순위를 설정할 수 있습니다. 노드를 확장할 수는 있지만 축소할 수 없도록 확장 정책을 설정할 수도 있습니다.
머신 상태 점검
MachineHealthCheck 리소스는 머신의 비정상적인 상태를 감지하여 삭제한 후 지원되는 플랫폼에서 새 머신을 생성합니다.

OpenShift Container Platform 버전 3.11에서는 클러스터가 머신 프로비저닝을 관리하지 않았기 때문에 다중 영역 아키텍처를 쉽게 롤아웃할 수 없었습니다. OpenShift Container Platform 버전 4.1부터 이러한 프로세스가 더 쉬워졌습니다. 각 머신 세트의 범위는 단일 영역에서 지정되므로 설치 프로그램은 사용자를 대신하여 가용성 영역 전체에 머신 세트를 보냅니다. 또한 계산이 동적이고 영역 장애가 발생하여 머신을 재조정해야하는 경우 처리할 수 있는 영역을 확보할 수 있습니다. Autoscaler는 클러스터의 수명 기간 동안 최적의 균형을 유지합니다.

2.5.2. RHV에서 머신 세트 사용자 정의 리소스의 샘플 YAML

이 샘플 YAML은 RHV에서 실행되는 머신 세트를 정의하고 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> 4
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas> 5
  selector: 6
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 7
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 8
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id> 9
        machine.openshift.io/cluster-api-machine-role: <role> 10
        machine.openshift.io/cluster-api-machine-type: <role> 11
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 12
    spec:
      metadata:
        labels:
          node-role.kubernetes.io/<role>: "" 13
      providerSpec:
        value:
          apiVersion: ovirtproviderconfig.machine.openshift.io/v1beta1
          cluster_id: <ovirt_cluster_id> 14
          template_name: <ovirt_template_name> 15
          instance_type_id: <instance_type_id> 16
          cpu: 17
            sockets: <number_of_sockets> 18
            cores: <number_of_cores> 19
            threads: <number_of_threads> 20
          memory_mb: <memory_size> 21
          os_disk: 22
            size_gb: <disk_size> 23
          network_interfaces: 24
            vnic_profile_id:  <vnic_profile_id> 25
          credentialsSecret:
            name: ovirt-credentials 26
          kind: OvirtMachineProviderSpec
          type: <workload_type> 27
          userDataSecret:
            name: worker-user-data
          affinityGroupsNames:
            - compute 28
1 7 9
클러스터를 프로비저닝할 때 설정한 클러스터 ID를 기반으로하는 인프라 ID를 지정합니다. OpenShift CLI (oc) 패키지가 설치되어 있으면 다음 명령을 실행하여 인프라 ID를 얻을 수 있습니다.
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
2 3 10 11 13
추가할 노드 레이블을 지정합니다.
4 8 12
인프라 ID 및 노드 레이블을 지정합니다. 이 두 문자열은 35자를 초과할 수 없습니다.
5
생성할 머신 수를 지정합니다.
6
머신의 선택기입니다.
14
이 VM 인스턴스가 속하는 RHV 클러스터의 UUID를 지정합니다.
15
머신을 생성하는 데 사용할 RHV VM 템플릿을 지정합니다.
16
선택 사항: VM 인스턴스 유형을 지정합니다.
주의

instance_type_id 필드는 더 이상 사용되지 않으며 향후 릴리스에서 제거됩니다.

이 매개변수를 포함하는 경우 이 매개변수는 모든 하드웨어 매개변수를 재정의하므로 CPU 및 메모리를 포함한 VM의 하드웨어 매개변수를 지정할 필요가 없습니다.

17
선택 사항: CPU 필드에는 소켓, 코어, 스레드를 포함한 CPU 구성이 포함됩니다.
18
선택 사항: VM의 소켓 수를 지정합니다.
19
선택 사항: 소켓당 코어 수를 지정합니다.
20
선택 사항: 코어당 스레드 수를 지정합니다.
21
선택 사항: VM의 메모리 크기를 MiB 단위로 지정합니다.
22
선택 사항: 노드의 루트 디스크.
23
선택 사항: 부팅 가능한 디스크의 크기를 GiB로 지정합니다.
24
선택 사항: VM의 네트워크 인터페이스 목록입니다. 이 매개변수를 포함하는 경우 OpenShift Container Platform은 템플릿에서 모든 네트워크 인터페이스를 삭제하고 새 네트워크 인터페이스를 생성합니다.
25
선택 사항: vNIC 프로필 ID를 지정합니다.
26
RHV 인증 정보를 보유한 시크릿 이름을 지정합니다.
27
선택 사항: 인스턴스가 최적화된 워크로드 유형을 지정합니다. 이 값은 RHV VM 매개변수에 영향을 미칩니다. 지원되는 값: desktop,server (기본값), high_performance.high_performance 는 VM의 성능을 향상하지만 제한 사항이 있습니다. 예를 들어 그래픽 콘솔을 사용하여 VM에 액세스할 수 없습니다. 자세한 내용은 가상 머신 관리 가이드에서 고성능 가상 머신, 템플릿 및 풀 구성을 참조하십시오.
28
VM에 적용해야 하는 선호도 그룹 이름 목록입니다. 선호도 그룹은 oVirt에 있어야 합니다.
참고

RHV는 VM을 생성할 때 템플릿을 사용하므로 선택적 매개변수에 대한 값을 지정하지 않으면 RHV는 템플릿에 지정된 해당 매개변수의 값을 사용합니다.

2.5.3. 머신 세트 만들기

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

사전 요구 사항

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

절차

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

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

    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. 특정 머신 세트의 값을 확인합니다.

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

      출력 예

      ...
      template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: agl030519-vplxk 1
              machine.openshift.io/cluster-api-machine-role: worker 2
              machine.openshift.io/cluster-api-machine-type: worker
              machine.openshift.io/cluster-api-machineset: agl030519-vplxk-worker-us-east-1a

      1
      클러스터 ID입니다.
      2
      기본 노드 레이블입니다.
  2. MachineSet CR을 만듭니다.

    $ oc create -f <file_name>.yaml
  3. 머신 세트 목록을 표시합니다.

    $ 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 값이 일치합니다. 머신 세트를 사용할 수 없는 경우 몇 분 후에 명령을 다시 실행합니다.