5.3. OpenShift Virtualization에서 호스팅된 제어 평면 관리


OpenShift Virtualization에 호스팅된 클러스터를 배포한 후 다음 절차를 완료하여 클러스터를 관리할 수 있습니다.

5.3.1. 호스팅된 클러스터에 액세스

호스팅된 클러스터에 액세스하려면 리소스에서 직접 kubeconfig 파일과 kubeadmin 자격 증명을 가져오거나 hcp 명령줄 인터페이스를 사용하여 kubeconfig 파일을 생성하면 됩니다.

사전 요구 사항

리소스에서 직접 kubeconfig 파일과 자격 증명을 가져와 호스팅된 클러스터에 액세스하려면 호스팅된 클러스터의 액세스 비밀을 알고 있어야 합니다. 호스팅 클러스터(호스팅) 네임스페이스에는 호스팅 클러스터 리소스와 액세스 비밀이 포함되어 있습니다. 호스팅된 제어 평면 네임스페이스는 호스팅된 제어 평면이 실행되는 곳입니다.

비밀 이름 형식은 다음과 같습니다.

  • kubeconfig 비밀: <hosted_cluster_namespace>-<name>-admin-kubeconfig (클러스터-hypershift-demo-admin-kubeconfig)
  • kubeadmin 비밀번호: <hosted_cluster_namespace>-<name>-kubeadmin-password (클러스터-hypershift-demo-kubeadmin-password)

kubeconfig 비밀에는 Base64로 인코딩된 kubeconfig 필드가 포함되어 있으며, 이를 디코딩하여 다음 명령으로 파일에 저장하여 사용할 수 있습니다.

$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
Copy to Clipboard Toggle word wrap

kubeadmin 비밀번호도 Base64로 인코딩되었습니다. 이를 디코딩하고 비밀번호를 사용하여 호스팅된 클러스터의 API 서버나 콘솔에 로그인할 수 있습니다.

프로세스

  • hcp CLI를 사용하여 kubeconfig 파일을 생성하여 호스팅된 클러스터에 액세스하려면 다음 단계를 따르세요.

    1. 다음 명령을 입력하여 kubeconfig 파일을 생성합니다.

      $ hcp create kubeconfig --namespace <hosted_cluster_namespace> \
        --name <hosted_cluster_name> > <hosted_cluster_name>.kubeconfig
      Copy to Clipboard Toggle word wrap
    2. kubeconfig 파일을 저장한 후 다음 예제 명령을 입력하여 호스팅된 클러스터에 액세스할 수 있습니다.

      $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
      Copy to Clipboard Toggle word wrap

5.3.2. 호스팅된 클러스터에 대한 노드 자동 크기 조정 활성화

호스팅된 클러스터에 더 많은 용량이 필요하고 예비 에이전트를 사용할 수 있는 경우 자동 크기 조정을 활성화하여 새로운 워커 노드를 설치할 수 있습니다.

