# Longhorn Storage unter Kubernetes

Das [SUSE Longhorn](https://longhorn.io) Projekt stellt eine Open-Source-Lösung für verteilte Block-Speicher für Kubernetes bereit.

## Was ist Longhorn?

Longhorn ist eine kostenlose und Open-Source-Software-Defined-Storage-Lösung, die für Kubernetes entwickelt wurde. Sie bietet persistente Speichervolumes für zustandsbehaftete Anwendungen, die auf Kubernetes laufen.

### Hauptmerkmale von Longhorn:

- **Einfache Installation und Verwaltung:** Longhorn lässt sich einfach in einem Kubernetes-Cluster installieren und über die Kubernetes-API oder eine benutzerfreundliche Weboberfläche verwalten.
- **Hochverfügbarkeit:** Longhorn repliziert Speicherdaten über mehrere Knoten hinweg, um Ausfallsicherheit zu gewährleisten. Wenn ein Knoten ausfällt, sind die Daten weiterhin verfügbar.
- **Snapshots und Backups:** Es unterstützt das Erstellen von Snapshots von Volumes und das Sichern dieser Snapshots an externen Speicherorten (z. B. S3-kompatible Speicher, NFS).
- **Dynamische Volume-Bereitstellung:** Volumes können dynamisch erstellt und an Pods angehängt werden, wenn diese gestartet werden.
- **Plattformübergreifend:** Longhorn funktioniert auf verschiedenen Cloud-Providern und On-Premises-Umgebungen.
- **Block-Speicher:** Longhorn stellt Block-Speicher bereit, der für eine Vielzahl von Anwendungen geeignet ist, einschließlich Datenbanken und anderer zustandsbehafteter Dienste.

## Anwendungsfälle

Longhorn eignet sich hervorragend für Szenarien, in denen Sie:

- Zustandsbehaftete Anwendungen auf Kubernetes betreiben, die persistenten Speicher benötigen.
- Eine einfache und kostengünstige Speicherlösung für Ihren Kubernetes-Cluster suchen.
- Hochverfügbarkeit und Datensicherheit für Ihre Speicherdaten benötigen.
- Flexibilität bei der Verwaltung und Sicherung Ihrer Speicherdaten wünschen.

## Installation

Die Installation von Longhorn erfolgt typischerweise über die Bereitstellung von YAML-Manifesten in Ihrem Kubernetes-Cluster. Sie können die neuesten Installationsanweisungen und Manifeste auf der [offiziellen Longhorn-Dokumentation](https://longhorn.io/docs/latest/getting-started/installation/) finden.

# Installation Longhorn unter Rocky Linux

## Vorbereitung

```
sudo dnf install -y epel-release
sudo dnf install -y vim tar git libiscsi-utils iscsi-initiator-utils nfs-utils iptables
sudo systemctl enable --now iscsid
```

```
sudo tee /etc/sysctl.d/20-inotify.conf <<HERE
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=524288
HERE
sudo sysctl --system
```

## Installation per helm

```bash
helm repo add longhorn https://charts.longhorn.io
helm repo update
helm upgrade --install longhorn longhorn/longhorn \
 --namespace longhorn-system --create-namespace \
 --set service.ui.type=NodePort \
 --set persistence.defaultClassReplicaCount=1 \
 --set csi.attacherReplicaCount=1 \
 --set csi.provisionerReplicaCount=1 \
 --set csi.resizerReplicaCount=1 \
 --set csi.snapshotterReplicaCount=1 \
 --set defaultSettings.defaultReplicaCount=1 \
 --set longhornUI.replicas=1
```

## Uninstall Longhorn

https://github.com/longhorn/longhorn/discussions/9167

## Default storageClass anpassen

Durch das Setzen einer Annotation kann eine storageClass zur default
storageClass ungestellt werden.

Dabei sollte zunächst geschaut werden ob eine
storageClass als default deklariert ist und diese deaktiviert werden.

Danach kann eine andere storageClass zur default storageClass gemacht werden.

### aktuelle default storageClass deaktivieren

Auflisten der storageClass Elemente um eine default storageClass zu finden

```bash
kubectl get storageClass
```

```bash
kubectl patch storageclass $STORAGECLASS -p \
  '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
```

### neue default storageClass aktivieren

```bash
kubectl patch storageclass $STORAGECLASS -p \
  '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
```
