# vLLM Production Stack: установить Helm-чарт и проверить ответ

Источник: https://modelium.tech/zhurnal/vllm-production-stack-helm/

vLLM Production Stack — готовый набор компонентов для обслуживания модели в Kubernetes: сервер vLLM принимает запросы, а router направляет их к серверу. Для первой проверки официальный пример разворачивает одну учебную модель и позволяет получить ответ через локально перенаправленный порт. Нужен уже работающий GPU-кластер; Modelium сверил инструкцию с кодом, но не запускал кластер.

**Для инженера, не домашний рецепт.** Понадобятся изолированный Kubernetes-кластер с доступным GPU, установленные `kubectl`, `helm` и `git`, права на установку приложений и место для образов и весов. Официальный учебный файл запрашивает **6 CPU, 16Gi оперативной памяти и 1 GPU для группы контейнеров (pod)**: это параметры примера, не минимальные требования к любому запуску. На этой машине Modelium нет GPU-кластера и Helm; ни модель, ни маршрутизатор редакция не запускала. Подготовка требует сети для репозитория, образов, зависимостей чарта и весов; эта статья не подтверждает офлайн-работу. [s1](#src-s1) [s2](#src-s2)

## Что даст учебная установка?

Представьте отдельный тестовый кластер: клиент посылает запрос на один адрес, **router** передаёт его одному серверу **vLLM** с моделью. **Helm-чарт** — конфигурация, по которой Kubernetes создаёт эти компоненты. Официальный минимальный пример использует `facebook/opt-125m`, одну реплику и один GPU; здесь проверяем **маршрут запроса**, а не качество модели, работу под нагрузкой или отказоустойчивость. [s1](#src-s1)

Важная граница: у учебной модели OPT отдельная лицензия с разрешением для некоммерческих исследований, но с запретом коммерческого и производственного использования. Название «Production Stack» относится к программному стеку, а не делает **эту модель** пригодной для бизнеса. Для реальной задачи выбирайте модель и версию с подходящими условиями отдельно. [s4](#src-s4)

## Как развернуть пример на отдельном кластере?

- Убедитесь, что `kubectl get nodes` показывает ваш **тестовый** кластер и что он действительно предоставляет GPU рабочим pod. Не запускайте команды в рабочем кластере по умолчанию. Проверьте установленный контекст командой `kubectl config current-context`. Если нет GPU или прав, остановитесь: пример рассчитан на готовый GPU-кластер, а не обычный домашний ноутбук. [s1](#src-s1)

- В терминале получите официальный репозиторий: `git clone https://github.com/vllm-project/production-stack.git`, затем `cd production-stack` и `git checkout 7b1164dbe71b1f02ede85152bdfc2f383376dc2d`. Проверьте `git rev-parse HEAD`: вывод должен совпасть с указанным полным коммитом. Это закрепляет файлы чарта и пример; образы с тегом `latest` в самом примере **не** закреплены, поэтому побайтовая воспроизводимость образов здесь не обещается. [s1](#src-s1) [s2](#src-s2)

- В каталоге репозитория выполните `helm dependency build ./helm`: зависимости чарта загружаются по его `Chart.lock`. На своём изолированном стенде установите локальный чарт командой `helm install vllm ./helm -f tutorials/assets/values-01-minimal-example.yaml`. Отсутствие ошибок Helm ещё не означает, что модель запущена. Если релиз с именем `vllm` в текущем пространстве имён кластера (namespace) уже есть, не переустанавливайте поверх него. [s1](#src-s1) [s3](#src-s3)

- Выполните `kubectl get pods` и дождитесь состояния `Running` и готовности **router и модели**; первоначальная загрузка образа и весов может занять время. Если pod не готов, посмотрите его события и логи на своём тестовом кластере, прежде чем отправлять запрос. [s1](#src-s1)

## Как проверить именно ответ модели через router?

В **отдельном терминале** запустите `kubectl port-forward svc/vllm-router-service 30080:80` и оставьте команду работающей. Перенаправление даёт адрес на вашем компьютере, а не разрешение открывать этот сервис в интернет. В первом терминале запросите `curl http://127.0.0.1:30080/v1/models`: в списке ожидается ID `facebook/opt-125m`. Один список — ещё не доказательство генерации. [s1](#src-s1)

Затем отправьте короткое продолжение текста: `curl -X POST http://127.0.0.1:30080/v1/completions -H 'Content-Type: application/json' -d '{"model":"facebook/opt-125m","prompt":"Once upon a time,","max_tokens":10}'`. Проверьте HTTP-успех и поле `choices[0].text` в ответе, но **не** ожидайте заданных слов: модель может продолжить фразу по-разному. Сравните ID запрошенной модели с полем `model`. Это тест нового ответа через router, не тест безопасности, производительности или правильности фактов. Modelium этот запрос не выполнял. [s1](#src-s1)

Если `/v1/models` пуст или запрос не проходит, сначала сравните `kubectl get pods`, запущенный `port-forward` и точный ID модели в файле `tutorials/assets/values-01-minimal-example.yaml`. Не подменяйте тест ответом напрямую от pod — иначе router останется непроверенным. [s1](#src-s1)

## Где смотреть метрики и как убрать учебный релиз?

В закреплённом чарте `kube-prometheus-stack.enabled`, оба `serviceMonitor.enabled` и `grafanaDashboards.enabled` по умолчанию **false**. Поэтому успешно отвечающая модель **не означает**, что Prometheus уже собирает показатели или что Grafana установлена. Для своей тестовой среды с Prometheus Operator авторы предлагают отдельно включить ServiceMonitor для engine и router; для пустого кластера — дополнительно `kube-prometheus-stack.enabled: true`. Проверьте наличие соответствующих объектов и фактический сбор на **своём** стенде до вывода о наблюдаемости; мы его не проводили. [s2](#src-s2) [s3](#src-s3)

Когда учебный релиз больше не нужен, остановите `port-forward` через `Ctrl+C` и выполните `helm uninstall vllm` **только в том же тестовом namespace и контексте**. Удаление релиза не равнозначно автоматической очистке всех загруженных данных и persistent volumes; проверьте остатки отдельно, не удаляя рабочие ресурсы. Если кластера пока нет, начните с [одиночного сервера vLLM](/zhurnal/vllm/) и проверьте модель без Kubernetes. [s1](#src-s1) [s2](#src-s2)

## Источники

1. [vLLM Production Stack: minimal Helm installation, закреплённый tutorial](https://raw.githubusercontent.com/vllm-project/production-stack/7b1164dbe71b1f02ede85152bdfc2f383376dc2d/tutorials/01-minimal-helm-installation.md) — получено 2026-10-22
2. [vLLM Production Stack: значения Helm-чарта 0.1.13](https://raw.githubusercontent.com/vllm-project/production-stack/7b1164dbe71b1f02ede85152bdfc2f383376dc2d/helm/values.yaml) — получено 2026-10-22
3. [vLLM Production Stack: наблюдаемость и установка Helm](https://raw.githubusercontent.com/vllm-project/production-stack/7b1164dbe71b1f02ede85152bdfc2f383376dc2d/helm/README.md) — получено 2026-10-22
4. [Meta OPT: лицензия учебной модели на закреплённой ревизии](https://huggingface.co/facebook/opt-125m/raw/27dcfa74d334bc871f3234de431e71c6eeba5dd6/LICENSE.md) — получено 2026-10-22