프로세스

  1. 자동 크기 조정을 활성화하려면 다음 명령을 입력하세요.

    $ oc -n <hosted_cluster_namespace> patch nodepool <hosted_cluster_name> \
      --type=json \
      -p '[{"op": "remove", "path": "/spec/replicas"},{"op":"add", "path": "/spec/autoScaling", "value": { "max": 5, "min": 2 }}]'
    Copy to Clipboard Toggle word wrap
    참고

    이 예에서 노드의 최소 개수는 2개이고, 최대 개수는 5개입니다. 추가할 수 있는 노드의 최대 수는 플랫폼에 따라 제한될 수 있습니다. 예를 들어, Agent 플랫폼을 사용하는 경우 최대 노드 수는 사용 가능한 Agent 수에 따라 제한됩니다.

  2. 새로운 노드가 필요한 작업 부하를 만듭니다.

    1. 다음 예를 사용하여 워크로드 구성을 포함하는 YAML 파일을 만듭니다.

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        labels:
          app: reversewords
        name: reversewords
        namespace: default
      spec:
        replicas: 40
        selector:
          matchLabels:
            app: reversewords
        strategy: {}
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: reversewords
          spec:
            containers:
            - image: quay.io/mavazque/reversewords:latest
              name: reversewords
              resources:
                requests:
                  memory: 2Gi
      status: {}
      Copy to Clipboard Toggle word wrap
    2. 파일을 workload-config.yaml 로 저장합니다.
    3. 다음 명령을 입력하여 YAML을 적용합니다.

      $ oc apply -f workload-config.yaml
      Copy to Clipboard Toggle word wrap
  3. 다음 명령을 입력하여 admin-kubeconfig 비밀번호를 추출합니다.

    $ oc extract -n <hosted_cluster_namespace> \
      secret/<hosted_cluster_name>-admin-kubeconfig \
      --to=./hostedcluster-secrets --confirm
    Copy to Clipboard Toggle word wrap

    출력 예

    hostedcluster-secrets/kubeconfig
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 입력하여 새 노드가 준비 상태인지 확인할 수 있습니다.

    $ oc --kubeconfig ./hostedcluster-secrets get nodes
    Copy to Clipboard Toggle word wrap
  5. 노드를 제거하려면 다음 명령을 입력하여 작업 부하를 삭제하세요.

    $ oc --kubeconfig ./hostedcluster-secrets -n <namespace> \
      delete deployment <deployment_name>
    Copy to Clipboard Toggle word wrap
  6. 추가 용량이 필요하지 않을 때까지 몇 분간 기다리세요. Agent 플랫폼에서는 Agent가 폐기되고 재사용될 수 있습니다. 다음 명령을 입력하면 노드가 제거되었는지 확인할 수 있습니다.

    $ oc --kubeconfig ./hostedcluster-secrets get nodes
    Copy to Clipboard Toggle word wrap
    참고

    IBM Z® 에이전트의 경우 PR/SM(Processor Resource/Systems Manager) 모드에서 OSA 네트워크 장치를 사용하는 경우 자동 크기 조정이 지원되지 않습니다. 축소 프로세스 중에 새 에이전트가 합류하므로 기존 에이전트를 수동으로 삭제하고 노드 풀을 확장해야 합니다.

고급 스토리지 구성을 제공하지 않으면 KubeVirt 가상 머신(VM) 이미지, KubeVirt 컨테이너 스토리지 인터페이스(CSI) 매핑 및 etcd 볼륨에 기본 스토리지 클래스가 사용됩니다.

다음 표는 호스팅 클러스터에서 영구 저장소를 지원하기 위해 인프라가 제공해야 하는 기능을 나열합니다.

Expand
표 5.1. 호스팅된 클러스터의 영구 저장 모드
인프라 CSI 제공업체호스팅 클러스터 CSI 공급자호스팅 클러스터 기능

모든 RWX 블록 CSI 공급자

kubevirt-csi

  • 기본 RWO 블록파일
  • 기본 RWX 블록스냅샷
  • CSI 볼륨 복제

모든 RWX 블록 CSI 공급자

Red Hat OpenShift Data Foundation

Red Hat OpenShift Data Foundation 기능 세트. 외부 모드는 차지하는 공간이 더 작고 독립형 Red Hat Ceph Storage를 사용합니다. 내부 모드는 차지하는 공간이 더 크지만 독립적이고 RWX 파일 과 같이 확장된 기능이 필요한 사용 사례에 적합합니다.

참고

OpenShift Virtualization은 호스팅된 클러스터의 스토리지를 처리하며, 특히 블록 스토리지에 대한 요구 사항이 제한적인 고객에게 도움이 됩니다.

5.3.3.1. KubeVirt CSI 스토리지 클래스 매핑

KubeVirt CSI는 ReadWriteMany (RWX) 액세스가 가능한 인프라 스토리지 클래스 매핑을 지원합니다. 클러스터를 생성하는 동안 인프라 스토리지 클래스를 호스팅된 스토리지 클래스에 매핑할 수 있습니다.

프로세스

  • 인프라 스토리지 클래스를 호스팅된 스토리지 클래스에 매핑하려면 다음 명령을 실행하여 --infra-storage-class-mapping 인수를 사용합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \ 
    1
    
      --node-pool-replicas <worker_node_count> \ 
    2
    
      --pull-secret <path_to_pull_secret> \ 
    3
    
      --memory <memory> \ 
    4
    
      --cores <cpu> \ 
    5
    
      --infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class> \ 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 8Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    <infrastructure_storage_class>를 인프라 스토리지 클래스 이름으로, <hosted_storage_class>를 호스팅된 클러스터 스토리지 클래스 이름으로 바꿉니다. hcp create cluster 명령 내에서 --infra-storage-class-mapping 인수를 여러 번 사용할 수 있습니다.

