Як запустити DeepSeek-R1 на Kubernetes?

Kubernetes — це не просто система оркестрування контейнерів, а крутий інструмент для управління штучним інтелектом.
Якщо ти коли-небудь стикався з проблемами масштабування або стабільності моделей ШІ, то точно знаєш, наскільки важливо мати надійне середовище для їх запуску.
Тому готуйся до розв’язання свого виклику. Далі розповідаємо, як все зробити.
Як розгорнути DeepSeek на Kubernetes?
Налаштування кластера Kubernetes
Почнемо з того, що ми маємо кластер Kubernetes із трьох вузлів. Один — керівний (control-plane), два — робочі (worker).
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
deepseek-control-plane Ready control-plane 6d5h v1.32.0
deepseek-worker Ready <none> 6d5h v1.32.0
deepseek-worker2 Ready <none> 6d5h v1.32.0
Навіть якщо ці вузли не мають графічних процесорів (GPU), DeepSeek-R1 все одно працюватиме. Його рекомендується запускати, якщо модель буде розв’язувати складні задачі міркування або коли потрібно пришвидшити роботу.
Для локального запуску кластера підійдуть такі інструменти:
- KIND (Kubernetes IN Docker) — швидкий і простий, щоб перевірити, як усе працює.
- Minikube — стабільна класика для локальних тестів.
- MicroK8s — компактний, але гнучкий, ідеальний для тих, хто хоче трохи більше контролю.
А якщо вже хочеш по-серйозному — запускай у хмарі. Kubernetes легко під’єднати до інтернету через Ingress — і ти зможеш відкривати потрібні сервіси через вебінтерфейс. Автентифікація й TLS-захист — усе як DevOps заповів.
Використовуємо Ollama для розгортання
Ось змінні середовища, які налаштовують поведінку моделі:
OLLAMA_MODEL
— тут задаємо, яку саме модель запускати. У нас це deepseek-r1:1.5b
, варіант на 1.5 мільярда параметрів.
OLLAMA_KEEP_ALIVE = -1
— вказує, що контейнер має залишатися активним постійно.
OLLAMA_NO_THINKING = true
— вимикає вставки на кшталт <thinking>
або пояснення кроків міркування.
OLLAMA_SYSTEM_PROMPT
— інструкція для моделі: «Ти — DeepSeek-R1, модель для міркувань. Відповідай прямо, без проміжних пояснень і тегів <think>
.»
Даємо доступ до Ollama ззовні
Щоб інші сервіси могли стукатись до Ollama, відкриваємо порт через Kubernetes-сервіс.
apiVersion: v1
kind: Service
metadata:
name: ollama-service
spec:
selector:
app: ollama
ports:
- protocol: TCP
port: 11434
targetPort: 11434
type: NodePort
Підключаємо Open WebUI
Щоб уся робота йшла не через термінал, а була «юзер-френдлі», підкидуємо Open WebUI — це вебінтерфейс, який напряму підключається до Ollama. У результаті можна ставити питання моделі через зручну сторінку в браузері.
Що тут важливо:
- Вказуємо адресу
OLLAMA_BASE_URL
, щоб WebUI знав, куди стукатись (у нас це http://ollama-service:11434). - Прописуємо модель за замовчуванням —
deepseek-r1:1.5b
, щоб усе запускалось без додаткових налаштувань. - Відкриваємо порт 8080, щоб мати доступ до інтерфейсу.
- Додаємо збереження даних через
volume
, щоб після перезапуску нічого не губилось — це мастхев, якщо плануєш використовувати WebUI на постійній основі.
Тестуємо роботу DeepSeek-R1
Заходимо в контейнер із Ollama командою:
kubectl exec -it deploy/ollama -- bash
І вже там запускаємо саму модель:
ollama run deepseek-r1:1.5b
Спілкуємось з DeepSeek через браузер
Щойно Open WebUI розгорнуто, до нього можна зайти через звичну URL-ку:
http://deepseek.gheware.com/auth
От і все, ти чудово впорався.
Чому це має спрацювати?
DeepSeek — це ШІ, який думає, аналізує та виводить логіку з купи даних. Такі задачі не терплять хаосу в інфраструктурі. І Kubernetes тут не просто ще один популярний інструмент. Він закриває саме ті потреби, які для DeepSeek критичні.
Масштабування
Якщо DeepSeek починає отримувати хвилю запитів, Kubernetes реагує автоматично. Завдяки Horizontal Pod Autoscaler і Cluster Autoscaler, система масштабується без твоєї участі — більше запитів, більше ресурсів, і все це — без відчутних лагів.
Робота без збоїв
Модель штучного інтелекту не має права на довгі перерви. Kubernetes стежить за модулями DeepSeek і в разі збою переносить їх на інші вузли або перезапускає. Це мінімізує простій і тримає inference-сервіси на ходу.
Дані завжди під рукою
DeepSeek працює з моделями, даними й чекпоінтами, які не мають зникати після оновлення чи рестарту. PersistentVolumeClaims (PVC) в Kubernetes тримають ці дані доступними в будь-який момент. І не важливо, скільки разів ти масштабував чи оновлював систему — все на місці.
Помірне навантаження
Kubernetes вміє автоматично розподіляти трафік між репліками inference-сервісу. Завдяки вбудованому балансуванню навантаження, запити не завалюють одну репліку, а рівномірно розходяться по всіх. Це тримає затримку відповіді стабільною, а ресурси — продуктивними.
Післяслово
Не треба бути DevOps-гуру із 10 роками досвіду для впровадження подібного рішення. Достатньо мати інтерес, трохи терпіння й хороший гайд під рукою. А ще — мати поруч тих, хто може допомогти, коли щось піде не за планом. Тому якщо хочеш копнути глибше, у нас є практичний курс «Kubernetes. Практикум з адміністрування». Всього за 6 занять ти дізнаєшся купу корисного про кластери, драйвери, моніторинг та багато іншого.