Skip to content

MCP: Kubernetes ​

Инструкция для установки, развёрнутой по Kubernetes: Эсборд работает подом sboard-dev в пространстве имён sboard-k8s-deploy, Postgres, Redis и S3 внешние.

В кластере MCP-сервер это ещё один Deployment рядом с Эсборд. Отдельная машина не нужна, но по-прежнему нужны два маршрута: снаружи в MCP-сервер и из MCP-сервера в Эсборд.

В примерах домен sboard.mycompany.com и пространство имён sboard-k8s-deploy совпадают с основной инструкцией по установке, подставьте свои.

Шаг 1. Настройка Эсборд ​

  1. Добавьте в секрет sboard_env.yml переменные и примените его:
yml
  BOARD_MCP_HOST: board-mcp-lb # имя Service MCP-сервера, создаётся на шаге 2
  BOARD_MCP_PORT: '3100' # порт этого Service, должен совпадать с полем port в манифесте
  MCP_GATEWAY_PORT: '9443' # служебный порт, на нём Эсборд отдаёт внутренние сервисы MCP-серверу
  CRYPTO_PASSWORD: Kh3pWq8ZtR2mBvNs # секрет установки, произвольная строка
  CRYPTO_IV_16_BYTE: A7fQ2xLpR9dM4kTz # вектор инициализации, ровно 16 символов
  MCP_DAILY_LIMIT: '500' # ограничение вызовов на сотрудника в сутки, пусто или 0 означает без ограничения

Про BIND_IP

Переменные MCP_GATEWAY_BIND_IP и MINIO_BIND_IP из docker-инструкций здесь не нужны: они управляют публикацией портов на интерфейсы хоста, а в кластере доступ даёт Service (шаг 2).

Задайте ключи шифрования до первого выпуска токенов

Токен ищется в базе по зашифрованному значению, поэтому смена CRYPTO_PASSWORD или CRYPTO_IV_16_BYTE обесценивает все ранее выданные токены: агенты перестанут подключаться, и сотрудникам придётся выпускать токены заново. Без этих переменных используются значения по умолчанию, одинаковые во всех установках.

  1. Перезапустите под Эсборд, чтобы переменные применились:
shell
kubectl -n sboard-k8s-deploy rollout restart deployment sboard-dev

Шаг 2. Развёртывание MCP-сервера ​

  1. Создайте файл sboard_mcp.yml:
shell
nano sboard_mcp.yml
  1. Добавьте в него Service для служебного порта Эсборд, Deployment и Service MCP-сервера:
yml
# Service: служебный порт Эсборд, по нему MCP-сервер обращается к внутренним сервисам
apiVersion: v1
kind: Service
metadata:
  name: sboard-mcp-gateway
  namespace: sboard-k8s-deploy
spec:
  selector:
    app: sboard-dev
  ports:
    - protocol: TCP
      port: 9443
      targetPort: 9443
---
# Service: сам MCP-сервер, на него Эсборд передаёт запросы агентов
apiVersion: v1
kind: Service
metadata:
  name: board-mcp-lb
  namespace: sboard-k8s-deploy
spec:
  selector:
    app: board-mcp
  ports:
    - protocol: TCP
      port: 3100
      targetPort: 3000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: board-mcp
  namespace: sboard-k8s-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: board-mcp
  template:
    metadata:
      labels:
        app: board-mcp
    spec:
      containers:
        - name: board-mcp
          image: cr.yandex/crpqnc9iiqap7fs19jhl/mcp-agent:2026.3.1
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
          env:
            - name: GRPC_BOARDS_MCP_SERVICE_URL
              value: sboard-mcp-gateway:9443
            - name: GRPC_EVENTS_SERVICE_URL
              value: sboard-mcp-gateway:9443
            - name: GRPC_LIMITS_SERVICE_URL
              value: sboard-mcp-gateway:9443
            - name: GRPC_APPS_SERVICE_URL
              value: sboard-mcp-gateway:9443
            - name: GRPC_JOURNAL_SERVICE_URL
              value: sboard-mcp-gateway:9443
            - name: WHITEBOARD_API_UPLOAD_STREAM_URL
              value: http://sboard-mcp-gateway:9443/api/boards/v1/boardUpload/mcp-stream
            - name: MCP_RESOURCE_URL
              value: https://sboard.mycompany.com/board-mcp
            - name: MCP_PUBLIC_BASE_URL
              value: https://sboard.mycompany.com
            - name: OAUTH_ISSUER_URL
              value: https://sboard.mycompany.com/api
          envFrom:
            - secretRef:
                name: mcp-env-secret
      restartPolicy: Always
  1. Создайте файл sboard_mcp_env.yml с доступами к внешним сервисам:
yml
kind: Secret
apiVersion: v1
metadata:
  name: mcp-env-secret
  namespace: sboard-k8s-deploy
stringData:
  REDIS_HOST: redis.mycompany.com # очередь отрисовки, можно тот же redis, что у Эсборд
  REDIS_PORT: '6379'
  REDIS_PASS: pass
  ENDPOINT: https://storage.s3.com # хранилище: те же значения, что у Эсборд
  BUCKET: example-bucket
  ACCESS_KEY_ID: access_key_id
  SECRET_ACCESS_KEY: secret_access_key
  POSTGRES_URL: postgresql://user:password@host:5432/db # не обязателен, см. подсказку ниже
type: Opaque

Про общие сервисы

Значения хранилища обязаны совпадать с установкой Эсборд: MCP-сервер читает те же файлы изображений, иначе на скриншотах досок появятся серые прямоугольники вместо картинок.

POSTGRES_URL не обязателен: он нужен только для наклеек «ИИшка» и настроек MCP по отдельным доскам. Если указываете, используйте ту же базу, что и Эсборд: MCP-сервер создаст в ней две свои таблицы при первом запуске.

  1. Добавьте маршрут в Ingress: в sboard_app.yml, в список paths, перед общим путём /:
yml
          - path: /board-mcp
            pathType: Prefix
            backend:
              service:
                name: board-mcp-lb
                port:
                  number: 3100

Размер тела и таймаут

Через этот маршрут агенты загружают изображения и ждут отрисовки скриншотов, поэтому в аннотациях Ingress имеет смысл поднять лимиты:

yml
    nginx.ingress.kubernetes.io/proxy-body-size: '100m'
    nginx.ingress.kubernetes.io/proxy-read-timeout: '300'
  1. Примените файлы:
shell
kubectl apply -f sboard_mcp_env.yml
kubectl apply -f sboard_mcp.yml
kubectl apply -f sboard_app.yml
  1. Проверьте, что под поднялся:
shell
kubectl -n sboard-k8s-deploy get pods -l app=board-mcp

Шаг 3. Лицензия и проверка ​

Загрузите лицензию MCP и проверьте установку по общей инструкции.