호스팅 클러스터를 생성한 후에는 호스팅 클러스터 내에서 인프라 스토리지 클래스가 표시됩니다. 해당 스토리지 클래스 중 하나를 사용하는 호스팅된 클러스터 내에서 영구 볼륨 클레임(PVC)을 생성하면 KubeVirt CSI는 클러스터 생성 중에 구성한 인프라 스토리지 클래스 매핑을 사용하여 해당 볼륨을 프로비저닝합니다.

참고

KubeVirt CSI는 RWX 액세스가 가능한 인프라 스토리지 클래스만 매핑을 지원합니다.

다음 표는 볼륨 및 액세스 모드 기능이 KubeVirt CSI 스토리지 클래스에 어떻게 매핑되는지 보여줍니다.

Expand
표 5.2. KubeVirt CSI 스토리지 클래스를 액세스 및 볼륨 모드에 매핑
인프라 CSI 기능호스팅 클러스터 CSI 기능VM 라이브 마이그레이션 지원참고

RWX: 블록 또는 파일 시스템

ReadWriteOnce (RWO) 블록 또는 파일 시스템 RWX 블록 만 해당

지원됨

파일 시스템 볼륨 모드는 호스팅된 블록 모드 성능을 저하시키므로 블록 모드를 사용하세요. RWX 블록 볼륨 모드는 호스팅된 클러스터가 OpenShift Container Platform 4.16 이상인 경우에만 지원됩니다.

RWO 블록 스토리지

RWO 블록 스토리지 또는 파일 시스템

지원되지 않음

라이브 마이그레이션 지원이 부족하면 KubeVirt VM을 호스팅하는 기본 인프라 클러스터를 업데이트하는 기능에 영향을 미칩니다.

RWO FileSystem

RWO 블록 또는 파일 시스템

지원되지 않음

라이브 마이그레이션 지원이 부족하면 KubeVirt VM을 호스팅하는 기본 인프라 클러스터를 업데이트하는 기능에 영향을 미칩니다. 인프라 파일 시스템 볼륨 모드를 사용하면 호스팅된 블록 모드 성능이 저하됩니다.

5.3.3.2. 단일 KubeVirt CSI 볼륨 스냅샷 클래스 매핑

KubeVirt CSI를 사용하면 인프라 볼륨 스냅샷 클래스를 호스팅된 클러스터에 노출할 수 있습니다.

프로세스

  • 호스팅된 클러스터에 볼륨 스냅샷 클래스를 매핑하려면 호스팅된 클러스터를 생성할 때 --infra-volumesnapshot-class-mapping 인수를 사용합니다. 다음 명령을 실행합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \ 
    1
    
      --node-pool-replicas <worker_node_count> \ 
    2
    
      --pull-secret <path_to_pull_secret> \ 
    3
    
      --memory <memory> \ 
    4
    
      --cores <cpu> \ 
    5
    
      --infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class> \ 
    6
    
      --infra-volumesnapshot-class-mapping=<infrastructure_volume_snapshot_class>/<hosted_volume_snapshot_class> 
    7
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 8Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    <infrastructure_storage_class>를 인프라 클러스터에 있는 스토리지 클래스로 바꿉니다. <hosted_storage_class>를 호스팅 클러스터에 있는 스토리지 클래스로 바꾸세요.
    7
    <infrastructure_volume_snapshot_class>를 인프라 클러스터에 있는 볼륨 스냅샷 클래스로 바꿉니다. <hosted_volume_snapshot_class>를 호스팅된 클러스터에 있는 볼륨 스냅샷 클래스로 바꿉니다.
    참고

    --infra-storage-class-mapping--infra-volumesnapshot-class-mapping 인수를 사용하지 않으면 기본 스토리지 클래스와 볼륨 스냅샷 클래스를 사용하여 호스팅된 클러스터가 생성됩니다. 따라서 인프라 클러스터에서 기본 저장소 클래스와 볼륨 스냅샷 클래스를 설정해야 합니다.

