Storage-Lösung: Longhorn

In diesem Artikel erfahren Sie alles über die Storage-Lösung Longhorn.

Intro

Longhorn, entwickelt von Rancher/SUSE, ist ein einfaches verteiltes Storage-System, das speziell für Kubernetes entwickelt wurde. Es vereinfacht die Storage-Verwaltung innerhalb von Kubernetes-Clustern und erleichtert den Anwendern die Arbeit erheblich. Erfahren Sie hier mehr: Longhorn

Dieser Dienst befindet sich derzeit im Early Access. Kontaktieren Sie uns, um Zugang zu beantragen.

Voraussetzung

Cluster-Ressourcen

Um Ihren Xelon Kubernetes-Cluster für Longhorn zu optimieren, empfehlen wir die folgenden Anpassungen:

1. Aktivieren Sie die Option „Storage Pool“: Aktivieren Sie in Xelon HQ die Option „Storage Pool“, um jedem Knoten eine zusätzliche Festplatte zuzuordnen. Diese Platte wird von Longhorn verwendet, um Daten getrennt von der Haupt-Bootplatte zu speichern. Die Talos-Linux-Bootpartition ist unveränderlich und wird bei jedem Upgrade des Basissystems überschrieben, es sei denn, die Option --preserve wird verwendet. Zusätzliche Festplatten werden jedoch nicht gelöscht, so dass es ratsam ist, eine zweite Festplatte für die Speicherung zu verwenden.

2. Achten Sie auf eine angemessene Grösse des Speicherpools: Ihr Speicherpool sollte aus mindestens drei Knoten bestehen, da die Standardreplikationsrichtlinie in Longhorn auf drei Replikate eingestellt ist. Wir empfehlen nicht, den Replikationsfaktor unter dieses Niveau zu senken.

3. Weisen Sie ausreichend Ressourcen zu: Obwohl Longhorn leichtgewichtig ist, benötigt es dennoch ausreichende Ressourcen. Wir empfehlen ein Minimum von 4 vCPUs und 8 GB RAM für Ihre Storage Nodes.

ac948e43-19d3-49ec-ba3e-27ac30699a8d

Zusätzliche Platte einbinden

Um Longhorn in die Lage zu versetzen, die zusätzliche Speicherplatte auf Ihren Knoten zu verwenden, müssen Sie die Platte manuell in das Kubelet einbinden. Dies ist nicht standardmässig der Fall. Folgen Sie diesen Schritten, um die Platte zu mounten:

1. Erstellen Sie eine Patch-Datei:

Erstellen Sie eine Patch-Datei mit dem Namen longhorn.patch.yaml mit dem folgenden Inhalt:

machine: 
 kubelet:
   extraMounts:
     - destination: /var/mnt/sdb
       type: bind
       source: /var/mnt/sdb
       options:
         - bind
         - rshared
         - rw

Diese Konfiguration bindet die zusätzliche Speicherplatte an das angegebene Verzeichnis  (/var/mnt/sdb).

2. Wenden Sie den Patch auf alle Speicherknoten an:

Verwenden Sie den Befehl  talosctl , um diesen Patch auf alle Ihre Speicherknoten anzuwenden. Ersetzen Sie die IP-Adressen durch die Ihrer Speicherknoten:

talosctl patch machineconfig --patch-file longhorn.patch.yaml -n 100.110.255.21,100.110.255.22,100.110.255.23

3. Suchen Sie die IPs der Speicherknoten:

kubectl get nodes -o wide

Dadurch werden detaillierte Informationen über Ihre Knoten angezeigt, einschliesslich ihrer IP-Adressen, die Sie mit dem Befehl talosctl  verwenden können.

System-Erweiterungen

Longhorn verlässt sich, wie viele verteilte Speichersysteme, auf Werkzeuge wie iSCSI und andere Linux-Shell-Utilities (z.B. fstrim). Diese Annahme über das Host-Betriebssystem ist jedoch für container-optimierte Betriebssysteme wie Talos Linux nicht immer korrekt.

Um diese Herausforderung zu meistern, verwendet Talos Linux Systemerweiterungen (auch als Layer bezeichnet). Diese Erweiterungen fügen dem Host-Betriebssystem die erforderliche Funktionalität hinzu, so dass Talos Linux die von Longhorn und ähnlichen Speichersystemen benötigten Tools unterstützen kann.

Installation von Systemerweiterungen

Um die Systemerweiterungen auf einem Knoten zu installieren, verwenden Sie den Befehl  talosctl upgrade  mit dem gewünschten Image und der Schema-ID. So können Sie es tun:

1. Beschaffen Sie sich die Schematic ID:
  • Besuchen Sie die Talos Image Factory: Image Factory 
  • Konfigurieren Sie die folgenden Einstellungen:

    • Hardware Type: Cloud Server

    • Talos Linux Version: Zum Beispiel v1.7.5 (Sie können Ihre Version im HQ Cluster Dashboard überprüfen oder indem Sie kubectl get nodes -o wide)
    • Cloud-Anbieter: VMWare
    • Systemerweiterungen:

      • siderolabs/iscsi-tools

      • siderolabs/util-linux-tools

  • Überspringen Sie das Ändern der Kernel-Argumente und fahren Sie mit dem nächsten Schritt fort.

  • Sie erhalten eine schematische ID, zum Beispiel: 613e1592b2da41ae5e265e8789429f22e121aab91cb4deb6bc3c0b6262961245.

2. Installieren Sie die Schematic ID auf dem Knoten:

Führen Sie den folgenden Befehl aus, um Ihren Knoten mit den Systemerweiterungen zu aktualisieren:

talosctl upgrade --image factory.talos.dev/installer/<schematic ID>:<TalosOS Version>-m powercycle -n <NodeIP>

Dieser Prozess wendet die notwendigen Systemerweiterungen auf Ihre Talos-Linux-Knoten an, so dass diese die von Longhorn und ähnlichen verteilten Speichersystemen benötigten Tools unterstützen können.

Wichtige Überlegungen vor der Ausführung des Upgrade-Befehls:

Knoten-Neustart:
Die Ausführung des talosctl upgrade-Befehls führt zu einem Neustart des Knotens. Stellen Sie sicher, dass Ihre Workloads auf mehrere Knoten verteilt sind, um Service-Unterbrechungen zu vermeiden.

Überschreiben der Boot-Partition:
Der Upgrade-Prozess wird die Boot-Partition mit einer neuen Version von Talos Linux überschreiben.
Um den vorhandenen Knotenspeicher beizubehalten, insbesondere auf Control-Plane-Knoten oder anderen Knoten, bei denen die Erhaltung des Speichers kritisch ist, müssen Sie das --preserve Flag in den Befehl aufnehmen.

Stellen Sie sicher, dass das neue Image auf allen Knoten installiert ist, die entweder Longhorn-Speicher-Volumes hosten oder an diese angeschlossen sind. Dies ist wichtig für die Aufrechterhaltung der Kompatibilität und der Funktionalität auf allen Ihren Speicherknoten.

Namespace

Wir empfehlen die Installation von Longhorn in einem dedizierten Namespace. Zusätzlich müssen Sie aufgrund von Pod-Sicherheitsanforderungen ein Label auf den Namespace setzen, um die Ausführung von Containern mit privilegiertem Zugriff zu ermöglichen. Sie können dies mit den folgenden Befehlen erreichen:

kubectl create namespace longhorn-system
kubectl label namespace longhorn-system pod-security.kubernetes.io/enforce=privileged

Diese Befehle erstellen den Namespace  longhorn-system  und kennzeichnen ihn, um die Ausführung von privilegierten Containern zu ermöglichen, was für das ordnungsgemässe Funktionieren von Longhorn notwendig ist.

Knotenpunkte

