DEV Community

Cover image for You Probably Don't Need Kubernetes for Odoo
Parthiv Patel
Parthiv Patel

Posted on

You Probably Don't Need Kubernetes for Odoo

You Probably Don't Need Kubernetes for Odoo

I've watched Odoo agencies spend months architecting Kubernetes clusters for deployments that were running perfectly fine on a single server with Docker Compose.

I've seen consultants with three clients hire a DevOps contractor to manage their EKS cluster. I've debugged production Odoo outages caused entirely by Kubernetes complexity that had nothing to do with Odoo itself.

Kubernetes is an incredible piece of technology. It's also the most over-adopted tool in the Odoo ecosystem right now.

Let me explain why your Odoo deployment almost certainly doesn't need it, what you actually need instead, and where the industry is headed.


The mismatch

Kubernetes was built by Google to orchestrate millions of containers across a global fleet of servers.

You have an Odoo 18 instance with 15 users running accounting and inventory.

There's a mismatch here.

Signs you don't need Kubernetes for Odoo:

  • You're running fewer than 10 Odoo instances
  • Your team doesn't include a dedicated DevOps engineer
  • Your heaviest traffic is 50 concurrent users generating reports
  • You're not deploying Odoo custom modules multiple times per day
  • A single 4-core server handles your load without breaking a sweat
  • You spend more time debugging infrastructure than building Odoo solutions

If any of these describe you, Kubernetes is solving a problem you don't have while creating several new ones.


The real cost of Kubernetes for Odoo

Let's do the math that nobody does before adopting K8s.

Kubernetes for a typical Odoo agency (5 client instances):

  • EKS/GKE cluster: $73/month minimum (just the control plane)
  • 3 worker nodes (t3.medium): ~$120/month
  • Load balancer: ~$20/month
  • Persistent volumes for filestore: ~$30/month
  • RDS or Cloud SQL for PostgreSQL: ~$50/month
  • Your time debugging networking, ingress controllers, and PVC issues: priceless

Total: ~$300/month + significant engineering time

The same workload on a single well-configured server:

  • One 4-core VPS on Hetzner: $16/month
  • Docker with Traefik for routing and automatic SSL: $0
  • PostgreSQL with pgBouncer on the same box: $0
  • Automated backups to S3: ~$2/month

Total: ~$18/month + you ship Odoo features instead of debugging YAML

That's a 94% cost reduction. And the single-server setup is easier to debug, easier to backup, and easier to restore.

I've seen a two-person Odoo consultancy running a $250/month GKE cluster for three client instances that could run on a $20 VPS. The heaviest instance had 8 concurrent users.

That's not engineering. That's resume-driven development.


"But what about scaling?"

It might scale. It probably won't. Not the way you think.

Odoo's bottleneck is almost never horizontal compute scaling. It's PostgreSQL. Specifically:

  • Unoptimized queries from the ORM
  • Missing indexes on custom models
  • Connection exhaustion from too many workers
  • Poorly tuned shared_buffers and work_mem

Kubernetes doesn't fix any of these. Adding more pods running the same unoptimized Odoo code doesn't make your slow report faster. It just makes more pods wait for the same overloaded database.

What actually makes Odoo faster:

  • pgBouncer for connection pooling (3x improvement on connection-heavy workloads)
  • PostgreSQL configuration tuned for Odoo's access patterns
  • Read replicas for report generation
  • Proper worker configuration (not just --workers=4 and hoping)

You don't need an orchestration layer. You need a database that's configured correctly.

And if you genuinely do outgrow a single server? Migrating from Docker Compose to a larger setup is straightforward. You already have container images. The hard part was never the orchestration. The hard part was always the database.


What Odoo deployments actually need

After running 1,000+ Odoo instances in production, here's what matters. None of it requires Kubernetes.

1. Container isolation, not orchestration

Every Odoo instance should run in its own container. This gives you:

  • Process isolation between clients
  • Independent Python/Odoo versions per instance
  • Clean upgrades without affecting other instances
  • Reproducible environments from dev to production

Docker does this perfectly. You don't need a cluster scheduler to run 10 containers on one server.

2. A properly configured PostgreSQL

This is where 90% of Odoo performance problems live. Not in compute. Not in orchestration. In the database.

A typical unoptimized Odoo query takes 850ms. The same query on a properly tuned PostgreSQL with pgBouncer: 280ms. That's a 67% improvement from configuration alone.

The settings that matter:

  • shared_buffers: 25% of available RAM
  • work_mem: 64-256MB depending on workload
  • effective_cache_size: 75% of available RAM
  • random_page_cost: 1.1 (for SSDs, which you should be using)
  • max_connections: Keep low, use pgBouncer instead

Most Odoo hosting providers don't touch these. They run PostgreSQL with default settings and wonder why their client's 10,000-line inventory report takes 45 seconds.

3. Automated backups that actually work

"It won't happen to me" is not a backup strategy.