5.3.3.3. 여러 KubeVirt CSI 볼륨 스냅샷 클래스 매핑

특정 그룹에 할당하여 여러 볼륨 스냅샷 클래스를 호스팅된 클러스터에 매핑할 수 있습니다. 인프라 스토리지 클래스와 볼륨 스냅샷 클래스는 동일한 그룹에 속하는 경우에만 서로 호환됩니다.

프로세스

  • 호스팅된 클러스터에 여러 볼륨 스냅샷 클래스를 매핑하려면 호스팅된 클러스터를 생성할 때 그룹 옵션을 사용합니다. 다음 명령을 실행합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \ 
    1
    
      --node-pool-replicas <worker_node_count> \ 
    2
    
      --pull-secret <path_to_pull_secret> \ 
    3
    
      --memory <memory> \ 
    4
    
      --cores <cpu> \ 
    5
    
      --infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class>,group=<group_name> \ 
    6
    
      --infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class>,group=<group_name> \
      --infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class>,group=<group_name> \
      --infra-volumesnapshot-class-mapping=<infrastructure_volume_snapshot_class>/<hosted_volume_snapshot_class>,group=<group_name> \ 
    7
    
      --infra-volumesnapshot-class-mapping=<infrastructure_volume_snapshot_class>/<hosted_volume_snapshot_class>,group=<group_name>
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 8Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    <infrastructure_storage_class>를 인프라 클러스터에 있는 스토리지 클래스로 바꿉니다. <hosted_storage_class>를 호스팅 클러스터에 있는 스토리지 클래스로 바꾸세요. <그룹_이름>을 그룹 이름으로 바꾸세요. 예를 들어, infra-storage-class-mygroup/hosted-storage-class-mygroup,group=mygroupinfra-storage-class-mymap/hosted-storage-class-mymap,group=mymap입니다 .
    7
    <infrastructure_volume_snapshot_class>를 인프라 클러스터에 있는 볼륨 스냅샷 클래스로 바꿉니다. <hosted_volume_snapshot_class>를 호스팅된 클러스터에 있는 볼륨 스냅샷 클래스로 바꿉니다. 예를 들어, infra-vol-snap-mygroup/hosted-vol-snap-mygroup,group=mygroupinfra-vol-snap-mymap/hosted-vol-snap-mymap,group=mymap입니다 .

5.3.3.4. KubeVirt VM 루트 볼륨 구성

클러스터 생성 시 --root-volume-storage-class 인수를 사용하여 KubeVirt VM 루트 볼륨을 호스팅하는 데 사용되는 스토리지 클래스를 구성할 수 있습니다.

프로세스

  • KubeVirt VM에 대한 사용자 지정 스토리지 클래스와 볼륨 크기를 설정하려면 다음 명령을 실행하세요.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \ 
    1
    
      --node-pool-replicas <worker_node_count> \ 
    2
    
      --pull-secret <path_to_pull_secret> \ 
    3
    
      --memory <memory> \ 
    4
    
      --cores <cpu> \ 
    5
    
      --root-volume-storage-class <root_volume_storage_class> \ 
    6
    
      --root-volume-size <volume_size> 
    7
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 8Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    KubeVirt VM 루트 볼륨을 호스팅할 스토리지 클래스의 이름을 지정합니다(예: ocs-storagecluster-ceph-rbd ) .
    7
    볼륨 크기를 지정합니다(예: 64 ).

    결과적으로 PVC에 호스팅된 VM으로 생성된 호스팅 클러스터를 얻게 됩니다.

5.3.3.5. KubeVirt VM 이미지 캐싱 활성화

KubeVirt VM 이미지 캐싱을 사용하면 클러스터 시작 시간과 스토리지 사용량을 모두 최적화할 수 있습니다. KubeVirt VM 이미지 캐싱은 스마트 복제와 ReadWriteMany 액세스 모드가 가능한 스토리지 클래스 사용을 지원합니다. 스마트 클로닝에 대한 자세한 내용은 스마트 클로닝을 사용하여 데이터 볼륨 복제를 참조하세요.

