updated_at: 2025-07-30 23:49

docker hub의 kubernetis에 사용할 GPU 설치

https://chatgpt.com/c/6889c210-fd98-800b-87c5-895bfef9d342 이것으로 해볼래

결론 두가지 방법 모두 GPU 인식에는 실패

docker.desktop에서는 아래 부분이 모두 실패해서 작업 방식을 변경하기 했다. wsl 의 Ubu\tu에서 쿠버네티스를 설치하는 방법으로

  1. Ubuntu install wsl --install -d Ubuntu

  2. WSL systemd 활성화 준비

%USERPROFILE%.wslconfig 파일 생성 또는 수정

[boot]
systemd=true

WSL 재시작

wsl --shutdown

Ubuntu WSL2 접속 후 ''' wsl # wsl -d Ubuntu ''' Docker 설치 및 서비스 시작

NVIDIA Container Toolkit 설치

Kubernetes 설치 (kind 또는 minikube)

Step 1. WSL Ubuntu에서 Docker 설치 및 서비스 수동 실행 1-1. Docker 저장소 등록 및 설치

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

<!-- echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list -->

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

1-2. Docker 서비스 직접 실행 (systemd 없이) WSL2에서는 systemd가 없으므로, Docker 데몬을 직접 실행해야 합니다.

docker 데몬 수동 시작

아래 3개다 백그라운드 실행

sudo dockerd & # &를 붙여 백그라운드 실행

nohup sudo dockerd > /tmp/dockerd.log 2>&1 &  # nobub 사용시

tmux 사용법

이 터미널은 닫지 말고 별도 터미널을 하나 더 열어 Docker 명령어를 사용하세요.

1-3. Docker 동작 확인

docker version
docker run hello-world

Step 2. NVIDIA Container Toolkit 설치 및 GPU 사용

2-1. NVIDIA Docker 저장소 등록 및 설치

# distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

#curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sed 's#deb https://#deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit.gpg] https://#' | sudo tee /etc/apt/#sources.list.d/nvidia-container-toolkit.list


# distribution=$(. /etc/os-release; echo $ID$VERSION_ID) # Ubuntu 24는 지원하지 않으므로
distribution="ubuntu22.04"
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list |  sed 's#deb https://#deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit.gpg] https://#g' |  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list


curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /etc/apt/keyrings/nvidia-container-toolkit.gpg

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

2-2. Docker NVIDIA 런타임 수동 설정

sudo nvidia-ctk runtime configure --runtime=docker

2-3. Docker 재시작 (dockerd 다시 실행)

sudo pkill dockerd
sudo dockerd &

2-4. GPU 컨테이너 테스트

docker run --rm --gpus all nvidia/cuda:12.2.0-base nvidia-smi

GPU 정보가 정상 출력되면 성공입니다.

Step 3. Kubernetes 클러스터 구축(k8s) // (kind도 추천)

  1. 클러스터 설치 선택지
  • kubeadm 으로 직접 클러스터 구성 (직접 설치, 가장 기본적이며 유연)

  • k3s: Rancher에서 만든 경량 쿠버네티스 (설치 쉽고 자원 적게 사용, GPU 지원 가능)

  • MicroK8s: Canonical 제공하는 경량 쿠버네티스 (간편 설치, GPU 지원도 가능)

k3s 설치 (WSL Ubuntu)

curl -sfL https://get.k3s.io | sh -

클러스터 상태 확인

sudo k3s kubectl get nodes

NVIDIA GPU 지원 추가

  • NVIDIA Device Plugin 배포:
sudo k3s kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.13.0/nvidia-device-plugin.yml

아래 명령을 통해 드라이버와 GPU가 정상 인식되는지 먼저 확인하세요.

nvidia-smi
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

GPU 리소스 확인

sudo k3s kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

Step 4. Kubernetes에서 GPU 활용 설정 kind는 기본적으로 GPU를 지원하지 않으므로,

GPU가 필요한 경우 minikube를 대안으로 추천하거나,

GPU 지원이 되는 클러스터 구축 방법(예: k3s + nvidia device plugin) 을 추가 안내해 드릴 수 있습니다.

1. wsl 설치

window 환경하의 docker.desktopo을 운영한다면 이 부분이 매우 중요하다.

wsl --update
wsl -l -v # 현재 상태 확인 (docker-desktop 앞에 *가 있어야 함)
wsl --set-default docker-desktop # 만약 다르다면 아래 명령어로 설정
wsl --install -d Ubuntu ## nvidia-smi는 Ubuntu로 처리해야 문제가 없음
wsl -d Ubuntu nvidia-smi # nvidia-smi는 Ubuntu로 사용

// ubuntu 는 버전 확인하고 24일경우 22 로 다운그래이드
// wsl -d Ubuntu
// $ lsb_release -a
// wsl --unregister Ubuntu
wsl --install -d Ubuntu-22.04

wsl -d Ubuntu
sudo nvidia-ctk runtime configure --runtime=docker  
## 만약 sudo: nvidia-ctk: command not found 에러가 뜨면

기존의 잘못된 설정 파일 삭제

sudo rm /etc/apt/sources.list.d/nvidia-container-toolkit.list

패키지 목록 업데이트

sudo apt-get update

NVIDIA Container Toolkit 설치

sudo apt-get install -y ca-certificates curl gnupg sudo apt-get install -y nvidia-container-toolkit

3. 배포 버전에 맞는 repository 설정

