# MariaDB via Kubernetes installieren: Schritt-für-Schritt-Anleitung

MariaDB lässt sich mit Kubernetes skalierbar und betriebssicher betreiben. In dieser Anleitung erstellen Sie ein StatefulSet, binden ein persistentes Volume ein und konfigurieren den Zugriff auf den Datenbankdienst. So integrieren Sie MariaDB dauerhaft und kontrolliert in Ihr Kubernetes-Cluster.

## Warum ist die Kombination MariaDB und Kubernetes sinnvoll?

Kubernetes hilft dabei, [MariaDB](https://www.ionos.de/digitalguide/server/knowhow/was-ist-mariadb/) zuverlässig zu starten, zu skalieren und zu überwachen. Es **verteilt Arbeitslasten intelligent** und sorgt dafür, dass die Datenbank bei Ausfällen automatisch neu startet. Mit Kubernetes können Sie Ressourcen effizient nutzen und Ihre Infrastruktur leichter verwalten – und das sowohl in der Cloud als auch lokal im Rechenzentrum.

## Das sind die Anforderungen

Bevor Sie beginnen, überprüfen Sie, ob folgende Voraussetzungen erfüllt sind:

- Ein laufender [Kubernetes-Cluster](https://www.ionos.de/digitalguide/server/knowhow/kubernetes-cluster/) ist vorhanden (zum Beispiel Minikube, AKS, EKS oder VKE)
- kubectl ist auf Ihrer lokalen Maschine eingerichtet
- Sie haben Zugriff auf ein Terminal mit Admin-Rechten im Cluster
- Optional: eine StorageClass oder lokal konfigurierter HostPath für die Persistenz

## MariaDB via Kubernetes installieren: Schritt für Schritt

Wir zeigen Ihnen im Folgenden, wie Sie MariaDB im Cluster ausrollen und die Daten dauerhaft speichern. Ausführliche Informationen zu Kubernetes finden Sie in unserem [Kubernetes-Tutorial](https://www.ionos.de/digitalguide/server/konfiguration/kubernetes-tutorial/).

### Schritt 1: PersistentVolume (PV) und PVC einrichten

MariaDB in Kubernetes benötigt **persistenten Speicher** für die Datenbankinhalte. Damit diese auch bei einem Neustart oder Re-Deployment erhalten bleiben, konfigurieren wir ein PersistentVolume (PV) und eine passende PersistentVolumeClaim (PVC).

Das PV definiert einen physischen Speicherort im Cluster, in diesem Fall `/mnt/data/mariadb`. Erstellen Sie dazu eine YAML-Datei namens `mariadb-pv.yaml`:

```yaml
apiVersion: v1
kind: PersistentVolume
metadata:
    name: mariadb-pv
spec:
    capacity:
        storage: 10Gi
    accessModes:
        - ReadWriteOnce
    persistentVolumeReclaimPolicy: Retain
    hostPath:
        path: /mnt/data/mariadb
```

Der Eintrag `Retain` stellt sicher, dass die Daten nach dem Löschen der PVC erhalten bleiben. Wenden Sie das PV an:

```bash
kubectl apply -f mariadb-pv.yaml
```

Die PVC reserviert Speicherplatz vom PV für den Pod. Legen Sie die Datei `mariadb-pvc.yaml` mit folgendem Inhalt an:

```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: mariadb-pvc
spec:
    accessModes:
        - ReadWriteOnce
    resources:
        requests:
            storage: 10Gi
```

Wenden Sie diese Konfiguration an:

```bash
kubectl apply -f mariadb-pvc.yaml
```

Prüfen Sie anschließend, ob der Speicher erfolgreich gebunden wurde:

```bash
kubectl get pvc mariadb-pvc
```

Wenn der Status `Bound` angezeigt wird, ist alles korrekt verbunden.

### Schritt 2: ConfigMap mit my.cnf erstellen

Damit MariaDB optimal konfiguriert ist, legen Sie eine benutzerdefinierte Konfigurationsdatei über eine **ConfigMap** an. Diese wird später in den Container eingebunden.

Erstellen Sie die Datei `mariadb-config.yaml` mit diesen Einstellungen:

```yaml
apiVersion: v1
kind: ConfigMap
metadata:
    name: mariadb-config
    labels:
        app: mariadb
data:
    my.cnf: |
        [mysqld]
        bind-address=0.0.0.0
        default_storage_engine=InnoDB
        innodb_file_per_table=1
        max_connections=1000
```

Diese Optionen stellen sicher, dass MariaDB von außen erreichbar ist (`bind-address`), Sie moderne Speicheroptionen wie [InnoDB](https://www.ionos.de/digitalguide/hosting/hosting-technik/was-ist-innodb/) nutzen und bis zu 1000 Verbindungen möglich sind.

Aktivieren Sie die Konfiguration:

```bash
kubectl apply -f mariadb-config.yaml
```

### Schritt 3: StatefulSet für MariaDB erstellen

Ein StatefulSet sorgt dafür, dass jeder Pod im Cluster eine feste Identität und einen stabilen Speicher erhält. Damit behalten alle Datenbankinstanzen auch nach einem Neustart ihre Zuordnung zu einem bestimmten Volume. Erstellen Sie dafür zunächst die Datei `mariadb-statefulset.yaml`.

```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
    name: mariadb
spec:
    serviceName: "mariadb"
    replicas: 1
    selector:
        matchLabels:
            app: mariadb
    template:
        metadata:
            labels:
                app: mariadb
        spec:
            containers:
            - name: mariadb
                image: mariadb:latest
                ports:
                - containerPort: 3306
                    name: mariadb
                env:
                - name: MYSQL_ROOT_PASSWORD
                    value: "strong_password"
                volumeMounts:
                - name: mariadb-storage
                    mountPath: /var/lib/mysql
                - name: config-volume
                    mountPath: /etc/mysql/conf.d
            volumes:
            - name: config-volume
                configMap:
                    name: mariadb-config
    volumeClaimTemplates:
    - metadata:
            name: mariadb-storage
        spec:
            accessModes: ["ReadWriteOnce"]
            resources:
                requests:
                    storage: 10Gi
```

Wenden Sie das StatefulSet an:

```bash
kubectl apply -f mariadb-statefulset.yaml
```

Prüfen Sie den Erfolg mit:

```bash
kubectl get statefulset mariadb
```

Sobald `READY 1/1` angezeigt wird, läuft Ihr erster MariaDB-Kubernetes-Pod erfolgreich im Cluster.

### Schritt 4: Zugriff über einen Kubernetes-Service einrichten

Damit andere Anwendungen innerhalb des Clusters auf MariaDB zugreifen können, benötigen wir einen Kubernetes-Service. Erstellen Sie die Datei `mariadb-service.yaml` mit folgender Konfiguration:

```yaml
apiVersion: v1
kind: Service
metadata:
    name: mariadb
spec:
    ports:
    - port: 3306
        targetPort: 3306
    selector:
        app: mariadb
```

Durch diesen Service ist der MariaDB-Kubernetes-Pod unter einem festen **DNS-Namen** (`mariadb`) erreichbar.

Aktivieren Sie die Konfiguration:

```bash
kubectl apply -f mariadb-service.yaml
```

Prüfen Sie, ob der Service verfügbar ist:

```bash
kubectl get svc mariadb
```

Sie sollten eine interne IP-Adresse und den **Port 3306** sehen. Diese Informationen sind wichtig für den nächsten Schritt.

### Schritt 5: Verbindung zur MariaDB-Kubernetes-Instanz

Um zu kontrollieren, ob der Datenbankdienst korrekt funktioniert, können Sie einen **temporären Pod** starten, der als MySQL-Client fungiert. Führen Sie folgenden Befehl aus:

```bash
kubectl run -it --rm --image=mariadb mariadb-client -h mariadb -u root -p strong_password
```

Nach Eingabe des Passworts gelangen Sie in die SQL-Konsole. Testen Sie dort beispielsweise die Anzeige der Datenbanken:

```sql
SHOW DATABASES;
```

Sie sollten Standarddatenbanken wie `mysql`, `information_schema` oder `performance_schema` sehen. Geben Sie zum Beenden `exit` ein.

### Schritt 6: StatefulSet skalieren

Ein großer Vorteil von Kubernetes ist die einfache Skalierung. Wenn Ihre Anwendung mehr Last erzeugt oder mehrere Verbindungen gleichzeitig benötigt, können Sie MariaDB durch weitere Instanzen erweitern. In der Praxis geschieht das über das Anpassen der Replikate.

Führen Sie diesen Befehl aus, um drei Pods zu starten:

```bash
kubectl scale statefulset mariadb --replicas=3
```

Dieser Ausdruck weist Kubernetes an, zusätzlich zum bestehenden Pod zwei weitere zu erstellen. Jeder Pod erhält dabei eine eigene Identität (zum Beispiel `mariadb-0`, `mariadb-1`, `mariadb-2`) sowie ein eigenes Volume.

Überprüfen Sie den Status der Skalierung mit:

```bash
kubectl get statefulset mariadb
```

Sie sollten nun `READY 3/3` sehen. Kontrollieren Sie die laufenden Pods:

```bash
kubectl get pods -l app=mariadb
```

Wenn die erhöhte Last vorbei ist oder Sie Testressourcen einsparen möchten, können Sie die Anzahl der Pods wieder reduzieren:

```bash
kubectl scale statefulset mariadb --replicas=1
```

Nach kurzer Zeit entfernt Kubernetes die zusätzlichen Pods. Nur `mariadb-0` bleibt bestehen. Daten in den Volumes von gelöschten Pods bleiben durch die StatefulSet-Architektur erhalten, solange Sie das Volume nicht manuell löschen.

Tipp Mehr Anleitungen zu MariaDB finden Sie in den Tutorials „[MariaDB via Docker installieren](https://www.ionos.de/digitalguide/hosting/hosting-technik/mariadb-docker/)“ und „[MariaDB auf Proxmox installieren](https://www.ionos.de/digitalguide/hosting/hosting-technik/proxmox-mariadb/)“.


This is a markdown version of: [https://www.ionos.de/digitalguide/hosting/hosting-technik/mariadb-kubernetes/](https://www.ionos.de/digitalguide/hosting/hosting-technik/mariadb-kubernetes/) for AI/LLM consumption.