NVIDIA GPU 리소스를 RHCOS 워커 노드로 마이그레이션하기

가상 사설 클라우드

NVIDIA GPU 운영자 리소스를 RHEL 8 GPU 워커 노드에서 RHCOS 워커 노드로 마이그레이션하는 방법에 대한 다음 단계를 검토하세요.

NVIDIA GPU 연산자는 다음 리소스로 구성됩니다:

  • gpu-feature-discovery
  • nvidia-container-toolkit-daemonset
  • nvidia-cuda-validator
  • nvidia-dcgm
  • nvidia-dcgm-exporter
  • nvidia-device-plugin-daemonset
  • nvidia-driver-daemonset
  • nvidia-node-status-exporter
  • nvidia-operator-validator

주요 관심 구성 요소는 nvidia-driver-daemonset 입니다. 이 컴포넌트는 GPU 워커 노드에 GPU 드라이버를 설치하는 역할을 담당합니다. 이러한 드라이버는 RHEL 8과 RHCOS 워커 노드를 대상으로 할 때 다르게 설치됩니다.

NVIDIA GPU 운영자의 공식 성명: Kubernetes 클러스터에서 GPU 워크로드를 실행하는 모든 작업자 노드 또는 노드 그룹은 NVIDIA GPU 드라이버 컨테이너를 사용하려면 동일한 운영 체제 버전을 실행해야 합니다. 또는 노드에 NVIDIA GPU 드라이버를 사전 설치하면 다른 운영 체제를 실행할 수 있습니다. 자세한 내용은 NVIDIA GPU 연산자 설치하기를 참조하세요.

NVIDIA GPU 운영자는 서로 다른 워커 노드 운영 체제에서 드라이버 설치를 동시에 관리할 수 없습니다. 이 제한은 GPU 드라이버 설치가 NVIDIA GPU 운영자가 단독으로 관리하는 경우 워커 노드 운영 체제를 변경할 때 드라이버 설치의 전체 마이그레이션이 필요하다는 의미입니다.

다음 단계를 완료하여 NVIDIA GPU 운영자 드라이버 설치를 RHEL 8에서 RHCOS 워커 노드로 마이그레이션합니다. 이 예제에서는 특히 다음 클러스터 구성에 대한 마이그레이션 단계를 설명합니다:

초기 환경 세부 정보

RHEL 8 워커 노드가 있는 VPC의 Red Hat OpenShift on IBM Cloud 버전 4.17 을 RHCOS 워커 노드가 있는 버전 4.18 으로 마이그레이션하기 위한 세부 사항 및 참고 사항을 검토하세요.

버전 4.18 은 RHCOS 및 RHEL 9만 지원합니다.

시작하기 전에 클러스터가 다음 요구 사항을 충족하는지 확인하세요.

  • NVIDIA GPU 플레이버를 사용하는 RHEL 8 워커 노드가 있는 4.17 VPC 클러스터.
  • NVIDIA GPU 연산자, ClusterPolicy, 및 피연산자가 모두 설치되어 있고 Ready.
  1. 자세한 내용은 nvidia-gpu-operator 에서 확인하세요.
    oc get po -n nvidia-gpu-operator -o wide
    
    출력 예
    NAME                                       READY   STATUS      RESTARTS   AGE     IP               NODE          NOMINATED NODE   READINESS GATES
    gpu-feature-discovery-ng7zn                1/1     Running     0          6m6s    172.23.145.152   10.240.0.15   <none>           <none>
    gpu-operator-678b489684-7zgkq              1/1     Running     0          45h     172.23.145.135   10.240.0.15   <none>           <none>
    nvidia-container-toolkit-daemonset-j4dzs   1/1     Running     0          6m6s    172.23.145.143   10.240.0.15   <none>           <none>
    nvidia-cuda-validator-l44mz                0/1     Completed   0          2m28s   172.23.145.236   10.240.0.15   <none>           <none>
    nvidia-dcgm-7sfvn                          1/1     Running     0          6m7s    172.23.145.180   10.240.0.15   <none>           <none>
    nvidia-dcgm-exporter-s5k48                 1/1     Running     0          6m6s    172.23.145.172   10.240.0.15   <none>           <none>
    nvidia-device-plugin-daemonset-xhds2       1/1     Running     0          6m6s    172.23.145.191   10.240.0.15   <none>           <none>
    nvidia-driver-daemonset-mjqls              1/1     Running     0          7m1s    172.23.145.145   10.240.0.15   <none>           <none>
    nvidia-node-status-exporter-5kvs4          1/1     Running     0          7m16s   172.23.145.235   10.240.0.15   <none>           <none>
    nvidia-operator-validator-pz7wm            1/1     Running     0          6m7s    172.23.145.153   10.240.0.15   <none>           <none>
    
  2. gpu-cluster-policy 에 대한 자세한 내용은 ready 으로 확인하시기 바랍니다.
    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    
    출력 예
    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    

