Die einfachste Installation von Odoo in einem Kubernetes Cluster ist der Glasskube Operator.
Odoo ist ein Open-Source ERP ("Enterprise Resource Planning") System, das mithilfe von Apps zahlreiche Funktionen bietet. Zum Beispiel gibt es Erweiterungen für das Customer Relationship Management (CRM), Abrechnungssystem, Mitarbeiter Management, Zeiterfassungssystem und viele weitere Apps.
Odoo wurde in der Programmiersprache Python geschrieben und basiert auf folgenden Komponenten:
github.com/odoo/odoo
Odoo veröffentlicht regelmäßig neue Docker-Images (github.com/odoo/docker
) und
publiziert diese im Docker Hub. Mit diesen Images kann Odoo schnell installiert und ausprobiert werden. Für den
produktiven Einsatz bedarf es jedoch einige Anpassungen und Konfigurationseinstellungen:
Neben der Datenbank speichert Odoo auch Daten in dem Verzeichnis /var/lib/odoo/filestore
des lokalen Dateisystems.
Hauptsächlich handelt es sich dabei um Dateien, die von Usern hochgeladen wurden. Mithilfe von volumes
kann die
Beständigkeit der Dateien im Verzeichnis /var/lib/odoo
erzielt werden.
Achtung In den offiziellen Docker Images wird bei jedem Release einer Minor Version der Major Version Tag (z.B. 16.0) überschrieben. Eine Änderung des Images kann man daher nur am SHA256 Hash erkennen.
Dies führt zu mehreren Problemen:
Um diese Probleme zu lösen, erweitert Glasskube das offizielle Odoo Docker Image und veröffentlicht dieses neue Image unter Verwendung von Immutable Tags.
Das Dockerfile der Glasskube Odoo Images kann hier gefunden werden:
github.com/glasskube/images/odoo
Die Docker Images werden auf Docher Hub veröffentlicht:
hub.docker.com/r/glasskube/odoo
Odoo generiert Asset-Bundles und Images auf der Grundlage der Odoo Version, die im Docker-Image mitgeliefert wird,
speichert diese im Ordner /var/lib/odoo
und referenziert diese Assets in der Datenbanktabelle ir_attachment
. Diese
Asset-Bundles (hauptsächlich Javascript-Bundles) unterscheiden sich je nach Odoo Version, für die sie
gebaut wurden. Wenn sich nun die Odoo-Version ändert, aber die persistierten Asset-Bundles nicht neu
generiert werden, entsteht eine Inkompatibilität zwischen den ausgelieferten Bundles und der Odoo Version.
Dies führt dazu, dass der Nutzer nach einem Odoo Upgrade oftmals nur eine weiße Seite sieht. Folgende Fehlermeldung kann über die Javascript Konsole des Browsers beobachtet werden:
UncaughtPromiseError > TypeError Uncaught Promise > parent is undefined TypeError: parent is undefined removeLine@odo....
In einem Blogeintrag von Holden Rehg werden verschiedene Varianten beschrieben, um die Assets neu zu generieren.
Im Glasskube Docker Image werden die Assets direkt über das Löschen der Datenbankeinträge beim ersten Neuladen neu
generiert, wenn sich die Odoo Version geändert hat. Unter anderem führt das
Shell-Skript run.sh
folgenden SQL Befehl aus:
DELETE
FROM ir_attachment
WHERE res_model = 'ir.ui.view'
AND name LIKE '%assets_%';
Dadurch werden im Glasskube Odoo Docker Image die Assets intelligent neu generiert.
Nun stellt sich die Frage, wie die Glasskube Odoo Docker Images am einfachsten in einem Kubernetes Cluster bereitgestellt werden können. Der Glasskube Kubernetes Operator übernimmt diese Aufgabe. Dieser individualisiert nicht nur die initiale Installation an die Cloud-Infrastruktur des Kunden, sondern löst die oben beschriebenen Probleme der gecachten inkompatiblen Docker Images und übernimmt den Betrieb der Datenbank, deren Backups und das Update-Management. Odoo Updates werden automatisiert im Zuge eines Operator-Updates eingeleitet.
Wenn bereits ein Kubernetes Cluster vorhanden und kubectl
installiert ist, muss für die Installation von Odoo das
Git-Repository github.com/glasskube/operator
geklont werden.
git clone git@github.com:glasskube/operator.git
Das Skript deploy.sh
installiert die benötigten
Dependencies und Custom-Ressource-Definitionen.
# Cluster-wide deployment of version X.Y.Z (or latest)
# of the Glasskube operator
deploy/deploy.sh -v latest
Sobald die Installation des Operators abgeschlossen ist, kann Odoo installiert werden. Dazu muss lediglich die folgende Custom-Resource im Cluster erstellt werden:
Odoo.yaml
apiVersion: "glasskube.eu/v1alpha1"
kind: Odoo
metadata:
name: odoo
namespace: odoo
spec:
host: odoo.hostname.tld # hostname
demoEnabled: true # Ob Odoo initial mit Demo-Daten befüllt werden soll.
kubectl apply -f Odoo.yaml
Damit ist die Installation abgeschlossen. Updates des Kubernetes Operators werden automatisiert Odoo updaten.
Wichtig Es muss ein DNS Eintrag auf den
LoadBalancer
bzw. den Ingress Host gesetzt werden. SSL-Zertifikate werden automatisch vomLoadBalancer
bzw.cert-manager
generiert, wenn einClusterIssuer
konfiguriert ist.
In der Kubernetes Custom-Resource-Definition kann angeben werden, ob Odoo initial mit Demo-Daten befüllt werden soll.
Für Demonstrationen und ein erstes Ausprobieren ist es sinnvoll diesen Parameter auf true
zu setzen, für den
produktiven Einsatz ist das allerdings nicht empfohlen.
Achtung Nach der initialen Installation hat eine Änderung dieses Parameters keinen Einfluss mehr. Bestehende Odoo Demo Daten werden nicht gelöscht.
Der Glasskube Kubernetes Operator für Odoo sichert automatisiert die PostgreSQL Datenbank in einem MinIO Bucket
im glasskube-system
namespace.
Odoo hat ein Runbot entwickelt, der automatisiert Odoo Instanzen für Git Branches erstellt. Dieses Tool ist besonders nützlich, wenn Enterprise oder Custom-Addons verwendet werden, da hier der Gesamte Odoo Source Code mit den Add-Ons zusammengeführt wird. Ein OCA (Odoo Community Association) Member hat eine Runbot ähnliche Version für die automatisierte Provisionierung von Odoo Instanzen in einem Kubernetes Cluster erstellt: Runboat
Das offizielle Odoo Docker Image eignet sich nicht direkt für den produktiven Einsatz, da dieses keine Immutable Tags hat und die Persistenz der Asset-Bundles zu Problemen beim Versionsupdate führt. Mithilfe des Glasskube Odoo Docker Images und dem Glasskube Kubernetes Operators kann Odoo in wenigen Schritten in einem Kubernetes Cluster installiert werden.
Skalieren Sie Ihre IT-Infrastruktur mühelos und betreiben Sie Ihre Anwendungen schnell und sicher mit unseren cloudbasierten Technologielösungen.
Ihre Cloud Native Experten für zuverlässe IT-Infrastrukturlösungen und den automatisieren Betrieb von Open Source tools.