Moodle ist eines der weltweit ver­brei­tets­ten Open-Source-Lern­ma­nage­ment­sys­te­me. Eine Moodle-In­stal­la­ti­on mit Ku­ber­netes bietet ins­be­son­de­re für größere und wachsende Platt­for­men ent­schei­den­de Vorteile. Durch au­to­ma­ti­sche Ska­lie­rung, Self-Healing und eine flexible In­fra­struk­tur eignet sich Ku­ber­netes ideal für pro­duk­ti­ve Moodle-Um­ge­bun­gen mit vielen Nut­ze­rin­nen und Nutzern.

Schritt 1: Vor­aus­set­zun­gen und passende In­fra­struk­tur

Bevor Sie mit der In­stal­la­ti­on beginnen, benötigen Sie eine funk­tio­nie­ren­de Ku­ber­netes-Umgebung sowie passende Res­sour­cen. Im Gegensatz zu einem Moodle-Install mit Docker oder einer In­stal­la­ti­on von Moodle über die grafische Ober­flä­che von Plesk ist das Setup mit Ku­ber­netes deutlich komplexer, bietet dafür aber auch we­sent­lich mehr Mög­lich­kei­ten in Bezug auf Ska­lie­rung und Hoch­ver­füg­bar­keit. Die Vor­aus­set­zun­gen hängen vom je­wei­li­gen An­wen­dungs­fall ab.

Test- und Ent­wick­lungs-Setups

Wenn Sie Moodle zunächst aus­pro­bie­ren oder eine kleinere Lern­platt­form betreiben möchten, reicht bereits ein kompaktes Ku­ber­netes-Cluster aus. Häufig wird hierfür eine ver­ein­fach­te Dis­tri­bu­ti­on wie K3s verwendet, die sich auch auf einem einzelnen Server in­stal­lie­ren lässt.

Solche Setups eignen sich besonders für erste Ex­pe­ri­men­te oder für kleinere Projekte, bei denen nur wenige Nut­ze­rin­nen und Nutzer gleich­zei­tig auf die Plattform zugreifen. Auch für Ent­wick­lungs- und Test­um­ge­bun­gen ist diese Variante ideal, da sie ver­gleichs­wei­se wenig Res­sour­cen benötigt und schnell ein­ge­rich­tet ist.

Als grobe Ori­en­tie­rung genügt hier ein Server mit 2 bis 4 vCores und 4 bis 8 GB RAM. Beim Spei­cher­platz sollten Sie ca. 80 bis 120 GB SSD einplanen, da neben der Anwendung selbst auch Da­ten­bank­in­hal­te, Kurs­ma­te­ria­li­en und Uploads ge­spei­chert werden.

Moodle für pro­duk­ti­ve Um­ge­bun­gen

Sobald Sie Moodle re­gel­mä­ßig nutzen oder mehreren Nut­ze­rin­nen und Nutzern gleich­zei­tig Zugriff er­mög­li­chen möchten, steigen die An­for­de­run­gen deutlich. In pro­duk­ti­ven Um­ge­bun­gen spielen vor allem Sta­bi­li­tät, Per­for­mance und Aus­fall­si­cher­heit eine zentrale Rolle.

Im Gegensatz zu einfachen Setups läuft Moodle hier nicht mehr nur auf einem einzelnen Server, sondern verteilt sich auf mehrere Maschinen, die so­ge­nann­ten Nodes. Dadurch kann die Plattform Last besser ver­ar­bei­ten und bleibt auch dann er­reich­bar, wenn einzelne Kom­po­nen­ten ausfallen.

Für solche Szenarien empfiehlt sich pro Node eine Aus­stat­tung von 4 bis 8 vCores und 8 bis 16 GB RAM. Zu­sätz­lich sollten mehrere Nodes ein­ge­plant werden, um eine stabile und aus­fall­si­che­re Umgebung auf­zu­bau­en. Ein weiterer wichtiger Be­stand­teil ist ein Load Balancer, der ein­ge­hen­de Anfragen gleich­mä­ßig auf die ver­füg­ba­ren Instanzen verteilt. In Kom­bi­na­ti­on mit einem so­ge­nann­ten Ingress-Con­trol­ler wird außerdem der Zugriff über eine Domain und HTTPS er­mög­licht.

Große Platt­for­men

Wenn Moodle un­ter­neh­mens­weit oder in großen Bil­dungs­ein­rich­tun­gen ein­ge­setzt wird, sind die An­for­de­run­gen nochmals höher. In solchen Fällen greifen oft Hunderte oder Tausende User gleich­zei­tig auf die Plattform zu und es werden große Mengen an Lern­ma­te­ria­li­en ver­ar­bei­tet.