distribution=$(. /etc/os-release; echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sed 's#deb https://#deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

GPG 키 가져오기 및 등록

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /etc/apt/keyrings/nvidia-container-toolkit.gpg

4. 패키지 목록 갱신

sudo apt-get update

5. nvidia-container-toolkit 설치

sudo apt-get install -y nvidia-container-toolkit

6. Docker에 NVIDIA 런타임 적용

sudo nvidia-ctk runtime configure --runtime=docker

7. Docker 재시작

sudo systemctl restart docker

## Docker가 Ubuntu의 GPU를 사용하도록 설정
## 이것이 가장 중요한 부분입니다. Docker Desktop이 컨테이너를 실행할 때 `Ubuntu`에 설치된 GPU 드라이버를 가져다 쓰도록 설정해야 합니다.
1.  **Docker Desktop 설정(Settings) > Resources > WSL Integration**으로 이동합니다.
2.  **"Enable integration with additional distros"** 목록에서 **`Ubuntu`가 반드시 켜져(On) 있어야 합니다.**
3.  설정이 바뀌었다면 **"Apply & Restart"**를 누릅니다. (이미 켜져 있다면 아무것도 할 필요 없습니다.)
GPU를 사용하는 컨테이너 실행하기
이제 모든 준비가 끝났습니다. Kubernetes는 docker-desktop 덕분에 안정적으로 시작되고, Docker는 Ubuntu의 GPU를 사용할 준비가 되었습니다.
Ubuntu 터미널을 열고 (PowerShell이 아닙니다!) 아래 테스트 명령어를 실행하여 GPU가 컨테이너에 잘 할당되는지 확인합니다.
docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi

2. nvidia 에서 드라이버 설치

2.1 NVIDIA 드라이버 다운로드:

NVIDIA 공식 홈페이지(https://www.nvidia.co.kr/Download/index.aspx)로 이동합니다.
사용하시는 GPU 모델(GeForce GTX 1660 Ti)을 선택하고, 최신 버전의 Game Ready 드라이버 또는 Studio 드라이버를 검색하여 다운로드합니다.
NVIDIA 드라이버 설치:
다운로드한 설치 파일을 실행합니다.
설치 옵션에서 '사용자 정의(고급)' 설치를 선택합니다.
다음 단계에서 "전체 설치 수행" 또는 "모든 NVIDIA 구성 요소 설치" 와 유사한 옵션의 체크박스를 반드시 선택합니다. 이렇게 해야 WSL에 필요한 구성 요소까지 모두 설치됩니다.
설치를 진행합니다.
컴퓨터 재부팅 (필수):
드라이버 설치가 완료되면, 반드시 컴퓨터를 재부팅합니다.
최종 확인:
재부팅 후, PowerShell 또는 명령 프롬프트를 엽니다.
다시 한번 아래 명령어를 실행합니다.
wsl nvidia-smi ## 실제 GPU 관련 데이타가 리스트 되면 OK

nvidia-smi
wsl

DESKTOP-DP0AU40:/mnt/host/c/Users/Pondol#

DESKTOP-DP0AU40:/mnt/host/c/Users/Pondol# ls /usr/lib/wsl/lib/nvidia-smi
/usr/lib/wsl/lib/nvidia-smi
DESKTOP-DP0AU40:/mnt/host/c/Users/Pondol#

echo 'export PATH=$PATH:/usr/lib/wsl/lib' >> ~/.bashrc
source ~/.bashrc

최종방법 wsl --install -d Ubuntu wsl --list --verbose wsl --set-default Ubuntu

wsl --shutdown // 참조

nvidia-device-plugin

1.1. 공식 YAML 파일로 설치

kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml

1.2. 설치 확인

kubectl get pods -n kube-system
nvidia-device-plugin-daemonset-dc5hg     1/1     Running   0          51s # 이런것이 나오면 정상

docker.desktop 기어 > docker Engine

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "default-runtime": "nvidia",
  "runtimes": {
    "nvidia": {
      "path": "nvidia-container-runtime",
      "runtimeArgs": []
    }
  }
}
  1. NVIDIA RuntimeClass 생성 (가장 먼저!)

가장 먼저 Kubernetes 클러스터에 NVIDIA 컨테이너 런타임을 사용하도록 알려주는 RuntimeClass를 생성해야 합니다. 이 RuntimeClass는 GPU가 필요한 파드(Pod)가 어떤 런타임을 사용해야 하는지 지정하는 역할을 합니다.

1-nvidia-runtime-class.yaml

kubectl apply -f 1-nvidia-runtime-class.yaml

정상확인

kubectl get runtimeclass nvidia
  1. NVIDIA Kubernetes 디바이스 플러그인 배포
kubectl apply -f 2-nvidia-device-plugin.yaml

디바이스 플러그인 파드가 kube-system 네임스페이스에서 정상적으로 실행되고 있는지 확인합니다.

kubectl get pods -n kube-system -l name=nvidia-device-plugin-ds

2-

  1. ollama-deployment.yaml
kubectl apply -f D:\docker\sample\11_ollama\1-nvidia-runtime-class.yaml
kubectl apply -f D:\docker\sample\11_ollama\nvidia-device-plugin-FIXED.yaml
kubectl get pods -A -w
kubectl describe node docker-desktop | findstr "nvidia.com/gpu"

docker 에 디바이스 넣기

kubectl edit daemonset nvidia-device-plugin-daemonset -n kube-system
      runtimeClassName: nvidia <!-- 추가
      tolerations:
      - effect: NoSchedule
        key: nvidia.com/gpu
        operator: Exists
        

RuntimeClass 생성 및 적용 Pod 설정 수정 (kubectl edit) Docker Engine 설정 (daemon.json) 수정 및 재시작 Kubernetes 클러스터 리셋 (Reset Kubernetes Cluster)

평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글