자체 관리형 NVIDIA GPU 드라이버로 마이그레이션하기( Kubernetes ) 1.36
Kubernetes 버전 1.36 부터 IBM Cloud Kubernetes Service 는 더 이상 GPU 워커 노드에 NVIDIA GPU 드라이버를 자동으로 설치하지 않습니다. GPU 워크로드를 실행하려면 GPU 드라이버를 직접 설치하고 관리해야 합니다.
변경 내용
- 1.36 버전 및 이후 버전
- GPU 드라이버는 신규 또는 교체된 GPU 워커 노드에 사전 설치되지 않습니다. 다음 구성 요소를 설치하고 유지 관리해야 합니다:
- NVIDIA 커널 드라이버
- 컨테이너 런타임 구성 요소(예:
nvidia-container-toolkit) - Kubernetes 장치 플러그인
- 버전 1.35 및 이전 버전
- GPU 드라이버는 모든 GPU 워커 노드에서 IBM 에 의해 자동으로 설치 및 관리됩니다.
어떤 영향이 있나요?
GPU 리소스를 요청하는 파드는 워커 노드에 필요한 GPU 드라이버를 설치할 때까지 Pending 상태로 유지된다. 드라이버가 설치되면 보류 중인 파드는 자동으로 Running 상태로 전환됩니다.
마이그레이션 프로세스 이해
자체 관리 GPU 드라이버로의 마이그레이션은 특정 순서에 따라 진행되므로 업그레이드 중에도 GPU 워크로드를 계속 실행할 수 있습니다:
-
설치 전 단계: 1.35 이전 버전이 실행 중인 상태에서 클러스터에 NVIDIA GPU 운영자를 설치합니다. 설치하는 동안 기존 GPU 노드에 레이블을 지정하여 운영자가 사전 설치된 드라이버와 충돌할 수 있는 드라이버 리소스를 배포하지 못하도록 합니다.
-
컨트롤 플레인 업그레이드: 클러스터 컨트롤 플레인을 버전 1.36 으로 업그레이드합니다.
-
워커 노드 업그레이드: 각 워커 노드를 교체하여 버전 업그레이드 1.36. 이렇게 하면 드라이버 배포를 방해하는 레이블이 자동으로 제거됩니다. 이를 통해 NVIDIA GPU 운영자는 새 노드에 드라이버 스택을 배포할 수 있습니다.
-
자동 워크로드 복구: 운영자가 교체된 노드에 드라이버를 설치하면 보류 중인 모든 GPU 워크로드가 자동으로
Running상태로 전환됩니다.
1.36 버전이 출시되기 전에 마이그레이션 준비하기
1.36 버전이 릴리스되기 전에 사전 설치 단계를 완료하여 클러스터를 보다 원활하게 마이그레이션할 수 있도록 준비할 수 있습니다:
-
운영자가 사전 설치된 드라이버와 충돌할 수 있는 리소스를 배포하지 않도록 기존 GPU 워커 노드에 레이블을 지정하세요.
kubectl label node/<node_name> nvidia.com/gpu.deploy.operands=false kubectl label node/<node_name> nvidia.com/gpu.deploy.driver=false -
NVIDIA GPU 오퍼레이터 설치 가이드에 따라 NVIDIA GPU 오퍼레이터를 설치합니다.
-
운영자가 설치되어 있지만 레이블이 지정된 노드에 드라이버 리소스를 배포하지 않았는지 확인합니다.
kubectl get pods -n gpu-operator -o wide
이러한 준비 단계를 일찍 완료하면 실제 버전 1.36 으로 업그레이드하는 동안 필요한 작업을 줄일 수 있습니다. 1.36 버전을 사용할 수 있게 되면 컨트롤 플레인을 업그레이드하고 워커 노드만 교체하면 됩니다.
시작하기 전에
- NVIDIA GPU 운영자 문서를 검토하세요.
- 클러스터 관리자 액세스 권한이 있는지 확인합니다.
- 클러스터 구성(단일 GPU 노드 대 다중 GPU 노드)에 따라 업그레이드 전략을 계획하세요.
마이그레이션 예시
다음 예시는 GPU 노드 수에 따라 클러스터를 마이그레이션하는 방법을 보여줍니다.
예 1: 클러스터의 단일 GPU 노드
이 예는 단일 GPU 노드로 클러스터를 마이그레이션하는 방법을 보여줍니다. 업그레이드 중에는 유일한 GPU 노드를 사용할 수 없으므로 임시 두 번째 GPU 워커를 추가하여 용량을 유지합니다.
1단계: 초기 클러스터 상태 가져오기
-
클러스터 컨트롤 플레인 버전을 확인합니다.
ibmcloud ks cluster get -c CLUSTER_NAME버전을 보여주는 출력 예시 1.35:
Master Status: Ready State: deployed Health: normal Version: 1.35.4_1528 -
워커 노드 버전을 확인합니다.
ibmcloud ks worker ls -c <cluster_name>단일 GPU 노드를 보여주는 출력 예시입니다:
ID Primary IP Flavor State Status Zone Version Operating System test-d8397vk20kb65iocenn0-btspstggput-default-000001e4 10.240.0.64 gx3.16x80.l4 normal Ready us-south-1 1.35.4_1528 UBUNTU_24_64
2단계: NVIDIA GPU 연산자 설치
1.36 버전을 사용하기 전에 마이그레이션 준비하기의 단계를 수행했다면 이미 이 단계를 완료했을 수 있습니다.
-
운영자가 사전 설치된 드라이버와 충돌할 수 있는 리소스를 배포하지 않도록 기존 GPU 워커 노드에 레이블을 지정합니다.
kubectl label node/10.240.0.64 nvidia.com/gpu.deploy.operands=false kubectl label node/10.240.0.64 nvidia.com/gpu.deploy.driver=false -
NVIDIA Helm 리포지토리를 추가하고 GPU 연산자를 설치합니다.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo update helm install --wait --generate-name -n gpu-operator --create-namespace nvidia/gpu-operator -
GPU 오퍼레이터 포드가 실행 중인지 확인하십시오. 드라이버 인스톨러, 디바이스 플러그인, 컨테이너 툴킷, DCGM 익스포터는 레이블이 지정된 노드에서 실행되지 않아야 합니다.
kubectl get pods -n gpu-operator -o wide출력 예:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-operator-1778819096-node-feature-discovery-gc-84d98bd6nqw2z 1/1 Running 0 2m21s 172.17.64.94 10.240.0.64 <none> <none> gpu-operator-1778819096-node-feature-discovery-master-6b6cpnm9w 1/1 Running 0 2m21s 172.17.64.93 10.240.0.64 <none> <none> gpu-operator-1778819096-node-feature-discovery-worker-hm7ft 1/1 Running 0 2m21s 172.17.64.91 10.240.0.64 <none> <none> gpu-operator-76c686b9df-kn4dw 1/1 Running 0 2m21s 172.17.64.92 10.240.0.64 <none> <none>
3단계: 클러스터 컨트롤 플레인 업그레이드하기
-
클러스터 컨트롤 플레인을 버전 1.36 으로 업그레이드합니다.
ibmcloud ks cluster master update --cluster <cluster_name> --version 1.36.0 -
컨트롤 플레인 업그레이드를 확인합니다.
ibmcloud ks cluster get -c <cluster_name>출력 예:
Master Status: Ready State: deployed Health: normal Version: 1.36.0_1506
4단계: 임시 GPU 워커 노드 추가하기
-
Kubernetes 버전 1.36 을 사용하여 클러스터에 임시 두 번째 GPU 워커를 추가합니다.
ibmcloud ks worker-pool create vpc-gen2 --name temp-gpu-pool --cluster <cluster_name> --flavor gx3.16x80.l4 --size-per-zone 1 --zone us-south-1 -
임시 노드가 준비되었는지 확인합니다.
ibmcloud ks worker ls -c <cluster_name>원본 노드와 임시 노드를 모두 보여주는 출력 예시입니다:
ID Primary IP Flavor State Status Zone Version Operating System test-d8397vk20kb65iocenn0-btspstggput-default-000001e4 10.240.0.64 gx3.16x80.l4 normal Ready us-south-1 1.35.4_1528 UBUNTU_24_64 test-d8397vk20kb65iocenn0-tempgpupool-default-00000371 10.240.0.72 gx3.16x80.l4 normal Ready us-south-1 1.36.0_1507 UBUNTU_24_64 -
새 임시 노드에서 GPU 오퍼레이터 파드가 실행 중인지 확인합니다.
kubectl get pods -n gpu-operator -o wide임시 노드에서 실행 중인 드라이버 및 장치 플러그인을 보여주는 출력 예시입니다:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-mw5km 1/1 Running 0 4m36s 172.17.116.201 10.240.0.72 <none> <none> nvidia-container-toolkit-daemonset-ns6p8 1/1 Running 0 4m36s 172.17.116.199 10.240.0.72 <none> <none> nvidia-cuda-validator-vgj45 0/1 Completed 0 96s 172.17.116.203 10.240.0.72 <none> <none> nvidia-dcgm-exporter-52cwh 1/1 Running 0 4m36s 172.17.116.204 10.240.0.72 <none> <none> nvidia-device-plugin-daemonset-2ql7x 1/1 Running 0 4m36s 172.17.116.202 10.240.0.72 <none> <none> nvidia-driver-daemonset-zql6m 1/1 Running 0 5m29s 172.17.116.197 10.240.0.72 <none> <none> nvidia-operator-validator-44xtz 1/1 Running 0 4m36s 172.17.116.200 10.240.0.72 <none> <none> -
임시 노드에서 GPU 준비 상태를 확인합니다.
kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, allocatable: .status.allocatable}'
5단계: 워크로드 마이그레이션 및 원본 노드 업그레이드
-
GPU 워크로드를 임시 1.36 작업자 노드로 마이그레이션하세요. 노드 선택기, 테인트 또는 수동 파드 삭제를 사용하여 워크로드를 이동할 수 있습니다.
-
원래 GPU 노드를 교체합니다.
ibmcloud ks worker replace -w test-d8397vk20kb65iocenn0-btspstggput-default-000001e4 -c <cluster_name> --update -
노드 업그레이드를 확인합니다.
ibmcloud ks worker ls -c <cluster_name>현재 두 노드가 모두 버전에 있음을 보여주는 출력 예시 1.36:
ID Primary IP Flavor State Status Zone Version Operating System test-d8397vk20kb65iocenn0-btspstggput-default-00000485 10.240.0.68 gx3.16x80.l4 normal Ready us-south-1 1.36.0_1507 UBUNTU_24_64 test-d8397vk20kb65iocenn0-tempgpupool-default-00000371 10.240.0.72 gx3.16x80.l4 normal Ready us-south-1 1.36.0_1507 UBUNTU_24_64 -
업그레이드된 원본 노드에서 GPU 오퍼레이터 파드가 실행 중인지 확인합니다.
kubectl get pods -n gpu-operator -o wide -
모든 GPU 워크로드가 실행 중인지 확인합니다.
kubectl get pods -o wide출력 예:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-burn-46pml 1/1 Running 0 6m8s 172.17.116.205 10.240.0.72 <none> <none> gpu-burn-z6xnh 1/1 Running 0 44m 172.17.121.28 10.240.0.68 <none> <none>
6단계: 임시 노드 제거(선택 사항)
원래 노드가 정상이고 워크로드가 안정된 후에는 선택적으로 임시 GPU 노드를 제거할 수 있습니다.
-
임시 작업자 풀을 삭제합니다.
ibmcloud ks worker-pool rm --cluster <cluster_name> --worker-pool temp-gpu-pool -
원본 노드만 남아 있는지 확인합니다.
ibmcloud ks worker ls -c <cluster_name>
예제 2: 클러스터의 여러 GPU 노드
이 예는 두 개의 GPU 노드가 있는 클러스터를 Kubernetes 버전 1.35 에서 1.36 로 마이그레이션하는 방법을 보여줍니다. 여러 노드를 사용하면 GPU 용량을 유지하면서 한 번에 하나씩 노드를 업그레이드할 수 있습니다.
1단계: 초기 클러스터 상태 가져오기
-
클러스터 컨트롤 플레인 버전을 확인합니다.
ibmcloud ks cluster get -c <cluster_name>버전을 보여주는 출력 예시 1.35:
Master Status: Ready State: deployed Health: normal Version: 1.35.4_1528 -
워커 노드 버전을 확인합니다.
ibmcloud ks worker ls -c <cluster_name>두 개의 GPU 노드를 보여주는 출력 예시입니다:
ID Primary IP Flavor State Status Zone Version Operating System test-d8397vk20kb65iocenn0-btspstggput-default-000001e4 10.240.0.64 gx3.16x80.l4 normal Ready us-south-1 1.35.4_1528 UBUNTU_24_64 test-d8397vk20kb65iocenn0-btspstggput-default-0000024b 10.240.0.66 gx3.16x80.l4 normal Ready us-south-1 1.35.4_1528 UBUNTU_24_64
2단계: NVIDIA GPU 연산자 설치
1.36 버전을 사용하기 전에 마이그레이션 준비하기의 단계를 수행했다면 이미 이 단계를 완료했을 수 있습니다.
-
운영자가 사전 설치된 드라이버와 충돌할 수 있는 리소스를 배포하지 않도록 기존 GPU 워커 노드에 레이블을 지정합니다.
kubectl label node/10.240.0.64 nvidia.com/gpu.deploy.operands=false kubectl label node/10.240.0.64 nvidia.com/gpu.deploy.driver=false kubectl label node/10.240.0.66 nvidia.com/gpu.deploy.operands=false kubectl label node/10.240.0.66 nvidia.com/gpu.deploy.driver=false -
NVIDIA Helm 리포지토리를 추가하고 GPU 연산자를 설치합니다.
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia helm repo update helm install --wait --generate-name -n gpu-operator --create-namespace nvidia/gpu-operator -
GPU 오퍼레이터 포드가 실행 중인지 확인하십시오. 드라이버 인스톨러, 디바이스 플러그인, 컨테이너 툴킷, DCGM 익스포터는 레이블이 지정된 노드에서 실행되지 않아야 합니다.
kubectl get pods -n gpu-operator -o wide출력 예:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-operator-1778819096-node-feature-discovery-gc-84d98bd6nqw2z 1/1 Running 0 2m21s 172.17.64.94 10.240.0.64 <none> <none> gpu-operator-1778819096-node-feature-discovery-master-6b6cpnm9w 1/1 Running 0 2m21s 172.17.64.93 10.240.0.64 <none> <none> gpu-operator-1778819096-node-feature-discovery-worker-hm7ft 1/1 Running 0 2m21s 172.17.64.91 10.240.0.64 <none> <none> gpu-operator-1778819096-node-feature-discovery-worker-xh4qz 1/1 Running 0 2m21s 172.17.121.29 10.240.0.66 <none> <none> gpu-operator-76c686b9df-kn4dw 1/1 Running 0 2m21s 172.17.64.92 10.240.0.64 <none> <none>
3단계: 클러스터 컨트롤 플레인 업그레이드하기
-
클러스터 컨트롤 플레인을 버전 1.36 으로 업그레이드합니다.
ibmcloud ks cluster master update --cluster <cluster_name> --version 1.36.0 -
컨트롤 플레인 업그레이드를 확인합니다.
ibmcloud ks cluster get -c <cluster_name>출력 예:
Master Status: Ready State: deployed Health: normal Version: 1.36.0_1506
4단계: 첫 번째 워커 노드 업그레이드하기
-
첫 번째 워커 노드를 교체하십시오.
ibmcloud ks worker replace -w test-d8397vk20kb65iocenn0-btspstggput-default-000001e4 -c <cluster_name> --update -
노드 업그레이드를 확인합니다.
ibmcloud ks worker ls -c <cluster_name>출력 예:
ID Primary IP Flavor State Status Zone Version Operating System test-d8397vk20kb65iocenn0-btspstggput-default-0000024b 10.240.0.66 gx3.16x80.l4 normal Ready us-south-1 1.35.4_1528 UBUNTU_24_64 test-d8397vk20kb65iocenn0-btspstggput-default-00000371 10.240.0.72 gx3.16x80.l4 normal Ready us-south-1 1.36.0_1507 UBUNTU_24_64 -
GPU 워크로드 상태를 확인합니다. 새 노드에서 예약된 GPU 워크로드는 드라이버가 설치될 때까지
Pending상태가 됩니다.kubectl get pods -o wide출력 예:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-burn-46pml 0/1 Pending 0 18s <none> <none> <none> <none> gpu-burn-z6xnh 1/1 Running 0 38m 172.17.121.28 10.240.0.66 <none> <none> -
새 노드에서 GPU 오퍼레이터 파드가 실행 중인지 확인합니다.
kubectl get pods -n gpu-operator -o wide새 노드에서 실행 중인 드라이버 및 장치 플러그인을 보여주는 출력 예시입니다:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-feature-discovery-mw5km 1/1 Running 0 4m36s 172.17.116.201 10.240.0.72 <none> <none> nvidia-container-toolkit-daemonset-ns6p8 1/1 Running 0 4m36s 172.17.116.199 10.240.0.72 <none> <none> nvidia-cuda-validator-vgj45 0/1 Completed 0 96s 172.17.116.203 10.240.0.72 <none> <none> nvidia-dcgm-exporter-52cwh 1/1 Running 0 4m36s 172.17.116.204 10.240.0.72 <none> <none> nvidia-device-plugin-daemonset-2ql7x 1/1 Running 0 4m36s 172.17.116.202 10.240.0.72 <none> <none> nvidia-driver-daemonset-zql6m 1/1 Running 0 5m29s 172.17.116.197 10.240.0.72 <none> <none> nvidia-operator-validator-44xtz 1/1 Running 0 4m36s 172.17.116.200 10.240.0.72 <none> <none> -
새 노드에 예약된 GPU 워크로드를 확인합니다.
kubectl get pods -o wide출력 예:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-burn-46pml 1/1 Running 0 6m8s 172.17.116.205 10.240.0.72 <none> <none> gpu-burn-z6xnh 1/1 Running 0 44m 172.17.121.28 10.240.0.66 <none> <none>
5단계: 나머지 노드 업그레이드
-
남은 각 GPU 노드에 대해 4단계를 반복하여 한 번에 한 노드씩 업그레이드합니다.
-
모든 노드가 업그레이드된 후 모든 워커 노드가 버전 1.36 을 실행 중인지 확인합니다.
ibmcloud ks worker ls -c <cluster_name>출력 예:
ID Primary IP Flavor State Status Zone Version Operating System test-d8397vk20kb65iocenn0-btspstggput-default-00000371 10.240.0.72 gx3.16x80.l4 normal Ready us-south-1 1.36.0_1507 UBUNTU_24_64 test-d8397vk20kb65iocenn0-btspstggput-default-0000048c 10.240.0.73 gx3.16x80.l4 normal Ready us-south-1 1.36.0_1507 UBUNTU_24_64 -
모든 GPU 오퍼레이터 파드가 실행 중인지 확인합니다.
kubectl get pods -n gpu-operator -o wide -
모든 GPU 워크로드가 실행 중인지 확인합니다.
kubectl get pods -o wide출력 예:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES gpu-burn-46pml 1/1 Running 0 18m 172.17.116.205 10.240.0.72 <none> <none> gpu-burn-ttcbt 1/1 Running 0 6m46s 172.17.75.77 10.240.0.73 <none> <none>
다음 단계
- GPU 워크로드를 모니터링하여 올바르게 실행되고 있는지 확인하세요.
- 고급 구성 옵션은 NVIDIA GPU 운영자 문서를 참조하세요.
- NVIDIA DCGM 내보내기를 사용하여 GPU 메트릭 모니터링을 설정합니다.