Запуск и останов minikube в ubuntu 22.04 с GPU


Делаю:
2026.04.10


// OK!
$ nvidia-smi


Инсталляция nvidia-container-toolkit

$ curl -fsSL https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

$ curl -s -L https://nvidia.github.io/nvidia-docker/debian11/nvidia-docker.list

$ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g'

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

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


$ dpkg -l | grep nvidia-container-toolkit
ii nvidia-container-toolkit 1.13.5-1 amd64 NVIDIA Container toolkit
ii nvidia-container-toolkit-base 1.13.5-1 amd64 NVIDIA Container Toolkit Base


$ sudo nvidia-ctk runtime configure --runtime=docker --config=/etc/docker/daemon.json


$ cat /etc/docker/daemon.json
{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    }
}


$ sudo systemctl restart docker


$ nvidia-container-cli --version
cli-version: 1.13.5
lib-version: 1.13.5
build date: 2023-07-18T11:37+00:00
build revision: 66607bd046341f7aad7de80a9f022f122d1f2fce
build compiler: x86_64-linux-gnu-gcc-8 8.3.0
build platform: x86_64


Запуск в docker nvidia-smi

$ docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
NVIDIA-SMI couldn't find libnvidia-ml.so library in your system. Please make sure that the NVIDIA Display Driver is properly installed and present in your system.
Please also try adding directory that contains libnvidia-ml.so to your system PATH.


$ docker run --rm --gpus all -it nvidia/cuda:11.8.0-runtime-ubuntu22.04 bash

# ldconfig

// OK!
# nvidia-smi


entrypoint.sh

#!/bin/bash
# Обновляем кэш библиотек перед запуском
ldconfig
# Выполняем переданную команду
exec "$@"


Dockerfile

FROM nvidia/cuda:11.8.0-runtime-ubuntu22.04

# Копируем entrypoint скрипт

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# Устанавливаем entrypoint

ENTRYPOINT ["/entrypoint.sh"]

# Команда по умолчанию

CMD ["nvidia-smi"]


$ docker build -t my-cuda:11.8.0 .

// OK!
$ docker run --rm --gpus all my-cuda:11.8.0 nvidia-smi


Запуск MiniKube

$ minikube start \
 --driver=docker \
 --memory=8g \
 --cpus=4 \
 --container-runtime=docker \
 --gpus all


$ minikube addons enable nvidia-device-plugin


$ kubectl get pods -n kube-system

***
nvidia-device-plugin-daemonset-l2tlz   1/1     Running   0             4m38s
***


$ minikube ssh
$ sudo ldconfig /usr/lib/x86_64-linux-gnu


// OK!
$ kubectl run gpu-test --rm -it --restart=Never --image=nvidia/cuda:12.2.2-base-ubuntu22.04 -- nvidia-smi
Thu Apr  9 01:20:35 2026
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.288.01             Driver Version: 535.288.01   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce GTX 1650        Off | 00000000:01:00.0  On |                  N/A |
| 28%   58C    P5              N/A /  75W |    832MiB /  4096MiB |     35%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
+---------------------------------------------------------------------------------------+
pod "gpu-test" deleted


// 1 GPU на узле minikube
$ kubectl get nodes -o json | jq -r '.items[] | "\(.metadata.name): \(.status.allocatable."nvidia.com/gpu" // 0)"'
minikube: 1


$ kubectl run gpu-test --rm -it --restart=Never --image=nvidia/cuda:12.2.2-base-ubuntu22.04 -- sh -c "nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits | awk -F', ' '{print \$1 \" / \" \$2 \" MiB\"}'"

2283 / 4096 MiB


Запуск модели qwen в MiniKube


Минут 6 устанавливаетя.

$ cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
  name: qwen-service
spec:
  type: NodePort
  selector:
    app: qwen
  ports:
    - port: 11434
      targetPort: 11434
      nodePort: 30434
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: qwen-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: qwen
  template:
    metadata:
      labels:
        app: qwen
    spec:
      containers:
        - name: ollama
          image: ollama/ollama:latest
          resources:
            limits:
              nvidia.com/gpu: 1 # Тот самый лимит, который мы настраивали!
          ports:
            - containerPort: 11434
          env:
            - name: OLLAMA_MODELS
              value: '/root/.ollama'
EOF


$ kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
qwen-deployment-d57b558dd-w9vwd   1/1     Running   0          6m40s


$ kubectl exec -it $(kubectl get pod -l app=qwen -o name) -- ollama run qwen2.5:1.5b


// на хосте смотрю загрузку видеокарты
$ watch -n 0.5 nvidia-smi


$ minikube ip


$ curl http://192.168.49.2:30434/api/generate -d '{
  "model": "qwen2.5:1.5b",
  "prompt": "Привет! Ты работаешь на моей GTX 1650 внутри Kubernetes?",
  "stream": false
}' | jq -r '.response'

response:

Да, я работаю в вашем кластере Kubernetes с NVIDIA GeForce GTX 1650 видеокартой для выполнения задачи. Настройка и управление рабочими нагрузками на GPU у меня не вызывает проблем, так как это мой основной функционал в текущей роли