1단계: 클러스터 마스터 업데이트

마스터를 업데이트하려면 다음 명령을 실행하십시오.

ibmcloud oc cluster master update --cluster <clusterNameOrID> --version 4.18_openshift

현재로서는 작업자 노드를 4.18 로 업그레이드하지 마세요. 현재로서는 RHEL 8 작업자를 4.17 에 계속 유지하세요.

2단계: RHCOS 클러스터 워커 풀 만들기

  1. 다음 명령을 실행하여 RHCOS 워커 풀을 생성합니다.

    ibmcloud oc worker-pool create vpc-gen2 \
        --cluster <clusterNameOrID> \
        --name <workerPoolName> \
        --flavor <workerNodeFlavor> \
        --size-per-zone <sizePerZoneCount> \
        --operating-system RHCOS
    

이 RHCOS 워커 풀에 영역을 추가하지 마세요. 이 작업자 풀에는 작업자가 없어야 합니다.

3단계: RHCOS 워커 풀에 워커 풀 레이블 추가하기

RHCOS 워커 풀에 다음 레이블을 추가하세요.

워커 풀에 레이블을 추가하면 워커 노드를 클러스터링할 수 있기 전에 노드 레이블이 존재할 수 있습니다. 이렇게 하면 NVIDIA GPU 리소스가 처음부터 자동으로 예약되지 않습니다. 드라이버를 설치할 수 없는 워커 노드에 NVIDA GPU 리소스가 예약되어 있으면 ClusterPolicy 리소스의 상태가 저하됩니다. NVIDIA GPU 운영자가 RHEL 8 설치 방법을 사용하도록 구성되어 있기 때문에 아직 RHCOS 워커 노드에 드라이버를 설치할 수 없습니다.

다음 명령을 실행하여 작업자 풀에 레이블을 추가합니다.

ibmcloud oc worker-pool label set \
    --cluster <clusterNameOrID> \
    --worker-pool <workerPoolNameOrID> \
    --label nvidia.com/gpu.deploy.operands=false \
    --label nvidia.com/gpu.deploy.driver=false

4단계: 클러스터에 RHCOS 워커 노드 추가하기

클러스터에 용량을 추가하여 워크로드 마이그레이션을 허용하세요. 워커 풀에 영역을 추가하면 워커 노드가 프로비저닝을 시작하고 클러스터에 참여하게 됩니다. NVIDIA GPU 리소스는 아직 RHCOS 워커 노드에 배포되지 않았습니다.

ibmcloud oc zone add vpc-gen2 \
    --cluster <clusterNameOrID> \
    --worker-pool <workerPoolNameOrID> \
    --subnet-id <vpcSubnetID> \
    --zone <vpcZone>

이 시점에서 클러스터에서 RHCOS 워커 노드를 사용하여 마이그레이션을 시작할 수 있습니다.

5단계: RHEL 8 워커 노드에서 드라이버 설치 관리자를 관리되지 않음으로 변경합니다

