5.3. OpenShift Virtualization에서 호스트된 컨트롤 플레인 관리


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

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

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

사전 요구 사항

리소스에서 직접 kubeconfig 파일 및 인증 정보를 가져와 호스팅된 클러스터에 액세스하려면 호스팅 클러스터의 액세스 시크릿을 숙지해야 합니다. 호스팅된 클러스터(호스트링) 네임스페이스에는 호스팅 된 클러스터 리소스 및 액세스 보안이 포함되어 있습니다. 호스팅된 컨트롤 플레인 네임스페이스는 호스팅된 컨트롤 플레인이 실행되는 위치입니다.

보안 이름 형식은 다음과 같습니다.

  • kubeconfig 시크릿: < hosted_cluster_namespace>-<name>-admin-kubeconfig (clusters-hypershift-demo-admin-kubeconfig)
  • kubeadmin 암호 시크릿: < hosted_cluster_namespace>-<name>-kubeadmin-password (clusters-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입니다. 추가할 수 있는 최대 노드 수는 플랫폼에 바인딩될 수 있습니다. 예를 들어 에이전트 플랫폼을 사용하는 경우 사용 가능한 에이전트 수에 따라 최대 노드 수가 바인딩됩니다.

  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. 다음 명령을 입력하여 새 노드가 Ready 상태에 있는지 확인할 수 있습니다.

    $ 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. 추가 용량을 요구하지 않고 몇 분 정도 경과할 때까지 기다립니다. 에이전트 플랫폼에서 에이전트는 해제되어 재사용될 수 있습니다. 다음 명령을 입력하여 노드가 제거되었는지 확인할 수 있습니다.

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

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

고급 스토리지 구성을 제공하지 않으면 KubeVirt VM(가상 머신) 이미지, KubeVirt CSI(Container Storage Interface) 매핑 및 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는 RWX( ReadWriteMany ) 액세스를 수행할 수 있는 인프라 스토리지 클래스 매핑을 지원합니다. 클러스터 생성 중에 인프라 스토리지 클래스를 호스팅된 스토리지 클래스에 매핑할 수 있습니다.

프로세스

  • 인프라 스토리지 클래스를 호스팅된 스토리지 클래스에 매핑하려면 다음 명령을 실행하여 --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 블록

지원됨

Filesystem 볼륨 모드로 인해 호스팅 블록 모드 성능이 저하되므로 Block 모드를 사용합니다. RWX Block 볼륨 모드는 호스팅된 클러스터가 OpenShift Container Platform 4.16 이상인 경우에만 지원됩니다.

RWO 블록 스토리지

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

지원되지 않음

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

RWO FileSystem

RWO 블록 또는 파일 시스템

지원되지 않음

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

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
    & lt;infrastructure_storage_class >를 인프라 클러스터에 있는 스토리지 클래스로 바꿉니다. & lt;hosted_storage_class& gt;를 호스트된 클러스터에 있는 스토리지 클래스로 바꿉니다.
    7
    & lt;infrastructure_volume_snapshot_class >를 인프라 클러스터에 있는 볼륨 스냅샷 클래스로 바꿉니다. & lt;hosted_volume_snapshot_class >를 호스팅된 클러스터에 있는 볼륨 스냅샷 클래스로 바꿉니다.
    참고

    --infra-storage-class-mapping--infra-volumesnapshot-class-mapping 인수를 사용하지 않는 경우 호스트된 클러스터는 기본 스토리지 클래스 및 볼륨 스냅샷 클래스를 사용하여 생성됩니다. 따라서 인프라 클러스터에서 기본 스토리지 클래스와 볼륨 스냅샷 클래스를 설정해야 합니다.

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

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

프로세스

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

    $ 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
    & lt;infrastructure_storage_class >를 인프라 클러스터에 있는 스토리지 클래스로 바꿉니다. & lt;hosted_storage_class& gt;를 호스트된 클러스터에 있는 스토리지 클래스로 바꿉니다. 그룹 이름으로 바꿉니다 . 예를 들어 infra-storage-class-mygroup/hosted-storage-class-mygroup,group=mygroupinfra-storage-class-mymap/hosted-storage-class-mymap,group=mymap.
    7
    & lt;infrastructure_volume_snapshot_class >를 인프라 클러스터에 있는 볼륨 스냅샷 클래스로 바꿉니다. & lt;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. 해당 PVC의 고유한 복제본은 클러스터에 작업자 노드로 추가되는 모든 KubeVirt VM에 대해 생성됩니다.

이미지 캐싱은 단일 이미지 가져오기만 요구하여 VM 시작 시간을 줄입니다. 스토리지 클래스가 COW(Copy-On-Write) 복제를 지원하는 경우 전체 클러스터 스토리지 사용량을 추가로 줄일 수 있습니다.

프로세스

  • 이미지 캐싱을 활성화하려면 클러스터 생성 중에 다음 명령을 실행하여 --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(Container Storage Interface)는 기본 인프라 클러스터의 스토리지 기능을 호스팅된 클러스터로 확장합니다. CSI 드라이버는 다음 보안 제약 조건을 사용하여 인프라 스토리지 클래스 및 호스팅 클러스터에 대한 안전하고 격리된 액세스를 보장합니다.

  • 호스트 클러스터의 스토리지는 다른 호스팅 클러스터와 격리됩니다.
  • 호스트 클러스터의 작업자 노드에는 인프라 클러스터에 대한 직접 API 액세스 권한이 없습니다. 호스트 클러스터는 제어된 KubeVirt CSI 인터페이스를 통해서만 인프라 클러스터에 스토리지를 프로비저닝할 수 있습니다.
  • 호스트된 클러스터는 KubeVirt CSI 클러스터 컨트롤러에 액세스할 수 없습니다. 결과적으로 호스팅된 클러스터는 호스팅된 클러스터와 연결되지 않은 인프라 클러스터의 임의의 스토리지 볼륨에 액세스할 수 없습니다. KubeVirt CSI 클러스터 컨트롤러는 호스팅된 컨트롤 플레인 네임스페이스의 Pod에서 실행됩니다.
  • 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
    etcd 스토리지 클래스 이름을 지정합니다(예: lvm-storageclass ). --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개의 노드 풀 복제본에 연결하면 노드 풀의 모든 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
      호스팅된 클러스터 네임스페이스의 이름을 지정합니다(예: 클러스터 ).
      3
      CPU 값을 지정합니다(예: 2 ).
      4
      메모리 값을 지정합니다(예: 16Gi ).
      5
      hostDevices 필드는 노드 풀에 연결할 수 있는 다양한 유형의 GPU 장치 목록을 정의합니다.
      6
      노드 풀의 각 VM(가상 머신)에 연결할 GPU 장치 수를 지정합니다. 예를 들어 2개의 GPU 장치를 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. KubeVirt 가상 머신 제거

GPU 패스스루를 사용할 때와 같이 KubeVirt VM(VM)을 실시간 마이그레이션할 수 없는 경우 호스트된 클러스터의 NodePool 리소스와 동시에 VM을 제거해야 합니다. 그렇지 않으면 워크로드에서 컴퓨팅 노드를 드레이닝하지 않고 종료할 수 있습니다. 이는 OpenShift Virtualization Operator를 업그레이드하는 경우에도 발생할 수 있습니다. 동기화된 재시작을 수행하려면 하이퍼컨버지드 리소스에서 evictionStrategy 매개변수를 설정하여 워크로드에서 드레이닝된 VM만 재부팅되도록 할 수 있습니다.

프로세스

  1. 하이퍼컨버지드 리소스 및 evictionStrategy 매개변수에 허용되는 값에 대한 자세한 내용을 보려면 다음 명령을 입력합니다.

    $ oc explain hyperconverged.spec.evictionStrategy
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 하이퍼컨버지드 리소스를 패치합니다.

    $ oc -n openshift-cnv patch hyperconverged kubevirt-hyperconverged \
      --type=merge \
      -p '{"spec": {"evictionStrategy": "External"}}'
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 입력하여 워크로드 업데이트 전략 및 워크로드 업데이트 방법을 패치합니다.

    $ oc -n openshift-cnv patch hyperconverged kubevirt-hyperconverged \
      --type=merge \
      -p '{"spec": {"workloadUpdateStrategy": {"workloadUpdateMethods": ["LiveMigrate","Evict"]}}}'
    Copy to Clipboard Toggle word wrap

    이 패치를 적용하면 가능한 경우 VM을 실시간 마이그레이션해야 하며 실시간으로 마이그레이션할 수 없는 VM만 제거되도록 지정합니다.

검증

  • 다음 명령을 입력하여 패치 명령이 제대로 적용되었는지 확인합니다.

    $ oc -n openshift-cnv get hyperconverged kubevirt-hyperconverged -ojsonpath='{.spec.evictionStrategy}'
    Copy to Clipboard Toggle word wrap

    출력 예

    External
    Copy to Clipboard Toggle word wrap

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

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

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

사전 요구 사항

  • Kube Descheduler Operator가 설치되어 있어야 합니다. 자세한 내용은 "디스케줄러 설치"를 참조하십시오.

프로세스

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

    cluster 라는 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
    
      - KubeVirtRelieveAndMigrate          
    3
    
      profileCustomizations:
        devDeviationThresholds: AsymmetricLow
        devActualUtilizationProfile: PrometheusCPUCombined
    # ...
    Copy to Clipboard Toggle word wrap

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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat