<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3" -->

---
title: How We Deployed, Maintained, and Migrated Production n8n...
description: Fairwinds describes running production n8n on Amazon EKS in queue mode, with dedicated main, worker, and webhook processor pods backed by PostgreSQL, Redis,...
canonical: https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How We Deployed, Maintained, and Migrated Production n8n on EKS | daily.dev
og:description: Fairwinds describes running production n8n on Amazon EKS in queue mode, with dedicated main, worker, and webhook processor pods backed by PostgreSQL, Redis,...
og:url: https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3
og:image: https://api.daily.dev/og/posts/w5wOmbYN3.png
og:image:alt: How We Deployed, Maintained, and Migrated Production n8n on EKS
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How We Deployed, Maintained, and Migrated Production n8n on EKS

**[Fairwinds Blog](https://daily.dev/sources/fairwinds-blog)** · 4 min read · 13 upvotes · 1 comments

## Summary

Fairwinds describes running production n8n on Amazon EKS in queue mode, with dedicated main, worker, and webhook processor pods backed by PostgreSQL, Redis, S3, and AWS Secrets Manager synced via External Secrets Operator. After about a year on the community Helm chart, they migrated to n8n's official Helm chart because the community chart's workload model (StatefulSet main pods) differed from the official chart's Deployment-based single shared PVC model, making an in-place upgrade impossible. Since no state needed to persist on the main pod's disk, they disabled main persistence, treated the migration as a full cutover, tested with a restored database snapshot in non-production, and preserved the database, queue, object storage, IAM role, and secrets through the switch. A public sample repo of their official-chart Helm values is linked.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.fairwinds.com/blog/how-we-deployed-maintained-and-migrated-production-n8n-on-eks>

## Questions this post answers

### Why would migrating n8n from the community Helm chart to the official Helm chart require a full cutover instead of an in-place upgrade?

The community chart runs the main n8n pod as a StatefulSet with one persistent volume per replica, while the official chart runs main as a Deployment backed by a single shared PVC. Because a gp3 EBS ReadWriteOnce volume cannot attach to multiple main pods across nodes, an in-place Helm upgrade did not fit, so the workload had to be redeployed as a full cutover instead.

_daily.dev surfaces real-world migration writeups like this for teams planning their own n8n or Helm chart cutover._

### What AWS services are needed to run n8n in queue mode on EKS for production traffic?

A production n8n deployment on EKS in queue mode needs PostgreSQL for workflow and execution data, Redis for the job queue, S3 for binary file storage, and AWS Secrets Manager synced into Kubernetes via External Secrets Operator for application credentials, API keys, and encryption keys. Dedicated worker and webhook processor pods handle job execution and webhook traffic separately from the main pod.

_Engineers architecting self-hosted automation platforms track these production setup patterns on daily.dev._

### Is it safe to disable persistent storage on the n8n main pod when running in queue mode?

Yes, when PostgreSQL, Redis, S3, and Secrets Manager hold all required application state, a replacement main pod can start and reconnect without needing pod-specific disk storage. In one production deployment, checking the main pod volume showed nothing needed to persist, so main persistence was disabled entirely after migrating to n8n's official Helm chart.

_daily.dev helps engineers weighing storage and statefulness trade-offs in Kubernetes deployments like n8n._

## Community discussion

Top comments from developers on daily.dev.

**@agustinbarrientos** · 0 upvotes

> How did you handle webhooks arriving during the chart cutover?

## Similar posts on daily.dev

- [𝐇𝐲𝐛𝐫𝐢𝐝 𝐃𝐞𝐯𝐞𝐥𝐨𝐩𝐦𝐞𝐧𝐭 𝐖𝐨𝐫𝐤𝐟𝐥𝐨𝐰: 𝐅𝐫𝐨𝐦 𝐎𝐧-𝐏𝐫𝐞𝐦 𝐭𝐨 𝐀𝐖𝐒](https://daily.dev/posts/35wh6slad) · Medium · 1 upvotes · 0 comments
- [Operating Kubernetes at scale: a few stories from running Amazon EKS](https://daily.dev/posts/operating-kubernetes-at-scale-a-few-stories-from-running-amazon-eks-vdcgnhxcm) · The New Stack · 1 upvotes · 0 comments
- [Same App, Two Clouds: Migrating from EKS to GKE with Kustomize Overlays](https://daily.dev/posts/same-app-two-clouds-migrating-from-eks-to-gke-with-kustomize-overlays-ndfrvocib) · ITNEXT · 0 upvotes · 0 comments
- [Salesforce Migrates 1,000\+ EKS Clusters to Karpenter to Improve Scaling Speed and Efficiency](https://daily.dev/posts/salesforce-migrates-1-000-eks-clusters-to-karpenter-to-improve-scaling-speed-and-efficiency-hwplkodi3) · InfoQ · 0 upvotes · 0 comments
- [Scaling Kubernetes pods with KEDA based on Amazon SQS queue depth](https://daily.dev/posts/scaling-kubernetes-pods-with-keda-based-on-amazon-sqs-queue-depth-i7d2zcmny) · CNCF · 1 upvotes · 0 comments

---

Tags: [#aws](https://daily.dev/tags/aws), [#kubernetes](https://daily.dev/tags/kubernetes), [#helm](https://daily.dev/tags/helm), [#n8n](https://daily.dev/tags/n8n)

[View this post on daily.dev](https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How We Deployed, Maintained, and Migrated Production n8n on EKS","url":"https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3"},"datePublished":"2026-09-23T21:05:31.550Z","dateModified":"2026-09-23T21:05:55.152Z","description":"Fairwinds describes running production n8n on Amazon EKS in queue mode, with dedicated main, worker, and webhook processor pods backed by PostgreSQL, Redis,...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e5d441667d4d6fedc46478d214e83d6a?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/e5d441667d4d6fedc46478d214e83d6a?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Fairwinds Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Fairwinds Blog","logo":"https://media.daily.dev/image/upload/s--czVElT3y--/f_auto,q_auto/v1780213254/logos/fairwinds-blog?_a=BAMAMiWQ0","url":"https://daily.dev/sources/fairwinds-blog"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":13},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"aws,kubernetes,helm,n8n","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Fairwinds Blog","item":"https://daily.dev/sources/fairwinds-blog"},{"@type":"ListItem","position":3,"name":"How We Deployed, Maintained, and Migrated Production n8n on EKS"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3","comment":[{"@type":"Comment","text":"How did you handle webhooks arriving during the chart cutover?","datePublished":"2026-09-27T18:00:33.997Z","url":"https://daily.dev/posts/w5wOmbYN3#c-4obykOQ1I","author":{"@type":"Person","name":"Agustin Barrientos","url":"https://daily.dev/agustinbarrientos","image":"https://media.daily.dev/image/upload/s--5ayxQnqn--/f_auto/v1788281802/avatars/avatar_wQYYVe5Tbj0NJ7C7qPoa8?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/how-we-deployed-maintained-and-migrated-production-n8n-on-eks-w5wombyn3#faq","mainEntity":[{"@type":"Question","name":"Why would migrating n8n from the community Helm chart to the official Helm chart require a full cutover instead of an in-place upgrade?","acceptedAnswer":{"@type":"Answer","text":"The community chart runs the main n8n pod as a StatefulSet with one persistent volume per replica, while the official chart runs main as a Deployment backed by a single shared PVC. Because a gp3 EBS ReadWriteOnce volume cannot attach to multiple main pods across nodes, an in-place Helm upgrade did not fit, so the workload had to be redeployed as a full cutover instead. daily.dev surfaces real-world migration writeups like this for teams planning their own n8n or Helm chart cutover."}},{"@type":"Question","name":"What AWS services are needed to run n8n in queue mode on EKS for production traffic?","acceptedAnswer":{"@type":"Answer","text":"A production n8n deployment on EKS in queue mode needs PostgreSQL for workflow and execution data, Redis for the job queue, S3 for binary file storage, and AWS Secrets Manager synced into Kubernetes via External Secrets Operator for application credentials, API keys, and encryption keys. Dedicated worker and webhook processor pods handle job execution and webhook traffic separately from the main pod. Engineers architecting self-hosted automation platforms track these production setup patterns on daily.dev."}},{"@type":"Question","name":"Is it safe to disable persistent storage on the n8n main pod when running in queue mode?","acceptedAnswer":{"@type":"Answer","text":"Yes, when PostgreSQL, Redis, S3, and Secrets Manager hold all required application state, a replacement main pod can start and reconnect without needing pod-specific disk storage. In one production deployment, checking the main pod volume showed nothing needed to persist, so main persistence was disabled entirely after migrating to n8n's official Helm chart. daily.dev helps engineers weighing storage and statefulness trade-offs in Kubernetes deployments like n8n."}}]}
```