이미지 캐싱은 다음과 같이 작동합니다.

  1. VM 이미지는 호스팅된 클러스터와 연결된 PVC로 가져옵니다.
  2. 클러스터에 작업자 노드로 추가된 모든 KubeVirt VM에 대해 해당 PVC의 고유한 복제본이 생성됩니다.

이미지 캐싱은 단 하나의 이미지 가져오기만 요구하므로 VM 시작 시간을 줄여줍니다. 스토리지 클래스가 복사-쓰기 복제를 지원하는 경우 전체 클러스터 스토리지 사용량을 더욱 줄일 수 있습니다.

프로세스

  • 클러스터를 생성하는 동안 이미지 캐싱을 활성화하려면 다음 명령을 실행하여 --root-volume-cache-strategy=PVC 인수를 사용합니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \ 
    1
    
      --node-pool-replicas <worker_node_count> \ 
    2
    
      --pull-secret <path_to_pull_secret> \ 
    3
    
      --memory <memory> \ 
    4
    
      --cores <cpu> \ 
    5
    
      --root-volume-cache-strategy=PVC 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 8Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    예를 들어 PVC 와 같은 이미지 캐싱 전략을 지정합니다.

5.3.3.6. KubeVirt CSI 스토리지 보안 및 격리

KubeVirt 컨테이너 스토리지 인터페이스(CSI)는 기본 인프라 클러스터의 스토리지 기능을 호스팅된 클러스터로 확장합니다. CSI 드라이버는 다음과 같은 보안 제약 조건을 사용하여 인프라 스토리지 클래스와 호스팅 클러스터에 대한 안전하고 격리된 액세스를 보장합니다.

  • 호스팅된 클러스터의 저장소는 다른 호스팅된 클러스터와 격리됩니다.
  • 호스팅된 클러스터의 워커 노드는 인프라 클러스터에 대한 직접적인 API 액세스 권한이 없습니다. 호스팅된 클러스터는 제어된 KubeVirt CSI 인터페이스를 통해서만 인프라 클러스터에 스토리지를 프로비저닝할 수 있습니다.
  • 호스팅된 클러스터는 KubeVirt CSI 클러스터 컨트롤러에 액세스할 수 없습니다. 결과적으로 호스팅된 클러스터는 호스팅된 클러스터와 연결되지 않은 인프라 클러스터의 임의의 스토리지 볼륨에 액세스할 수 없습니다. KubeVirt CSI 클러스터 컨트롤러는 호스팅된 제어 평면 네임스페이스의 포드에서 실행됩니다.
  • KubeVirt CSI 클러스터 컨트롤러의 역할 기반 액세스 제어(RBAC)는 영구 볼륨 클레임(PVC) 액세스를 호스팅된 제어 평면 네임스페이스로만 제한합니다. 따라서 KubeVirt CSI 구성 요소는 다른 네임스페이스의 저장소에 액세스할 수 없습니다.

5.3.3.7. etcd 스토리지 구성

클러스터 생성 시 --etcd-storage-class 인수를 사용하여 etcd 데이터를 호스팅하는 데 사용되는 스토리지 클래스를 구성할 수 있습니다.

프로세스

  • etcd에 대한 스토리지 클래스를 구성하려면 다음 명령을 실행하세요.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \ 
    1
    
      --node-pool-replicas <worker_node_count> \ 
    2
    
      --pull-secret <path_to_pull_secret> \ 
    3
    
      --memory <memory> \ 
    4
    
      --cores <cpu> \ 
    5
    
      --etcd-storage-class=<etcd_storage_class_name> 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    작업자 수를 지정합니다(예: 2).
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 8Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    예를 들어 lvm-storageclass 와 같이 etcd 스토리지 클래스 이름을 지정합니다. --etcd-storage-class 인수를 제공하지 않으면 기본 스토리지 클래스가 사용됩니다.

5.3.4. hcp CLI를 사용하여 NVIDIA GPU 장치 연결

OpenShift Virtualization에서 호스팅된 클러스터의 hcp 명령줄 인터페이스(CLI)를 사용하여 하나 이상의 NVIDIA 그래픽 처리 장치(GPU) 장치를 노드 풀에 연결할 수 있습니다.