RHEL 8 워커 노드에 nvidia.com/gpu.deploy.driver=false 레이블을 추가합니다. 이 레이블은 기존 드라이버 설치 관리자 파드를 RHEL 8 워커에서 스케줄을 해제합니다. 드라이버를 제거해서는 안 됩니다. 장치 플러그인을 포함한 다른 피연산자는 RHEL 8 워커에 남아 있습니다. ClusterPolicy 상태는 준비된 상태로 유지됩니다. 드라이버가 여전히 설치되어 있고 장치 플러그인이 실행 중이므로 GPU 워크로드는 계속 작동합니다.

  1. nvidia.com/gpu.deploy.driver=false 을 RHEL 8 워커 노드에 추가합니다.

    개별 워커 노드에 레이블을 지정하려면:

    oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=false"
    

    전체 작업자 풀에 레이블을 지정합니다:

    ibmcloud oc worker-pool label set \
        --cluster <clusterNameOrID> \
        --worker-pool <workerPoolNameOrID> \
        --label nvidia.com/gpu.deploy.driver=false
    
  2. 목록 파드를 나열하여 레이블을 확인합니다.

    oc get po -n nvidia-gpu-operator -o wide
    

    출력 예

    NAME                                       READY   STATUS        RESTARTS   AGE     IP               NODE          NOMINATED NODE   READINESS GATES
    gpu-feature-discovery-ng7zn                1/1     Running       0          4h27m   172.23.145.152   10.240.0.15   <none>           <none>
    gpu-operator-678b489684-7zgkq              1/1     Running       0          2d2h    172.23.145.135   10.240.0.15   <none>           <none>
    nvidia-container-toolkit-daemonset-j4dzs   1/1     Running       0          4h27m   172.23.145.143   10.240.0.15   <none>           <none>
    nvidia-cuda-validator-l44mz                0/1     Completed     0          4h24m   172.23.145.236   10.240.0.15   <none>           <none>
    nvidia-dcgm-7sfvn                          1/1     Running       0          4h27m   172.23.145.180   10.240.0.15   <none>           <none>
    nvidia-dcgm-exporter-s5k48                 1/1     Running       0          4h27m   172.23.145.172   10.240.0.15   <none>           <none>
    nvidia-device-plugin-daemonset-xhds2       1/1     Running       0          4h27m   172.23.145.191   10.240.0.15   <none>           <none>
    nvidia-driver-daemonset-mjqls              1/1     Terminating   0          4h28m   172.23.145.145   10.240.0.15   <none>           <none>
    nvidia-node-status-exporter-5kvs4          1/1     Running       0          4h28m   172.23.145.235   10.240.0.15   <none>           <none>
    nvidia-operator-validator-pz7wm            1/1     Running       0          4h27m   172.23.145.153   10.240.0.15   <none>           <none>
    
  3. gpu-cluster-policyready 인지 확인합니다.

    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    

    출력 예

    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    

6단계: 드라이버 설치 프로그램 및 기타 피연산자를 RHCOS 워커 노드에 예약하기

nvidia.com/gpu.deploy.driver=truenvidia.com/gpu.deploy.operands=true 을 RHCOS 작업자에게 추가하세요.

이러한 레이블을 추가하면 드라이버 설치 프로그램, 장치 플러그인 및 기타 피연산자를 RHCOS 워커 노드에 예약하려고 시도합니다. 대부분의 파드는 드라이버 설치 프로그램 실패로 인해 init 상태입니다. 드라이버 설치 프로그램이 RHEL 8 방법을 사용하여 드라이버를 설치하려고 하기 때문에 실패하고 있습니다.

label nodes 명령을 실행하여 레이블을 추가합니다.

개별 워커 노드에 레이블을 지정하려면:

oc label nodes <nodeName> "nvidia.com/gpu.deploy.driver=true"
oc label nodes <nodeName> "nvidia.com/gpu.deploy.operands=true"

전체 작업자 풀에 레이블을 지정합니다:

ibmcloud oc worker-pool label set \
    --cluster <clusterNameOrID> \
    --worker-pool <workerPoolNameOrID> \
    --label nvidia.com/gpu.deploy.driver=true

레이블을 추가한 후 다음 단계를 계속 진행합니다.

7단계: 드라이버 설치 프로그램을 RHEL 8에서 RHCOS 설치 방법으로 변환하기