Your Odoo deployment needs:

  • Daily automated backups (database + filestore)
  • Weekly and monthly retention (GFS rotation)
  • Off-site storage (not on the same server)
  • Tested restores (a backup you've never restored is not a backup)

This is a cron job and a storage bucket. Not a Kubernetes CronJob with a PersistentVolumeClaim mounted to a sidecar container pulling credentials from a sealed secret.

4. SSL, routing, and zero-downtime deploys

Traefik or nginx handles all of this on a single server:

  • Automatic Let's Encrypt SSL for every instance
  • Domain-based routing to the right container
  • Zero-downtime rolling restarts

You don't need an Ingress controller, a cert-manager operator, and a service mesh to serve HTTPS.

5. Git-driven deployments

Push to main, your Odoo instance updates. That's the workflow.

This is a webhook and a Docker pull. Not ArgoCD watching a Helm chart repository syncing to a GitOps-managed cluster state.


The Kubernetes complexity tax

Every layer of abstraction has a cost. Here's what Kubernetes adds to your Odoo deployment:

Things you now need to understand:

  • Pods, Deployments, StatefulSets, DaemonSets
  • Services, Ingress, NetworkPolicies
  • PersistentVolumes, PersistentVolumeClaims, StorageClasses
  • ConfigMaps, Secrets, ServiceAccounts
  • RBAC, PodSecurityPolicies, SecurityContexts
  • Helm charts, Kustomize, or raw manifests
  • Container networking (CNI plugins, DNS resolution)
  • Health checks (liveness, readiness, startup probes)

Things that can now break that couldn't before:

  • Pod scheduling failures due to resource constraints
  • Persistent volume attachment issues
  • DNS resolution between services
  • Ingress controller misconfiguration
  • Certificate renewal failures
  • Node pressure evictions killing your Odoo pods mid-transaction
  • etcd corruption taking down your entire cluster

Things you still need to do anyway:

  • Configure PostgreSQL properly
  • Set up backups
  • Monitor your Odoo instances
  • Manage custom modules
  • Handle Odoo upgrades

Kubernetes doesn't eliminate operational work. It adds a new category of operational work on top of the work you already had.


What we built instead

We ran into this exact problem. Our parent company, OpenEduCat, manages 1,000+ deployments for educational institutions worldwide. We tried Kubernetes. We spent months on it. We ripped it out.

Not because Kubernetes is bad. Because it was the wrong tool for the job.

What Odoo deployments actually need is a platform that handles the infrastructure concerns without the orchestration overhead. So we built OEC.sh.

Here's what it does:

Multi-project per server. Run 3, 5, or 10 Odoo instances on a single server. Container isolation between each. Shared infrastructure cost. A $20 Hetzner server running 5 client instances costs $4/client/month for compute.

PostgreSQL that's actually configured. pgBouncer pre-installed. Auto-tuned config based on your server size. Read replica support when you need it. Slow query detection with alerts. The database optimization that Kubernetes can't provide.

Your cloud, your servers. Deploy to AWS, GCP, Azure, DigitalOcean, Hetzner, Vultr, Linode, OVH, or bring your own server. 14+ providers, 40+ regions. No vendor lock-in. If you want to leave, your server is your server.

Backups to 7 storage providers. AWS S3, Cloudflare R2, Backblaze B2, MinIO, DigitalOcean Spaces, FTP, or SFTP. GFS retention. One-click restore. Encrypted with AES-256. Pick whatever fits your budget.

Git-driven CI/CD. Connect GitHub or GitLab. Push to deploy. Automatic builds. Rollback to any previous deployment. No Helm charts. No ArgoCD. No GitOps ceremony.

Everything Kubernetes would give you, without Kubernetes:

What you need Kubernetes approach OEC.sh approach
Container isolation Pods with resource limits Docker containers with resource quotas
Traffic routing Ingress controller + cert-manager Traefik with automatic SSL
Health monitoring Liveness/readiness probes Built-in health checks + alerting
Scaling HPA + cluster autoscaler Multi-project per server + easy server upgrades
Secrets management K8s Secrets + external operators Environment variables with encryption at rest
Deployments Helm + ArgoCD + manifests Git push or one-click deploy
Backups CronJobs + PVC + sidecar Automated with 7 storage options
Monitoring Prometheus + Grafana stack Built-in metrics, logs, and slow query detection

The point isn't that Kubernetes can't do these things. It absolutely can. The point is that you don't need an aircraft carrier to cross a river.


When you actually might need Kubernetes for Odoo

To be fair, there are edge cases:

  • You're a large enterprise running 100+ Odoo instances across multiple regions with dedicated platform teams. Kubernetes might make sense for the orchestration layer.
  • You're building a multi-tenant SaaS on top of Odoo where instances spin up and down dynamically. The scheduling and auto-scaling capabilities are genuinely useful.
  • You already have a Kubernetes platform that other services run on, and adding Odoo to it is incremental. The marginal complexity is low.

Even in these cases, the PostgreSQL problem doesn't go away. Kubernetes schedules your pods. It doesn't optimize your queries.


The decision framework

Ask yourself these questions:

  1. Do I have a dedicated person who understands Kubernetes networking, storage, and security? If no, don't use Kubernetes.

  2. Am I running more than 50 Odoo instances that need independent scaling? If no, a managed platform handles this better.

  3. Is my actual bottleneck compute orchestration, or is it PostgreSQL performance? If it's the database (it almost always is), Kubernetes doesn't help.

  4. Am I choosing Kubernetes because it solves my problem, or because it looks good on my architecture diagram? Be honest.

  5. Could I spend the Kubernetes engineering time building Odoo features for my clients instead? The answer is almost always yes.


The bottom line

The Odoo ecosystem has a complexity problem. Not because Odoo is simple — it's a massive ERP. But because the infrastructure around it has been over-engineered by people solving problems they don't have.

Your Odoo deployment needs three things done well:

  1. Containers for isolation and reproducibility
  2. A fast database with proper PostgreSQL tuning
  3. Automated operations — backups, SSL, monitoring, deployments

Docker gives you #1. A properly configured PostgreSQL gives you #2. A platform like OEC.sh gives you all three without the operational overhead.

Kubernetes gives you all of this too. Plus 10,000 lines of YAML, a $300/month cloud bill, and debugging sessions at 3 AM because a PersistentVolumeClaim won't bind.

Choose wisely.


OEC.sh is a multi-cloud Odoo hosting platform. Deploy to any cloud provider. Run multiple projects per server. PostgreSQL optimized for Odoo out of the box. Start free.

Top comments (0)