Запуск и останов 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 у меня не вызывает проблем, так как это мой основной функционал в текущей роли