Controller-Skalierbarkeit
Trident verbessert die Controller Skalierbarkeit durch erhöhte Parallelität über mehrere Speichertreiber hinweg. Bei aktivierter Controller Skalierbarkeit verarbeitet der Trident Controller Speicheroperationen parallel statt sie zu serialisieren, was den Durchsatz in Kubernetes-Umgebungen mit vielen gleichzeitigen Operationen erhöht.
Vor der Bereitstellung sollte ermittelt werden, welche Trident-Treiber die Controller Skalierbarkeit bei allgemeiner Verfügbarkeit unterstützen und welche Treiber in Trident 26.06 als technische Vorschau verfügbar sind. Dies unterstützt fundierte Entscheidungen zur Bereitstellung und ein effektives Risikomanagement. Die Controller Skalierbarkeit ist standardmäßig deaktiviert.
Schlüsselbegriffe und Definitionen
Controller-Skalierbarkeit
Controller-Skalierbarkeit bezeichnet die Fähigkeit des Trident Controllers, mehrere Speicheroperationen parallel zu verarbeiten, anstatt sie hinter einer einzigen Sperre zu serialisieren. Zu diesen Operationen gehören das Erstellen, Löschen und Ändern der Größe von Volumes, das Erstellen und Löschen von Snapshots, das Veröffentlichen und Aufheben der Veröffentlichung von Volumes sowie die Backend-Verwaltung.
Wenn die Controller-Skalierbarkeit aktiviert ist, werden Vorgänge auf verschiedenen Volumes und Backends gleichzeitig ausgeführt. Dadurch wird der Durchsatz erhöht und die End-to-End-Betriebszeit in Umgebungen mit einer hohen Anzahl gleichzeitiger PersistentVolumeClaim und VolumeSnapshot Vorgänge reduziert.
Standardverhalten (serieller Modus)
Standardmäßig verarbeitet der Trident-Controller Operationen nacheinander. Jede Anfrage zum Erstellen, Löschen, Ändern der Größe oder Erstellen eines Snapshots wird abgeschlossen, bevor Trident die nächste startet. Der serielle Modus ist die unterstützte Standardeinstellung für alle Installationen und erfordert keine Konfiguration.
Der serielle Modus ist für die meisten Arbeitslasten ausreichend. Die Controller Skalierbarkeit sollte nur aktiviert werden, wenn das Verarbeitungsvolumen bei der seriellen Verarbeitung zu einem Rückstau führt.
Unterstützung der Controller-Skalierbarkeit
Trident unterstützt die Skalierbarkeit des Controllers auf unterschiedlichen Reifegraden für verschiedene Speichertreiber.
Allgemeine Verfügbarkeit
Die folgenden Treiber unterstützen die Controller-Skalierbarkeit bei allgemeiner Verfügbarkeit in Trident 26.06:
-
ontap-san -
ontap-nas -
ontap-nas-economy -
ontap-san-economy -
google-cloud-netapp-volumes -
azure-netapp-files -
solidfire-san
|
|
Die |
Technische Vorschau
Der folgende Treiber unterstützt die Controller Skalierbarkeit als technische Vorschaufunktion in Trident 26.06:
-
asa-r2(SAN und NVMe)
Dieser Treiber hat folgende Einschränkungen:
-
Die Controller-Parallelität ist nur zu Evaluierungs- und Testzwecken verfügbar.
-
Das Verhalten kann sich von einer Version zur nächsten ändern.
-
NetApp empfiehlt die Verwendung in Produktionsumgebungen nicht.
Wie enableConcurrency funktioniert
Wenn enableConcurrency auf true gesetzt wird, wendet Trident parallele Verarbeitung auf alle vom Controller verwalteten Backends an. Die Einstellung gilt für alle Backends gleichzeitig. Eine Aktivierung für einzelne Backends oder einzelne Treiber ist nicht möglich.
Jedes konfigurierte Backend muss einen Treiber aus der Liste der allgemein verfügbaren oder der technischen Vorschauversionen verwenden. Falls ein Backend einen nicht unterstützten Treiber verwendet, startet Trident nicht und fügt auch kein Backend hinzu, das einen nicht unterstützten Treiber verwendet.
Um den Startvorgang wiederherzustellen, müssen alle Backends entfernt oder neu konfiguriert werden, die einen nicht unterstützten Treiber verwenden, oder die Controller Skalierbarkeit wird deaktiviert.
Bevor Sie aktivieren
|
|
Bevor Sie die Controller Skalierbarkeit aktivieren, vergewissern Sie sich, dass jedes konfigurierte Backend einen Treiber aus der Liste der allgemein verfügbaren oder technischen Vorschauversionen verwendet. Falls ein Backend einen nicht unterstützten Treiber verwendet, startet Trident nach der Aktivierung der Funktion nicht. |
Die folgende Tabelle unterstützt die Entscheidung, ob die Controller Skalierbarkeit aktiviert werden soll.
| Wenn Ihre Umgebung | Dann |
|---|---|
Verwendet nur unterstützte Treiber und weist einen Rückstau bei Controller-Operationen auf |
Controller-Skalierbarkeit aktivieren. |
Verwendet einen nicht unterstützten Treiber |
Den standardmäßigen seriellen Modus beibehalten. Die Controller-Skalierbarkeit nicht aktivieren. |
Bewältigt geringes Arbeitsaufkommen ohne Rückstände |
Der standardmäßige serielle Modus bleibt erhalten. |
Controller-Skalierbarkeit aktivieren
Die enableConcurrency Konfigurationsoption steuert die Skalierbarkeit des Controllers. Diese Option muss während der Trident Installation oder bei der Aktualisierung einer bestehenden Bereitstellung explizit aktiviert werden.
Trident Operator-Bereitstellung
Um die Controller Skalierbarkeit mit dem Trident Operator zu ermöglichen, enableConcurrency auf true in der TridentOrchestrator benutzerdefinierten Ressource (CR) setzen.
Neuinstallation
Erstellen oder bearbeiten Sie die TridentOrchestrator CR und setzen Sie enableConcurrency auf true:
apiVersion: trident.netapp.io/v1
kind: TridentOrchestrator
metadata:
name: trident
spec:
namespace: trident
enableConcurrency: true
CR anwenden:
kubectl apply -f tridentorchestrator_cr.yaml
Vorhandene Installation
Patchen Sie die bestehende `TridentOrchestrator`CR, um die Skalierbarkeit des Controllers zu ermöglichen:
kubectl patch torc trident --type=merge -p '{"spec":{"enableConcurrency":true}}'
Es sollte überprüft werden, ob Trident die Einstellung angewendet hat:
kubectl get torc trident -o jsonpath='{.status.currentInstallationParams.enableConcurrency}'
Helm-Bereitstellung
Um die Controller-Skalierbarkeit mit Helm zu aktivieren, setzen Sie den enableConcurrency Wert auf true.
Neuinstallation
helm install trident netapp-trident/trident-operator --namespace trident --create-namespace --set enableConcurrency=true
Vorhandene Installation
helm upgrade trident netapp-trident/trident-operator --namespace trident --set enableConcurrency=true
Alternativ setzen Sie enableConcurrency auf true in einer benutzerdefinierten values.yaml Datei:
# values.yaml
enableConcurrency: true
Anschließend mit der Wertedatei installieren oder aktualisieren:
helm install trident netapp-trident/trident-operator --namespace trident --create-namespace -f values.yaml
tridentctl-Bereitstellung
Um die Skalierbarkeit des Controllers mit tridentctl zu ermöglichen, übergeben Sie das --enable-concurrency Flag während der Installation.
Neuinstallation
tridentctl install -n trident --enable-concurrency
Vorhandene Installation
Um die Controller Skalierbarkeit in einer bestehenden tridentctl Bereitstellung zu aktivieren, muss Trident deinstalliert und anschließend mit dem Flag erneut installiert werden:
tridentctl uninstall -n trident
tridentctl install -n trident --enable-concurrency
Überprüfen, ob die Controller Skalierbarkeit aktiviert ist
Nachdem Sie die Controller Skalierbarkeit aktiviert haben, sollte überprüft werden, ob der Trident Controller mit aktivierter Parallelverarbeitung ausgeführt wird. Die Pod-Logs des Controllers können überprüft werden:
kubectl logs -n trident deploy/trident-controller | grep -i concurrency
Die Ausgabe enthält einen Protokolleintrag, der bestätigt, dass die Parallelverarbeitung aktiviert ist.
Parallelitätsverhalten
Wenn die Controller-Skalierbarkeit aktiviert ist, wendet der Trident-Controller das folgende Verhalten an:
-
Trident ersetzt die einzelne globale Sperre durch eine feingranulare, ressourcenbezogene Sperrung.
-
Trident serialisiert Operationen, die dieselbe Ressource verändern, um die Datenkonsistenz zu gewährleisten.
-
Operationen, die nur von einer Ressource lesen, laufen gleichzeitig mit anderen Leseoperationen auf dieser Ressource ab.
-
Trident begrenzt gleichzeitige ONTAP-API-Anfragen auf 20 pro Management-LIF, um eine Überlastung der Backend-Speichersysteme zu verhindern.
-
Wenn mehrere Backends dieselbe Management-LIF verwenden, teilen sie sich dieses Limit von 20 Anfragen.
Vorbehalte und Einschränkungen
Für die Skalierbarkeit von Controllern in Trident 26.06 gelten folgende Überlegungen:
-
Die Controller Skalierbarkeit unterstützt nur die Treiber, die in den Listen für allgemeine Verfügbarkeit und technische Vorschau aufgeführt sind. Weitere Informationen finden sich unter Bevor Sie aktivieren.
-
Der Trident Controller verwaltet die Parallelverarbeitung intern. Diese Version bietet keine vom Benutzer konfigurierbaren Parallelitätsgrenzen.
-
Der Gesamtdurchsatz hängt vom verwendeten Speichertreiber, der Reaktionsfähigkeit des Backends und der Leistung des Kubernetes API-Servers ab.
-
Hohe Parallelität kann die Belastung der Backend-Speichersysteme erhöhen.
-
Das Skalierbarkeitsverhalten des Controllers ist nicht bei allen Treibern identisch.
-
Der Treiber in der technischen Vorschau kann unter hoher Last eine inkonsistente Performance aufweisen und das Verhalten kann sich zwischen den Versionen ändern.
-
Die Fehlersuche bei gleichzeitig laufenden Operationen kann aufgrund der parallelen Ausführung komplexer sein. Metriken und Protokolle können verschachtelte Operationsausgaben anzeigen.
Empfehlungen
Bevor Sie die Controller Skalierbarkeit aktivieren, sind die folgenden Schritte abzuschließen:
-
Bestätigt werden muss, dass jedes konfigurierte Backend einen Treiber aus der Liste der allgemein verfügbaren oder technischen Vorschau-Treiber verwendet.
-
Die Änderung sollte in einem Nicht-Produktionscluster getestet werden, bevor sie in der Produktionsumgebung angewendet wird.
-
Es sollte sichergestellt sein, dass die Controller Skalierbarkeit nach der Anwendung der Änderung aktiviert ist.
Die folgenden allgemeinen Empfehlungen sind beim Betrieb mit Controller-Skalierbarkeit zu berücksichtigen:
-
Allgemein verfügbare Treiber eignen sich für Produktionsumgebungen, die eine hohe Skalierbarkeit erfordern.
-
Der technische Vorschau-Treiber ist ausschließlich in Nicht-Produktionsumgebungen zu evaluieren.
-
Die Backend- und Controller-Performance bei großem Maßstab im Blick behalten.
-
In Automatisierungsskripten sollte nicht von einer bestimmten Reihenfolge der Vorgänge ausgegangen werden.