Hier ist eine verteilte In­fra­struk­tur mit mehreren leis­tungs­star­ken Nodes notwendig. Pro Node sollten Sie min­des­tens 8 vCores und 16 bis 32 GB RAM einplanen. Zu­sätz­lich wird der Cluster um mehrere so­ge­nann­te Worker-Nodes erweitert, um die Last effizient zu verteilen. Ein ent­schei­den­der Punkt in solchen Setups ist die Datenbank. Statt sie direkt im Ku­ber­netes-Cluster zu betreiben, empfiehlt es sich, eine externe, gemanagte Da­ten­bank­lö­sung zu nutzen. Diese ist in der Regel per­for­man­ter, einfacher zu warten und besser ab­ge­si­chert.

Darüber hinaus sind weitere Kom­po­nen­ten sinnvoll, um einen stabilen Betrieb si­cher­zu­stel­len:

  • Content Delivery Network, um statische Inhalte schneller aus­zu­lie­fern
  • Separate Spei­cher­lö­sung für Moodle-Daten, um Ska­lie­rung zu er­leich­tern
  • Mo­ni­to­ring-Tools wie Pro­me­theus, um die Sys­tem­aus­las­tung im Blick zu behalten

Über­sichts­ta­bel­le: An­for­de­run­gen auf einen Blick

An­wen­dungs­ge­biet Emp­foh­le­ne Kon­fi­gu­ra­ti­on Typische gleich­zei­ti­ge User In­fra­struk­tur / Setup
Test / Ent­wick­lung 2–4 vCores, 4–8 GB RAM, 80–120 GB SSD bis ca. 20 Single-Node-Cluster (z. B. K3s), einfache In­stal­la­ti­on
Pro­duk­ti­ve Umgebung 4–8 vCores pro Node, 8–16 GB RAM ca. 50–300 Mehrere Nodes, Load Balancer, Ingress, erste Ska­lie­rung
Große Plattform 8+ vCores pro Node, 16–32 GB RAM 300+ Cluster mit mehreren Worker-Nodes, externe Datenbank, ska­lier­ba­re Ar­chi­tek­tur
Free VPS Trial
vServer kostenlos testen für 30 Tage

Lassen Sie sich von den Vorteilen über­zeu­gen. Probieren Sie Ihren Virtual Server ganz in Ruhe 30 Tage lang aus!

Schritt 2: Ku­ber­netes-Cluster ein­rich­ten

Bevor Sie Moodle in Ku­ber­netes in­stal­lie­ren können, benötigen Sie zunächst einen funk­tio­nie­ren­den Ku­ber­netes-Cluster. Für Ein­stei­ge­rin­nen und Ein­stei­ger eignet sich besonders K3s. K3s ist eine leicht­ge­wich­ti­ge Ku­ber­netes-Dis­tri­bu­ti­on, die sich schnell auf einem einzelnen Server in­stal­lie­ren lässt. Verbinden Sie sich per SSH mit Ihrem Server und führen Sie folgenden Befehl aus, um K3s zu in­stal­lie­ren:

curl -sfL https://get.k3s.io | sh -
bash

Die In­stal­la­ti­on dauert nur wenige Minuten. An­schlie­ßend wird der Ku­ber­netes-Dienst au­to­ma­tisch gestartet. Um zu über­prü­fen, ob Ihr Cluster korrekt läuft, führen Sie folgenden Befehl aus:

kubectl get nodes
bash
Bild: Node-Anzeige im Terminal
Der Status Ihres Nodes sollte in der Anzeige „Ready“ sein.

Wenn Ihr Server in der Liste mit dem Status „Ready“ erscheint, ist Ihr Ku­ber­netes-Cluster er­folg­reich ein­ge­rich­tet.

Hinweis

Die In­stal­la­ti­on von K3s über das curl-Skript eignet sich vor allem für Test- und Ent­wick­lungs­um­ge­bun­gen. In pro­duk­ti­ven Szenarien empfiehlt es sich, die In­stal­la­ti­on kon­trol­lier­ter durch­zu­füh­ren, bei­spiels­wei­se über Pa­ket­quel­len, In­fra­struk­tur-Tools oder au­to­ma­ti­sier­te De­ploy­ment-Prozesse, um Si­cher­heit und Nach­voll­zieh­bar­keit zu ge­währ­leis­ten.

Schritt 3: Helm in­stal­lie­ren

Nachdem Ihr Ku­ber­netes-Cluster läuft, benötigen Sie noch ein Tool, um An­wen­dun­gen wie Moodle einfach be­reit­zu­stel­len. Hier kommt Helm ins Spiel. Helm ist ein Pa­ket­ma­na­ger für Ku­ber­netes, mit dem Sie komplexe An­wen­dun­gen mit wenigen Befehlen in­stal­lie­ren können. In­stal­lie­ren Sie zunächst Helm mit folgendem Befehl:

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
bash