중요

NVIDIA GPU 장치를 노드 풀에 연결하는 것은 기술 미리 보기 기능에 불과합니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

사전 요구 사항

프로세스

  • 다음 명령을 실행하여 클러스터 생성 중에 GPU 장치를 노드 풀에 연결할 수 있습니다.

    $ hcp create cluster kubevirt \
      --name <hosted_cluster_name> \
    1
    
      --node-pool-replicas <worker_node_count> \
    2
    
      --pull-secret <path_to_pull_secret> \
    3
    
      --memory <memory> \
    4
    
      --cores <cpu> \
    5
    
      --host-device-name="<gpu_device_name>,count:<value>" 
    6
    Copy to Clipboard Toggle word wrap
    1
    호스팅된 클러스터의 이름을 지정합니다(예: ) .
    2
    예를 들어 3과 같이 작업자 수를 지정합니다.
    3
    예를 들어 /user/name/pullsecret 과 같이 풀 시크릿의 경로를 지정합니다.
    4
    예를 들어 16Gi 와 같이 메모리 값을 지정합니다.
    5
    예를 들어 CPU에 2와 같은 값을 지정합니다.
    6
    GPU 장치 이름과 개수를 지정합니다(예: --host-device-name="nvidia-a100,count:2") . --host-device-name 인수는 인프라 노드의 GPU 장치 이름과 노드 풀의 각 가상 머신(VM)에 연결하려는 GPU 장치 수를 나타내는 선택적 개수를 사용합니다. 기본 개수는 1 입니다. 예를 들어, 2개의 GPU 장치를 3개의 노드 풀 복제본에 연결하면 노드 풀에 있는 3개의 VM이 모두 2개의 GPU 장치에 연결됩니다.
    작은 정보

    --host-device-name 인수를 여러 번 사용하여 다양한 유형의 여러 장치를 연결할 수 있습니다.

5.3.5. NodePool 리소스를 사용하여 NVIDIA GPU 장치 연결

NodePool 리소스에서 nodepool.spec.platform.kubevirt.hostDevices 필드를 구성하여 하나 이상의 NVIDIA 그래픽 처리 장치(GPU) 장치를 노드 풀에 연결할 수 있습니다.

중요

NVIDIA GPU 장치를 노드 풀에 연결하는 것은 기술 미리 보기 기능에 불과합니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

프로세스

  • 하나 이상의 GPU 장치를 노드 풀에 연결합니다.

    • 단일 GPU 장치를 연결하려면 다음 예제 구성을 사용하여 NodePool 리소스를 구성하세요.

      apiVersion: hypershift.openshift.io/v1beta1
      kind: NodePool
      metadata:
        name: <hosted_cluster_name> 
      1
      
        namespace: <hosted_cluster_namespace> 
      2
      
      spec:
        arch: amd64
        clusterName: <hosted_cluster_name>
        management:
          autoRepair: false
          upgradeType: Replace
        nodeDrainTimeout: 0s
        nodeVolumeDetachTimeout: 0s
        platform:
          kubevirt:
            attachDefaultNetwork: true
            compute:
              cores: <cpu> 
      3
      
              memory: <memory> 
      4
      
            hostDevices: 
      5
      
            - count: <count> 
      6
      
              deviceName: <gpu_device_name> 
      7
      
            networkInterfaceMultiqueue: Enable
            rootVolume:
              persistent:
                size: 32Gi
              type: Persistent
          type: KubeVirt
        replicas: <worker_node_count> 
      8
      Copy to Clipboard Toggle word wrap
      1
      호스팅된 클러스터의 이름을 지정합니다(예: ) .
      2
      호스팅된 클러스터 네임스페이스의 이름을 지정합니다(예: clusters ) .
      3
      예를 들어 CPU에 2와 같은 값을 지정합니다.
      4
      예를 들어 16Gi 와 같이 메모리 값을 지정합니다.
      5
      hostDevices 필드는 노드 풀에 연결할 수 있는 다양한 유형의 GPU 장치 목록을 정의합니다.
      6
      노드 풀의 각 가상 머신(VM)에 연결할 GPU 장치 수를 지정합니다. 예를 들어, 2개의 GPU 장치를 3개의 노드 풀 복제본에 연결하면 노드 풀에 있는 3개의 VM이 모두 2개의 GPU 장치에 연결됩니다. 기본 개수는 1 입니다.
      7
      GPU 장치 이름을 지정합니다(예: nvidia-a100 ) .
      8
      예를 들어 3과 같이 작업자 수를 지정합니다.
    • 여러 GPU 장치를 연결하려면 다음 예제 구성을 사용하여 NodePool 리소스를 구성하세요.

      apiVersion: hypershift.openshift.io/v1beta1
      kind: NodePool
      metadata:
        name: <hosted_cluster_name>
        namespace: <hosted_cluster_namespace>
      spec:
        arch: amd64
        clusterName: <hosted_cluster_name>
        management:
          autoRepair: false
          upgradeType: Replace
        nodeDrainTimeout: 0s
        nodeVolumeDetachTimeout: 0s
        platform:
          kubevirt:
            attachDefaultNetwork: true
            compute:
              cores: <cpu>
              memory: <memory>
            hostDevices:
            - count: <count>
              deviceName: <gpu_device_name>
            - count: <count>
              deviceName: <gpu_device_name>
            - count: <count>
              deviceName: <gpu_device_name>
            - count: <count>
              deviceName: <gpu_device_name>
            networkInterfaceMultiqueue: Enable
            rootVolume:
              persistent:
                size: 32Gi
              type: Persistent
          type: KubeVirt
        replicas: <worker_node_count>
      Copy to Clipboard Toggle word wrap