삭제 nvidia-driver-installer DaemonSet. 이 DaemonSet 은 RHEL 8에만 해당되며 더 이상 필요하지 않습니다. GPU 운영자는 클러스터에 RHCOS 워커 노드가 있는지 조정하고 감지합니다. GPU 운영자는 드라이버 인스톨러 DaemonSet, 를 다시 생성하지만, 이번에는 OpenShift 드라이버 툴킷을 기반으로 하는 RHCOS 설치 방법을 사용합니다.

  1. 삭제 nvidia-driver-installer DaemonSet. DaemonSet, 을 삭제한 후에는 RHEL 8 GPU 워커를 추가하거나 다시 로드하지 마세요.

    oc delete daemonset -n nvidia-gpu-operator nvidia-driver-installer
    
  2. 파드를 나열하고 GPU 드라이버가 RHCOS 워커 노드에 설치되어 있고 나머지 피연산자가 ready 인지 확인한다.

    oc get po -n nvidia-gpu-operator -o wide
    

    출력 예

    NAME                                                  READY   STATUS      RESTARTS      AGE     IP               NODE                                                     NOMINATED NODE   READINESS GATES
    gpu-feature-discovery-h4bhx                           1/1     Running     0             18m     172.23.137.119   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    gpu-feature-discovery-ng7zn                           1/1     Running     0             4h58m   172.23.145.152   10.240.0.15                                              <none>           <none>
    gpu-operator-678b489684-7zgkq                         1/1     Running     0             2d2h    172.23.145.135   10.240.0.15                                              <none>           <none>
    nvidia-container-toolkit-daemonset-79j86              1/1     Running     0             18m     172.23.137.115   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-container-toolkit-daemonset-j4dzs              1/1     Running     0             4h58m   172.23.145.143   10.240.0.15                                              <none>           <none>
    nvidia-cuda-validator-l44mz                           0/1     Completed   0             4h55m   172.23.145.236   10.240.0.15                                              <none>           <none>
    nvidia-cuda-validator-xgscz                           0/1     Completed   0             15m     172.23.137.121   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-dcgm-7sfvn                                     1/1     Running     0             4h58m   172.23.145.180   10.240.0.15                                              <none>           <none>
    nvidia-dcgm-9rpnz                                     1/1     Running     0             18m     172.23.137.117   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-dcgm-exporter-s5k48                            1/1     Running     0             4h58m   172.23.145.172   10.240.0.15                                              <none>           <none>
    nvidia-dcgm-exporter-x8vlc                            1/1     Running     2 (14m ago)   18m     172.23.137.116   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-device-plugin-daemonset-7g5hz                  1/1     Running     0             18m     172.23.137.120   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-device-plugin-daemonset-xhds2                  1/1     Running     0             4h58m   172.23.145.191   10.240.0.15                                              <none>           <none>
    nvidia-driver-daemonset-416.94.202502260030-0-dkcmh   2/2     Running     0             19m     172.23.137.107   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-node-status-exporter-5kvs4                     1/1     Running     0             5h      172.23.145.235   10.240.0.15                                              <none>           <none>
    nvidia-node-status-exporter-94v9f                     1/1     Running     0             19m     172.23.137.110   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-operator-validator-4wk6z                       1/1     Running     0             18m     172.23.137.118   test-coajphf20ooqeeg7u9dg-btsstagevpc-gx316x8-000239a8   <none>           <none>
    nvidia-operator-validator-pz7wm                       1/1     Running     0             4h58m   172.23.145.153   10.240.0.15                                              <none>           <none>
    
  3. gpu-cluster-policy 이 준비되었는지 확인합니다.

    oc get clusterpolicies.nvidia.com gpu-cluster-policy
    

    출력 예

    NAME                 STATUS   AGE
    gpu-cluster-policy   ready    2025-03-07T03:07:00Z
    
  4. 노드를 설명하고 할당 가능한 GPU를 확인합니다.

    oc describe no
    

    출력 예

    ...
    Capacity:
    nvidia.com/gpu:     1
    ...
    Allocatable:
    nvidia.com/gpu:     1
    

8단계: GPU 종속 워크로드를 RHCOS 워커 노드로 마이그레이션하기

이제 RHCOS GPU 워커 노드에 GPU 드라이버가 설치되어 스케줄링할 준비가 되었으므로 GPU 종속 워크로드를 RHCOS 워커 노드로 마이그레이션합니다.

  • 노드를 코딩하고 개별 파드를 삭제하여 포드별로 마이그레이션하세요.

    oc adm cordon no/<nodeName>
    oc delete po -n <namespace> <podName>
    
  • Node 에 따라 노드를 배출하여 마이그레이션합니다. 자세한 내용은 노드 안전하게 배수하기를 참조하세요.

  • 전체 RHEL 작업자 풀을 삭제하여 작업자 풀별로 마이그레이션하세요.

    ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>
    

9단계: RHCOS 워커 풀에서 레이블 제거하기

이전 단계에서 추가한 작업자 풀 레이블을 제거합니다. 이렇게 제거하면 이후 프로비저닝된 새 RHCOS 워커 노드에는 이러한 레이블이 없으며 NVIDIA GPU 구성 요소가 자동으로 설치됩니다.

10단계: RHEL 8 작업자 풀 규모 축소 또는 삭제

이제 NVIDIA GPU 드라이버 마이그레이션이 완료되었습니다. RHEL 워커 풀을 축소하거나 삭제할 수 있습니다.

ibmcloud oc worker-pool rm --cluster <clusterNameOrID> --worker-pool <workerPoolNameOrID>