Тема
MCP: Kubernetes
Инструкция для установки, развёрнутой по Kubernetes: Эсборд работает подом sboard-dev в пространстве имён sboard-k8s-deploy, Postgres, Redis и S3 внешние.
В кластере MCP-сервер это ещё один Deployment рядом с Эсборд. Отдельная машина не нужна, но по-прежнему нужны два маршрута: снаружи в MCP-сервер и из MCP-сервера в Эсборд.
В примерах домен sboard.mycompany.com и пространство имён sboard-k8s-deploy совпадают с основной инструкцией по установке, подставьте свои.
Шаг 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 обесценивает все ранее выданные токены: агенты перестанут подключаться, и сотрудникам придётся выпускать токены заново. Без этих переменных используются значения по умолчанию, одинаковые во всех установках.
- Перезапустите под Эсборд, чтобы переменные применились:
shell
kubectl -n sboard-k8s-deploy rollout restart deployment sboard-devШаг 2. Развёртывание MCP-сервера
- Создайте файл
sboard_mcp.yml:
shell
nano sboard_mcp.yml- Добавьте в него 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- Создайте файл
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-сервер создаст в ней две свои таблицы при первом запуске.
- Добавьте маршрут в 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'- Примените файлы:
shell
kubectl apply -f sboard_mcp_env.yml
kubectl apply -f sboard_mcp.yml
kubectl apply -f sboard_app.yml- Проверьте, что под поднялся:
shell
kubectl -n sboard-k8s-deploy get pods -l app=board-mcpШаг 3. Лицензия и проверка
Загрузите лицензию MCP и проверьте установку по общей инструкции.