5.3.6. topologySpreadConstraint를 사용하여 노드 풀 VM 확산

기본적으로 노드 풀에서 생성된 KubeVirt 가상 머신(VM)은 VM을 실행할 수 있는 용량이 있는 모든 사용 가능한 노드에 예약됩니다. 기본적으로 topologySpreadConstraint 제약 조건은 여러 노드에서 VM을 예약하도록 설정됩니다.

일부 시나리오에서는 노드 풀 VM이 동일한 노드에서 실행될 수 있으며, 이로 인해 가용성 문제가 발생할 수 있습니다. 단일 노드에 VM이 분산되는 것을 방지하려면 descheduler를 사용하여 topologySpreadConstraint 제약 조건을 지속적으로 준수하여 VM을 여러 노드에 분산합니다.

사전 요구 사항

  • Kube Descheduler Operator를 설치했습니다. 자세한 내용은 "디스케줄러 설치"를 참조하세요.

프로세스

  • 다음 명령을 입력하여 KubeDescheduler 사용자 지정 리소스(CR)를 열고 KubeDescheduler CR을 수정하여 SoftTopologyAndDuplicatesDevKubeVirtRelieveAndMigrate 프로필을 사용하여 topologySpreadConstraint 제약 조건 설정을 유지합니다.

    KubeDescheduler CR이라는 이름의 클러스터는 openshift-kube-descheduler-operator 네임스페이스에서 실행됩니다.

    $ oc edit kubedescheduler cluster -n openshift-kube-descheduler-operator
    Copy to Clipboard Toggle word wrap

    KubeDescheduler 구성 예시

    apiVersion: operator.openshift.io/v1
    kind: KubeDescheduler
    metadata:
      name: cluster
      namespace: openshift-kube-descheduler-operator
    spec:
      mode: Automatic
      managementState: Managed
      deschedulingIntervalSeconds: 30 
    1
    
      profiles:
      - SoftTopologyAndDuplicates   
    2
    
      - DevKubeVirtRelieveAndMigrate          
    3
    
      profileCustomizations:
        devDeviationThresholds: AsymmetricLow
        devActualUtilizationProfile: PrometheusCPUCombined
    # ...
    Copy to Clipboard Toggle word wrap

    1
    descheduler 실행 주기 사이의 초 수를 설정합니다.
    2
    이 프로필은 소프트 토폴로지 제약 조건인 whenUnsatisfiable: ScheduleAnyway를 따르는 포드를 제거합니다.
    3
    이 프로필은 노드 간의 리소스 사용을 균형 있게 조절하고 RemovePodsHavingTooManyRestartsLowNodeUtilization 과 같은 전략을 활성화합니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat