Загрузка...

Блог

Развёртывание LLM в Kubernetes: ConfigMap, NodePort

Развёртывание LLM в Kubernetes: ConfigMap, NodePort

После установки кластера и при необходимости GPU можно развернуть LLM-модели: namespace, ConfigMap с API-ключом и скриптами запуска, деплойменты по одной модели (разные GPU), сервисы NodePort для доступа снаружи.

Подготовка скриптов запуска

Рекомендуется ConfigMap: kubectl create configmap start-scripts -n llm --from-file=start_server_*.py. Альтернатива — hostPath в /opt/llm/. Проверьте манифест конкретной модели.

Минимальный набор: namespace, Deployment с монтированием ConfigMap для скриптов и API-ключа.

# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: llm

---
# deployment-llm.yaml (фрагмент)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: llm-server
  namespace: llm
spec:
  replicas: 1
  selector:
    matchLabels:
      app: llm-server
  template:
    metadata:
      labels:
        app: llm-server
    spec:
      containers:
        - name: llm
          image: your-llm-image:tag
          volumeMounts:
            - name: start-scripts
              mountPath: /opt/scripts
              readOnly: true
            - name: api-key
              mountPath: /opt/secrets
              readOnly: true
      volumes:
        - name: start-scripts
          configMap:
            name: start-scripts
        - name: api-key
          configMap:
            name: llm-api-key
            defaultMode: 0440

ConfigMap скриптов: kubectl create configmap start-scripts -n llm --from-file=start_server_*.py. ConfigMap с API-ключом: отдельный манифест или kubectl create configmap llm-api-key -n llm --from-literal=api_key=.... Имя образа и ресурсы (CPU/GPU) подставьте под свою модель.

Развёртывание

ШагКоманда / действие
1Namespace: kubectl apply -f k8s/llm/namespace.yaml
2ConfigMap API-ключа и при необходимости start-scripts
3Манифесты моделей по одному или kubectl apply -k k8s/llm/
4Проверка: kubectl get pods -n llm, kubectl get svc -n llm

Пример манифестов: kubectl apply -f k8s/llm/namespace.yaml, kubectl apply -f k8s/llm/qwen3.5-27b-instruct-awq.yaml и т.д.

Доступ и управление

Модели доступны по NodePort на IP сервера (например, 30080, 30081, 30082, 30083, 30086). Проверка: kubectl get pods -n llm, kubectl get svc -n llm. Остановка/запуск: kubectl scale deployment ... --replicas=0/1; перезапуск: kubectl rollout restart deployment/....

Итого: ConfigMap для скриптов, манифесты по моделям, NodePort для доступа; масштабирование и перезапуск — через kubectl.