Nach der In­stal­la­ti­on können Sie über­prü­fen, ob Helm korrekt ein­ge­rich­tet wurde, indem Sie sich die Version anzeigen lassen:

helm version
bash
Bild: Versionsanzeige von Helm im Terminal
Nach der In­stal­la­ti­on von Helm können Sie den Erfolg über­prü­fen, indem Sie sich die Version anzeigen lassen.

Schritt 4: Namespace erstellen

In Ku­ber­netes werden An­wen­dun­gen im Regelfall in so­ge­nann­ten Name­spaces or­ga­ni­siert. Dadurch bleiben Res­sour­cen sauber getrennt und besser über­schau­bar. Erstellen Sie nun mit dem un­ten­ste­hen­den Befehl einen eigenen Namespace für Moodle:

kubectl create namespace moodle
bash
Bild: Namespace im Terminal erstellen
Im Terminal wird Ihnen mit­ge­teilt, dass der Namespace er­folg­reich erstellt wurde.

Schritt 5: Moodle kon­fi­gu­rie­ren

Bevor Sie Moodle in­stal­lie­ren, sollten Sie einige grund­le­gen­de Ein­stel­lun­gen festlegen. Diese werden in einer Kon­fi­gu­ra­ti­ons­da­tei ge­spei­chert. Erstellen Sie dazu zunächst eine Datei mit dem Namen values.yaml:

nano values.yaml
bash

Fügen Sie folgenden Inhalt ein und passen Sie die Werte nach Bedarf an:

global:
    security:
        allowInsecureImages: true
moodleUsername: admin
moodlePassword: securepassword
moodleEmail: admin@example.com
service:
    type: ClusterIP
ingress:
    enabled: true
    hostname: moodle.example.com
persistence:
    enabled: true
    size: 10Gi
image:
    repository: bitnamilegacy/moodle
volumePermissions:
    image:
        repository: bitnamilegacy/os-shell
metrics:
    image:
        repository: bitnamilegacy/apache-exporter
mariadb:
    image:
        repository: bitnamilegacy/mariadb
    auth:
        rootPassword: rootpassword
        database: moodle
        username: moodle
        password: moodlepassword
yaml

Ersetzen Sie die Bei­spiel­pass­wör­ter unbedingt durch sichere Kenn­wör­ter. Für pro­duk­ti­ve Um­ge­bun­gen sollten Sie sensible Daten nicht direkt in dieser Datei speichern, sondern Ku­ber­netes Secrets verwenden.

Hinweis

Bei Bitnami-Charts reicht es nicht immer aus, nur das Haup­timage der Anwendung an­zu­pas­sen. Je nach ak­ti­vier­ten Funk­tio­nen können weitere Image-Re­fe­ren­zen betroffen sein, zum Beispiel Init-Container, Metrics-Exporter oder zu­sätz­li­che Hilfs­con­tai­ner. Prüfen Sie deshalb vor der In­stal­la­ti­on mit helm show values, welche Image-Re­po­si­to­rys das ver­wen­de­te Chart re­fe­ren­ziert, und stellen Sie alle be­nö­tig­ten Images auf gültige Re­po­si­to­rys um.

Schritt 6: Moodle in­stal­lie­ren

Nun können Sie Moodle in­stal­lie­ren. Helm übernimmt dabei die komplette Ein­rich­tung aller be­nö­tig­ten Kom­po­nen­ten im Hin­ter­grund. Führen Sie für die In­stal­la­ti­on den folgenden Befehl aus:

helm install moodle oci://registry-1.docker.io/bitnamicharts/moodle -n moodle -f values.yaml
bash
Tipp

Die hier ver­wen­de­te Bitnami-Variante ist vor allem als Über­gangs­lö­sung zu verstehen. Das betrifft nicht nur die Images aus dem Re­po­si­to­ry bitnamilegacy, sondern auch die bereits gepackten OCI-Helm-Charts unter docker.io/bitnamicharts: Sie bleiben zwar verfügbar, erhalten aber keine regulären Updates mehr. Für pro­duk­ti­ve Um­ge­bun­gen sollten Sie deshalb lang­fris­tig auf aktuelle, un­ter­stütz­te Container-Images, eine eigene gepflegte Image-Basis oder eine dauerhaft gewartete De­ploy­ment-Variante setzen.

Ku­ber­netes erstellt nun au­to­ma­tisch alle not­wen­di­gen Be­stand­tei­le, darunter:

  • Container (so­ge­nann­te Pods) für Moodle
  • einen Service für den Zugriff
  • per­sis­ten­ten Speicher für Daten
  • eine Datenbank

Schritt 7: Status der In­stal­la­ti­on über­prü­fen

Nachdem Sie die In­stal­la­ti­on gestartet haben, sollten Sie über­prü­fen, ob alle Kom­po­nen­ten korrekt erstellt und gestartet wurden. Ku­ber­netes benötigt in der Regel einen kurzen Moment, um alle Container be­reit­zu­stel­len und zu in­itia­li­sie­ren. Verwenden Sie dazu den folgenden Befehl:

kubectl get pods -n moodle
bash
Bild: Pods im Terminal
Sie sehen im Terminal nun die soeben er­stell­ten Pods; diese sollten den Status „Running“ haben, bevor Sie mit der Anleitung fort­fah­ren.

In der Ausgabe sehen Sie alle laufenden Pods Ihrer Moodle-In­stal­la­ti­on. Achten Sie darauf, dass der Status bei allen Einträgen „Running“ lautet. Sollte statt­des­sen „Pending“ angezeigt werden, ist die In­stal­la­ti­on noch nicht ab­ge­schlos­sen. Sobald alle Pods er­folg­reich gestartet sind, können Sie mit dem Zugriff auf Ihre Moodle-Instanz fort­fah­ren.

Schritt 8: Zugriff auf Moodle

Für erste Tests können Sie auf Ihre Moodle-In­stal­la­ti­on zugreifen, ohne bereits eine Domain oder einen Ingress ein­zu­rich­ten. Stellen Sie dafür sicher, dass Ingress in Ihrer values.yaml zunächst de­ak­ti­viert ist:

ingress:
    enabled: false
yaml

Leiten Sie an­schlie­ßend den lokalen Port 8080 an den Moodle-Service im Ku­ber­netes-Cluster weiter:

kubectl port-forward svc/moodle 8080:80 -n moodle
bash

Dieser Befehl sorgt dafür, dass Anfragen an den Port 8080 Ihres lokalen Rechners direkt an den Moodle-Service im Ku­ber­netes-Cluster wei­ter­ge­lei­tet werden. Öffnen Sie an­schlie­ßend Ihren Browser und rufen Sie die Adresse http://localhost:8080 auf.

Nun erscheint die Moodle-Start­sei­te, wo Sie sich einloggen können. Die In­stal­la­ti­on ist damit ab­ge­schlos­sen. Melden Sie sich nun mit Ihrem Ad­mi­nis­tra­tor-Konto an, dessen Zu­gangs­da­ten Sie in der values.yaml hin­ter­legt haben.

Danach gelangen Sie direkt zum Dashboard und können die Lern­platt­form Moodle nutzen, indem Sie Kurse erstellen und Inhalte hin­zu­fü­gen.

Bild: Moodle-Dashboard
Nach dem Einloggen gelangen Sie zum Dashboard, wo Sie Kurse anlegen und Ihre Seite be­ar­bei­ten können.

Auf diese Weise können Sie Ihre In­stal­la­ti­on schnell und un­kom­pli­ziert testen, ohne zunächst eine Domain oder einen öf­fent­li­chen Zugriff ein­rich­ten zu müssen. Für den späteren pro­duk­ti­ven Einsatz empfiehlt es sich jedoch, Moodle über eine eigene Domain und HTTPS be­reit­zu­stel­len.

Stellen Sie hierfür sicher, dass Ihre Domain per DNS auf die IP-Adresse Ihres Servers zeigt und ein Ingress-Con­trol­ler (z. B. NGINX oder Traefik) im Cluster in­stal­liert ist. Für HTTPS können Sie bei­spiels­wei­se cert-manager mit Let’s Encrypt verwenden, um au­to­ma­tisch ein gültiges SSL-Zer­ti­fi­kat be­reit­zu­stel­len.

Nach der Anpassung über­neh­men Sie die Än­de­run­gen mit:

helm upgrade --install moodle oci://registry-1.docker.io/bitnamicharts/moodle -n moodle -f values.yaml
bash
Hinweis

Der Befehl helm upgrade --install eignet sich hier dazu, Kon­fi­gu­ra­ti­ons­än­de­run­gen aus der values.yaml an­zu­wen­den, etwa für Ingress, Domain oder HTTPS. Er sollte jedoch nicht als voll­stän­di­ges Moodle-Ver­si­ons­up­grade ver­stan­den werden. Für größere Moodle-Ver­si­ons­sprün­ge sollten Sie die of­fi­zi­el­len Moodle-Upgrade-Schritte beachten und vorab voll­stän­di­ge Backups von Datenbank, Moodle-Dateien und moodledata erstellen.

An­schlie­ßend ist Ihre Moodle-Instanz dauerhaft und sicher über Ihre Domain er­reich­bar.

Reviewer

Zum Hauptmenü