Um mehr Kontrolle darüber zu haben, wo die Longhorn-Speicher-Engines eingerichtet werden, können Sie Longhorn so konfigurieren, dass es nur Knoten mit einer bestimmten Bezeichnung verwendet. Setzen Sie während der Installation die Option, Longhorn auf Knoten zu beschränken, die mit „node.longhorn.io/create-default-disk=true“ gekennzeichnet sind.

Sie können dieses Label mit dem folgenden Kommando auf einen Knoten anwenden:

kubectl label node cluster01-w-1-1 node.longhorn.io/create-default-disk=true

Ersetzen Sie  cluster01-w-1-1  durch den Namen des Knotens, den Sie kennzeichnen möchten. Dies stellt sicher, dass Longhorn nur Speichermaschinen auf Knoten konfiguriert, die dieses spezifische Label haben.

Longhorn-Installation

Um Longhorn unter Verwendung des offiziellen Helm-Charts mit benutzerdefinierten Werten zu installieren, gehen Sie wie folgt vor:

1. Erstellen Sie eine Datei mit benutzerdefinierten Werten:

Speichern Sie die folgende Konfiguration in einer Datei namens  custom-helm.values:

defaultSettings:
  createDefaultDiskLabeledNodes: true
  defaultDataPath: /var/mnt/sdb/
  storageReservedPercentageForDefaultDisk: 0
  • createDefaultDiskLabeledNodes:  Stellt sicher, dass Speicher-Engines nur auf Knoten mit dem Label node.longhorn.io/create-default-disk=truegeplant werden.
  • defaultDataPath: Setzt das Standardverzeichnis für Longhorn-Daten auf der Festplatte des Knotens.
  • storageReservedPercentageForDefaultDisk: Setzt den Prozentsatz des Plattenspeichers, der für das Host-Betriebssystem reserviert ist. Da Sie eine separate Festplatte verwenden, wird dieser Wert auf 0  gesetzt, um die gesamte Festplatte zu verwenden.

2. Installieren oder aktualisieren Sie Longhorn mit Helm:

Führen Sie den folgenden Helm-Befehl aus, um Longhorn mit den angepassten Werten zu installieren oder zu aktualisieren:

helm upgrade --values=doc-helm.values --install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.7.0

Dieser Befehl wird:

  •  --values=custom-helm.values: Wendet Ihre benutzerdefinierte Konfiguration an.
  •  --install: Installiert Longhorn, falls es nicht bereits installiert ist.
  • --upgrade: Upgrade von Longhorn, wenn es bereits installiert ist.
  •  --namespace longhorn-system: Setze Longhorn im Namensraum longhorn-system ein.
  • --create-namespace: Erzeugt den Namespace, wenn er noch nicht existiert.
  • --version 1.7.0: Verwende die angegebene Version von Longhorn.

Dieser Ansatz stellt sicher, dass Longhorn gemäss Ihren Anforderungen konfiguriert und effektiv in Ihrem Kubernetes-Cluster eingesetzt wird.

Überprüfen der Installation

Um Ihre Longhorn-Installation zu überprüfen, können Sie das Longhorn-Dashboard aufrufen. Hier sehen Sie, wie Sie von Ihrem lokalen Rechner aus darauf zugreifen können:

1. Leiten Sie den Dienst-Port weiter:

Verwenden Sie kubectl port-forward um den Longhorn-Frontend-Dienst an einen lokalen Port weiterzuleiten:

kubectl port-forward svc/longhorn-frontend 12001:80 -n longhorn-system

Dieser Befehl leitet den Port 80 des longhorn-frontend Dienstes an den Port 12001 auf Ihrem lokalen Rechner weiter.

2. Greifen Sie auf das Dashboard zu:

Öffnen Sie Ihren Webbrowser und navigieren Sie zu:

http://localhost:12001

Sie sollten das Longhorn-Dashboard sehen, wo Sie die Installation überprüfen und Ihr Longhorn-Speichersystem verwalten können.