Introduction to Helm-Based Odoo Deployment
With our Kubernetes cluster fully operational, the next critical step is deploying the heart of the ERP system: Odoo. This guide explains how to deploy Odoo with Helm, set up PostgreSQL, and expose Odoo internally using Kubernetes Ingress. By doing so, you’ll ensure a secure, scalable, and production-ready ERP environment.
🧠 This article is part of our On-Premise Odoo Infrastructure Series.
Why Use Helm to Deploy Odoo?
Helm simplifies the deployment process by turning complex Kubernetes configurations into manageable packages. More importantly, it helps teams:
- Reuse consistent deployment templates across environments
- Manage version control and configuration updates
- Automate rollbacks and rollouts as needed
As a result, Helm allows faster, more reliable ERP deployments at scale. Furthermore, it standardizes deployments across multiple environments.
Step 1: Install Helm
To get started, make sure Helm is installed on your local machine:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
This ensures you’re ready to manage your Kubernetes applications efficiently.
Step 2: Create a Namespace for Odoo
Next, define a separate namespace to logically isolate your Odoo deployment:
kubectl create namespace odoo
By isolating resources, you’ll improve manageability and security.
Step 3: Prepare a Custom Helm Chart for Odoo
At this stage, you can use the Bitnami chart, or alternatively, create a simplified custom chart for better control. This chart defines your application’s structure.
Chart.yaml
apiVersion: v2
name: odoo
version: 0.1.0
values.yaml
replicaCount: 2
image:
repository: odoo
tag: 16
service:
type: ClusterIP
postgresql:
enabled: true
postgresqlUsername: odoo
postgresqlPassword: odoo
postgresqlDatabase: odoo
Step 4: Deploy Odoo with Helm
Now use Helm to install Odoo into your Kubernetes cluster:
helm install odoo ./k8s-odoo --namespace odoo
This command performs three key actions:
- It launches two Odoo pods for redundancy.
- It creates a PostgreSQL StatefulSet for database persistence.
- It sets up a ClusterIP service for internal-only access.
Consequently, your Odoo service is now logically segmented and resilient.
Step 5: Set Up Internal-Only Access Using Ingress
To allow secure, internal browser access to Odoo, define an Ingress rule as shown below:
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: odoo
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: odoo.internal.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: odoo
port:
number: 8069
Apply this rule using the following command:
kubectl apply -f ingress.yaml -n odoo
🔧 Additionally, ensure internal DNS or
/etc/hosts
correctly mapsodoo.internal.local
to your ingress controller’s IP.
Step 6: Verify Access to Odoo
Once configuration is complete, open a browser on a machine inside your internal network and visit:
http://odoo.internal.local
If everything is set up properly, you should see the Odoo login screen. From here, you can begin managing your ERP environment.
What’s Next?
At this point, you’ve successfully deployed Odoo using Helm inside Kubernetes. In the next and final article of this series, we’ll focus on CI/CD automation using GitLab pipelines to streamline your ERP development lifecycle.
🔁 Previous: Bootstrap Kubernetes for Odoo
🔁 Next: Automate Odoo CI/CD with GitLab
💡 Want to test this setup in your lab? Download our sample Helm chart or get in touch for assistance.