Як запустити 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 все одно працюватиме. Його рекомендується запускати, якщо модель буде розв’язувати складні задачі міркування або коли потрібно пришвидшити роботу.

Для локального запуску кластера підійдуть такі інструменти:

  1. KIND (Kubernetes IN Docker) — швидкий і простий, щоб перевірити, як усе працює.
  2. Minikube — стабільна класика для локальних тестів.
  3. 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. У результаті можна ставити питання моделі через зручну сторінку в браузері.

Що тут важливо:

  1. Вказуємо адресу OLLAMA_BASE_URL, щоб WebUI знав, куди стукатись (у нас це http://ollama-service:11434).
  2. Прописуємо модель за замовчуванням — deepseek-r1:1.5b, щоб усе запускалось без додаткових налаштувань.
  3. Відкриваємо порт 8080, щоб мати доступ до інтерфейсу.
  4. Додаємо збереження даних через 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 занять ти дізнаєшся купу корисного про кластери, драйвери, моніторинг та багато іншого.

Залишити відповідь

Дякуємо, що поділились