n8n в Kubernetes и Helm: values.yaml, ingress, workers, secrets и обновления ¶
Обновлено: 2026-05-29
Kubernetes для n8n нужен не всем. Если у вас один VPS и несколько workflow, Docker Compose проще, дешевле и предсказуемее. Kubernetes оправдан, когда уже есть кластер, несколько окружений, централизованные ingress/secrets/monitoring, отдельная команда эксплуатации и требование масштабировать workers независимо от main instance.
Главная ошибка — переносить хаотичный compose в Kubernetes без архитектуры. Сначала решите, где живут PostgreSQL, Redis, файловое хранилище, secrets, ingress и backup. Только после этого пишите values.yaml.
Когда Kubernetes оправдан ¶
| Признак | Docker Compose | Kubernetes/Helm |
|---|---|---|
| Один сервер | лучше | часто избыточно |
| Несколько окружений | сложно поддерживать | нормально через namespaces/values |
| Много долгих workflow | queue mode вручную | workers масштабируются отдельно |
| Центральные секреты и ingress | нужны внешние решения | обычно уже есть в кластере |
Базовая production-архитектура ¶
Ingress Controller → n8n main pod → PostgreSQL
│
├→ Redis queue
├→ n8n worker pods
└→ task runner sidecar/external runners
PostgreSQL и Redis лучше держать как managed-сервисы или отдельные stateful-компоненты с backup. Не стоит хранить критичные данные только в ephemeral volume pod.
Минимальный values.yaml: что обязательно продумать ¶
main:
replicaCount: 1
worker:
enabled: true
replicaCount: 2
config:
executionsMode: queue
webhookUrl: https://n8n.example.ru/
genericTimezone: Europe/Moscow
externalPostgresql:
host: postgres.example.internal
database: n8n
user: n8n
existingSecret: n8n-postgres-secret
externalRedis:
host: redis.example.internal
existingSecret: n8n-redis-secret
ingress:
enabled: true
className: nginx
hosts:
- host: n8n.example.ru
paths:
- path: /
pathType: Prefix
tls:
- secretName: n8n-tls
hosts: [n8n.example.ru]
secret:
existingSecret: n8n-app-secret
Названия полей зависят от конкретного Helm chart, поэтому используйте этот пример как чеклист, а не как универсальный values-файл. Важна не строка сама по себе, а то, что у вас явно заданы: внешний URL, БД, Redis, encryption key, ingress, secrets и workers.
Secrets: что нельзя хранить в открытом values.yaml ¶
N8N_ENCRYPTION_KEY- пароль PostgreSQL
- пароль Redis, если включён auth
- SMTP/API токены
- OAuth client secret
Секреты храните в Kubernetes Secret, sealed-secrets, External Secrets Operator или корпоративном vault. Сам values.yaml должен ссылаться на secret, а не содержать секретные значения.
Ingress и webhooks ¶
Для n8n в Kubernetes особенно важно, чтобы внешний адрес совпадал с тем, что видят webhook-провайдеры. После деплоя откройте Webhook node: production URL должен быть https://n8n.example.ru/webhook/.... Если внутри отображается service name, cluster.local или http, значит неправильно заданы WEBHOOK_URL, forwarded headers или ingress.
curl -I https://n8n.example.ru
curl -X POST https://n8n.example.ru/webhook/k8s-smoke-test \
-H 'Content-Type: application/json' \
-d '{"platform":"kubernetes","check":"webhook"}'
Обновление и rollback ¶
- Сделайте backup PostgreSQL и зафиксируйте текущую версию chart/image.
- Прогоните
helm diff, если он используется в вашей команде. - Обновляйте через
helm upgradeс явным values-файлом. - Проверьте UI, webhook, worker, schedule trigger и credentials.
- Если ошибка критична —
helm rollbackи восстановление БД только при необходимости.
helm upgrade n8n ./chart -n automation -f values.production.yaml
helm history n8n -n automation
helm rollback n8n 12 -n automation
Типовые ошибки Kubernetes-деплоя ¶
| Симптом | Причина | Проверка |
|---|---|---|
| pods стартуют, но credentials сломаны | разный или потерянный encryption key | kubectl get secret, сравнить env main/worker |
| executions висят queued | workers не подключены к Redis | логи worker pod, Redis host/secret |
| webhook возвращает 404/502 | ingress/service/WEBHOOK_URL не совпали | описание ingress, service port, n8n production URL |
| Python/Code node нестабилен | task runners не изолированы или не включены | проверить runner mode и sidecar |
Когда не надо ставить n8n в Kubernetes ¶
Если у вас нет мониторинга кластера, процесса обновлений, backup PostgreSQL и человека, который понимает ingress/secrets/storage, Kubernetes не сделает n8n надёжнее. Он просто перенесёт ошибки из compose в более сложную среду.
Связанные инструкции ¶
Операционный runbook для self-hosted ¶
Для темы «n8n в Kubernetes и Helm» важно разделять настройку и эксплуатацию. Настройка отвечает на вопрос “запустилось ли”, эксплуатация — “сможем ли мы восстановиться, обновиться и расследовать инцидент без потери credentials и execution history”.
Перед изменениями проверьте бэкап базы, значение N8N_ENCRYPTION_KEY, состояние volume, логи web-процесса и worker-процесса. Главный риск — поменять настройку только в одном контейнере, забыть про worker или потерять volume/encryption key.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | состояние контейнеров, очередь, переменные окружения, volume и последние строки логов | позволяет повторить проблему без доступа к production-секретам |
| Контроль | restart_count, memory_usage, queue_depth, worker_concurrency, failed_executions | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | поменять настройку только в одном контейнере, забыть про worker или потерять volume/encryption key | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «n8n в Kubernetes и Helm» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
docker compose ps
docker compose logs --tail=200 n8n
docker compose logs --tail=200 n8n-worker
printenv | grep -E 'N8N_|WEBHOOK_|DB_|QUEUE_'
# перед изменениями: backup базы + проверка N8N_ENCRYPTION_KEY
Критерий готовности ¶
- есть свежий backup базы и проверено значение N8N_ENCRYPTION_KEY
- web, worker, queue и database используют согласованные переменные окружения
- после изменения проверены логи, healthcheck и запуск критичных workflow
- записан rollback-план с командами и ответственным
Эксплуатационный контекст для self-hosted n8n
Страницу «n8n в Kubernetes и Helm: values.yaml, ingress, workers, secrets и обновления ¶» лучше читать как часть production-карты self-hosted n8n. Любое изменение инфраструктуры должно иметь владельца, план проверки, понятный rollback и наблюдаемость. Перед применением на VPS или в Kubernetes зафиксируйте текущую версию n8n, способ запуска, путь к данным, переменные окружения и место хранения backup.
Главный риск self-hosted установки — исправить один симптом и не заметить побочный эффект: потерю credentials, рост execution data, недоступность webhooks, ошибку reverse proxy или зависшие workers. Поэтому после изменений проверяйте не только UI, но и healthcheck, production webhook URL, очередь, базу данных, логи контейнера и успешный тестовый execution.
Ops-чеклист перед изменением
- Сделайте backup базы, файлового хранилища и критичных env-переменных.
- Проверьте, что есть понятный rollback и окно обслуживания.
- Сравните логи до и после изменения: 4xx/5xx, latency, memory, disk, stalled jobs.
- Проведите тест webhook, scheduled workflow и ручного запуска.
Для команды полезно хранить эту проверку рядом с runbook: что изменяли, кто подтвердил результат, какие метрики смотрели и какое условие считается неуспешным релизом.
Связанные материалы для эксплуатации
- Self-hosted n8n — открыть связанный материал для проверки контекста.
- Логи и мониторинг — открыть связанный материал для проверки контекста.
- Backup и update — открыть связанный материал для проверки контекста.
- Launch checklist — открыть связанный материал для проверки контекста.