Kubernetes- und Trident-Objekte
Sie können mit Kubernetes und Trident über REST-APIs interagieren, indem Sie Ressourcenobjekte lesen und schreiben. Es gibt verschiedene Ressourcenobjekte, die die Beziehungen zwischen Kubernetes und Trident, Trident und Speicher sowie Kubernetes und Speicher bestimmen. Einige dieser Objekte werden über Kubernetes und die anderen über Trident verwaltet.
Wie interagieren die Objekte miteinander?
Vielleicht ist der einfachste Weg, die Objekte, ihren Zweck und ihre Interaktion zu verstehen, einer einzelnen Speicheranfrage eines Kubernetes-Benutzers zu folgen:
-
Ein Benutzer erstellt eine
PersistentVolumeClaimAnfrage für eine neuePersistentVolumeeiner bestimmten Größe von einem KubernetesStorageClass, der zuvor vom Administrator konfiguriert wurde. -
Kubernetes
StorageClassidentifiziert Trident als seinen Provisioner und enthält Parameter, die Trident angeben, wie ein Volume für die angeforderte Klasse bereitgestellt werden soll. -
Trident betrachtet seine eigenen
StorageClassmit demselben Namen, der die passendeBackendsundStoragePoolsidentifiziert, die es zur Bereitstellung von Volumes für die Klasse verwenden kann. -
Trident stellt Speicher auf einem passenden Backend bereit und erstellt zwei Objekte: ein
PersistentVolumein Kubernetes, das Kubernetes mitteilt, wie das Volume gefunden, eingebunden und behandelt werden soll, und ein Volume in Trident, das die Beziehung zwischen demPersistentVolumeund dem eigentlichen Speicher aufrechterhält. -
Kubernetes bindet die
PersistentVolumeClaiman die neuePersistentVolume. Pods, die diePersistentVolumeClaimMount-Anweisung enthalten, mounten dieses PersistentVolume auf jedem Host, auf dem sie ausgeführt werden. -
Ein Benutzer erstellt eine
VolumeSnapshoteiner bestehenden PVC, indem er eineVolumeSnapshotClassverwendet, die auf Trident zeigt. -
Trident identifiziert das dem PVC zugeordnete Volume und erstellt einen Snapshot dieses Volumes im Backend. Es erstellt außerdem eine
VolumeSnapshotContent, die Kubernetes anweist, wie der Snapshot identifiziert werden kann. -
Ein Benutzer kann eine
PersistentVolumeClaimmitVolumeSnapshotals Quelle erstellen. -
Trident identifiziert den erforderlichen Snapshot und führt die gleichen Schritte aus, die auch beim Erstellen eines
PersistentVolumeund einesVolumeerforderlich sind.
|
|
Für weiterführende Informationen zu Kubernetes-Objekten empfehlen wir Ihnen dringend, den "Persistente Volumes" Abschnitt der Kubernetes-Dokumentation zu lesen. |
Kubernetes PersistentVolumeClaim-Objekte
Ein Kubernetes PersistentVolumeClaim-Objekt ist eine Speicheranforderung, die von einem Kubernetes-Cluster-Benutzer gestellt wird.
Zusätzlich zur Standardspezifikation ermöglicht Trident den Benutzern, die folgenden volumespezifischen Annotationen anzugeben, wenn sie die in der Backend-Konfiguration festgelegten Standardeinstellungen überschreiben möchten:
| Anmerkung | Volume-Option | Unterstützte Treiber |
|---|---|---|
trident.netapp.io/fileSystem |
fileSystem |
ontap-san, solidfire-san,ontap-san-economy |
trident.netapp.io/cloneFromPVC |
cloneSourceVolume |
ontap-nas, ontap-san, solidfire-san, azure-netapp-files, ontap-san-economy |
trident.netapp.io/splitOnClone |
splitOnClone |
ontap-nas, ontap-san |
trident.netapp.io/protocol |
Protokoll |
beliebig |
trident.netapp.io/exportPolicy |
exportPolicy |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup |
trident.netapp.io/snapshotPolicy |
snapshotPolicy |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup, ontap-san |
trident.netapp.io/snapshotReserve |
snapshotReserve |
ontap-nas, ontap-nas-flexgroup, ontap-san |
trident.netapp.io/snapshotDirectory |
snapshotDirectory |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup |
trident.netapp.io/unixPermissions |
unixPermissions |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup |
trident.netapp.io/blockSize |
blockSize |
solidfire-san |
trident.netapp.io/skipRecoveryQueue |
skipRecoveryQueue |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup, ontap-san, ontap-san-economy |
Wenn das erstellte PV die Delete Reclaim-Richtlinie hat, löscht Trident sowohl das PV als auch das zugehörige Volume, sobald das PV freigegeben wird (das heißt, wenn der Benutzer das PVC löscht). Schlägt der Löschvorgang fehl, markiert Trident das PV entsprechend und wiederholt die Operation regelmäßig, bis sie erfolgreich ist oder das PV manuell gelöscht wird. Verwendet das PV die Retain Richtlinie, ignoriert Trident es und geht davon aus, dass der Administrator es aus Kubernetes und dem Backend entfernt, sodass das Volume vor seiner Entfernung gesichert oder überprüft werden kann. Beachten Sie, dass das Löschen des PV nicht dazu führt, dass Trident das zugehörige Volume löscht. Sie sollten es über die REST-API entfernen (tridentctl.
Trident unterstützt die Erstellung von Volume-Snapshots gemäß der CSI-Spezifikation: Sie können einen Volume-Snapshot erstellen und ihn als Datenquelle zum Klonen vorhandener PVCs verwenden. Auf diese Weise können zeitpunktgenaue Kopien von PVs in Form von Snapshots für Kubernetes bereitgestellt werden. Die Snapshots können dann zum Erstellen neuer PVs verwendet werden. Sehen Sie sich On-Demand Volume Snapshots an, um zu sehen, wie das funktioniert.
Trident bietet außerdem die cloneFromPVC und splitOnClone Annotationen zum Erstellen von Klonen. Mit diesen Annotationen können Sie ein PVC klonen, ohne die CSI-Implementierung verwenden zu müssen.
Hier ist ein Beispiel: Wenn ein Benutzer bereits eine PVC namens mysql besitzt, kann der Benutzer eine neue PVC namens mysqlclone erstellen, indem er die Annotation wie trident.netapp.io/cloneFromPVC: mysql verwendet. Mit dieser Annotation klont Trident das Volume, das der mysql PVC entspricht, anstatt ein Volume von Grund auf bereitzustellen.
Beachten Sie folgende Punkte:
-
NetApp empfiehlt das Klonen eines ungenutzten Volumes.
-
Ein PVC und sein Klon sollten sich im selben Kubernetes-Namespace befinden und die gleiche Storage Class haben.
-
Mit den
ontap-nasundontap-sanTreibern kann es wünschenswert sein, die PVC-Annotationtrident.netapp.io/splitOnClonein Verbindung mittrident.netapp.io/cloneFromPVCfestzulegen. Wenntrident.netapp.io/splitOnCloneauftruegesetzt ist, trennt Trident das geklonte Volume vom übergeordneten Volume und entkoppelt so den Lebenszyklus des geklonten Volumes vollständig vom übergeordneten Volume, allerdings auf Kosten eines geringeren Speicherwirkungsgrads. Wenntrident.netapp.io/splitOnClonenicht gesetzt ist oder auffalsegesetzt wird, führt dies zu einem geringeren Speicherplatzverbrauch im Backend, allerdings entstehen dadurch Abhängigkeiten zwischen dem übergeordneten und dem geklonten Volume, sodass das übergeordnete Volume erst gelöscht werden kann, wenn der Klon zuvor gelöscht wurde. Ein Szenario, in dem das Aufteilen des Klons sinnvoll ist, ist das Klonen eines leeren Datenbank-Volumes, bei dem zu erwarten ist, dass sich Volume und Klon stark unterscheiden und nicht von den Speichereffizienzen profitieren, die ONTAP bietet.
Das sample-input Verzeichnis enthält Beispiele für PVC-Definitionen zur Verwendung mit Trident. Siehe für eine vollständige Beschreibung der Parameter und Einstellungen, die mit Trident-Volumes verbunden sind.
Kubernetes PersistentVolume-Objekte
Ein Kubernetes PersistentVolume-Objekt repräsentiert einen Speicherbereich, der dem Kubernetes-Cluster zur Verfügung gestellt wird. Es hat einen Lebenszyklus, der unabhängig von dem Pod ist, der ihn verwendet.
|
|
Trident erstellt PersistentVolume Objekte und registriert sie automatisch beim Kubernetes-Cluster basierend auf den Volumes, die es bereitstellt. Sie müssen diese nicht selbst verwalten.
|
Wenn Sie eine PVC erstellen, die auf ein Trident-basiertes StorageClass verweist, stellt Trident ein neues Volume mit der entsprechenden Speicherklasse bereit und registriert ein neues PV für dieses Volume. Bei der Konfiguration des bereitgestellten Volumes und des zugehörigen PV befolgt Trident die folgenden Regeln:
-
Trident generiert einen PV-Namen für Kubernetes und einen internen Namen, den es zur Bereitstellung des Speichers verwendet. In beiden Fällen stellt es sicher, dass die Namen innerhalb ihres Geltungsbereichs eindeutig sind.
-
Die Größe des Volumens entspricht so genau wie möglich der im PVC angeforderten Größe, kann jedoch je nach Plattform auf die nächstzuweisbare Menge aufgerundet werden.
Kubernetes StorageClass-Objekte
Kubernetes StorageClass-Objekte werden anhand ihres Namens in PersistentVolumeClaims spezifiziert, um Speicher mit einer Reihe von Eigenschaften bereitzustellen. Die Speicherklasse selbst identifiziert den zu verwendenden Provisionierer und definiert diese Eigenschaften in einer für den Provisionierer verständlichen Weise.
Es handelt sich um eines von zwei grundlegenden Objekten, die vom Administrator erstellt und verwaltet werden müssen. Das andere ist das Trident Backend-Objekt.
Ein Kubernetes StorageClass-Objekt, das Trident verwendet, sieht folgendermaßen aus:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: <Name>
provisioner: csi.trident.netapp.io
mountOptions: <Mount Options>
parameters: <Trident Parameters>
allowVolumeExpansion: true
volumeBindingMode: Immediate
Diese Parameter sind Trident-spezifisch und geben Trident an, wie Volumes für die Klasse bereitgestellt werden sollen.
Die Parameter der Speicherklasse sind:
| Attribut | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
Attribute |
map[string]string |
nein |
Siehe den Abschnitt Attribute unten |
storagePools |
map[string]StringList |
nein |
Zuordnung von Backend-Namen zu Listen von Speicherpools innerhalb |
additionalStoragePools |
map[string]StringList |
nein |
Zuordnung von Backend-Namen zu Listen von Speicherpools innerhalb |
excludeStoragePools |
map[string]StringList |
nein |
Zuordnung von Backend-Namen zu Listen von Speicherpools innerhalb |
Speicherattribute und ihre möglichen Werte können in Attribute zur Auswahl von Speicherpools und Kubernetes-Attribute eingeteilt werden.
Auswahlattribute für Speicherpools
Diese Parameter legen fest, welche von Trident verwalteten Speicherpools zur Bereitstellung von Volumes eines bestimmten Typs verwendet werden sollen.
| Attribut | Typ | Werte | Angebot | Anfrage | Unterstützt von |
|---|---|---|---|---|---|
Medien1 |
Zeichenkette |
hdd, hybrid, ssd |
Pool enthält Medien dieses Typs; hybrid bedeutet beides |
Medientyp angegeben |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup, ontap-san, solidfire-san |
provisioningType |
Zeichenkette |
dünn, dick |
Pool unterstützt diese Bereitstellungsmethode |
Bereitstellungsmethode angegeben |
dick: alle ontap; dünn: alle ontap & solidfire-san |
backendType |
Zeichenkette |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup, ontap-san, solidfire-san, azure-netapp-files, ontap-san-economy |
Pool gehört zu dieser Art von Backend |
Backend angegeben |
Alle Treiber |
Momentaufnahmen |
bool |
wahr, falsch |
Pool unterstützt Volumes mit Snapshots |
Volume mit aktivierten Snapshots |
ontap-nas, ontap-san, solidfire-san |
Klone |
bool |
wahr, falsch |
Pool unterstützt das Klonen von Volumes |
Volume mit aktivierten Klonen |
ontap-nas, ontap-san, solidfire-san |
Verschlüsselung |
bool |
wahr, falsch |
Pool unterstützt verschlüsselte Volumes |
Volume mit aktivierter Verschlüsselung |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroups, ontap-san |
IOPS |
int |
positive ganze Zahl |
Pool ist in der Lage, IOPS in diesem Bereich zu garantieren |
Volume garantiert diese IOPS |
solidfire-san |
1: Wird von ONTAP Select-Systemen nicht unterstützt
In den meisten Fällen beeinflussen die angeforderten Werte die Bereitstellung direkt; beispielsweise führt die Anforderung von Thick Provisioning zu einem Thick-Provisioning-Volume. Ein Element-Speicherpool verwendet jedoch seine angebotenen minimalen und maximalen IOPS-Werte zur Festlegung der QoS-Werte, anstatt des angeforderten Wertes. In diesem Fall wird der angeforderte Wert nur zur Auswahl des Speicherpools verwendet.
Im Idealfall können Sie attributes allein verwenden, um die Eigenschaften des Speichers zu modellieren, die Sie benötigen, um die Anforderungen einer bestimmten Klasse zu erfüllen. Trident erkennt und wählt automatisch Speicherpools aus, die allen attributes entsprechen, die Sie angeben.
Falls Sie nicht in der Lage sind, attributes die richtigen Pools für eine Klasse automatisch auszuwählen, können Sie die storagePools und additionalStoragePools Parameter verwenden, um die Pools weiter einzugrenzen oder sogar eine bestimmte Gruppe von Pools auszuwählen.
Sie können den storagePools Parameter verwenden, um die Menge der Pools, die mit einem angegebenen attributes übereinstimmen, weiter einzuschränken. Anders ausgedrückt: Trident verwendet für die Bereitstellung die Schnittmenge der Pools, die durch die attributes und storagePools Parameter identifiziert werden. Sie können entweder einen der Parameter allein oder beide zusammen verwenden.
Sie können den additionalStoragePools Parameter verwenden, um die Menge der Pools zu erweitern, die Trident für die Bereitstellung verwendet, unabhängig von den durch die attributes und storagePools Parameter ausgewählten Pools.
Sie können den excludeStoragePools Parameter verwenden, um die von Trident für die Bereitstellung verwendeten Pools zu filtern. Durch die Verwendung dieses Parameters werden alle übereinstimmenden Pools entfernt.
In den storagePools und additionalStoragePools Parametern hat jeder Eintrag die Form <backend>:<storagePoolList>, wobei <storagePoolList> eine durch Kommas getrennte Liste von Speicherpools für das angegebene Backend ist. Ein Wert für additionalStoragePools könnte beispielsweise so aussehen: ontapnas_192.168.1.100:aggr1,aggr2;solidfire_192.168.1.101:bronze. Diese Listen akzeptieren Regex-Werte sowohl für das Backend als auch für die Listenwerte. Sie können tridentctl get backend verwenden, um die Liste der Backends und ihrer Pools zu erhalten.
Kubernetes-Attribute
Diese Attribute haben keinen Einfluss auf die Auswahl von Speicherpools/Backends durch Trident während der dynamischen Bereitstellung. Stattdessen liefern diese Attribute einfach Parameter, die von Kubernetes Persistent Volumes unterstützt werden. Worker-Knoten sind für Dateisystem-Erstellungsvorgänge verantwortlich und benötigen möglicherweise Dateisystem-Dienstprogramme wie xfsprogs.
| Attribut | Typ | Werte | Beschreibung | Relevante Treiber | Kubernetes-Version |
|---|---|---|---|---|---|
fsType |
Zeichenkette |
ext4, ext3, xfs |
Der Dateisystemtyp für Blockvolumes |
solidfire-san, ontap-nas, ontap-nas-economy, ontap-nas-flexgroup, ontap-san, ontap-san-economy |
Alle |
allowVolumeExpansion |
boolescher Wert |
wahr, falsch |
Aktivieren oder Deaktivieren der Unterstützung für das Vergrößern der PVC-Größe |
ontap-nas, ontap-nas-economy, ontap-nas-flexgroup, ontap-san, ontap-san-economy, solidfire-san, azure-netapp-files |
1.11+ |
volumeBindingMode |
Zeichenkette |
Sofort, WaitForFirstConsumer |
Wählen Sie aus, wann die Volumenbindung und die dynamische Bereitstellung erfolgt. |
Alle |
1.19 - 1.26 |
|
|
|
Kubernetes VolumeSnapshotClass-Objekte
Kubernetes VolumeSnapshotClass Objekte sind analog zu StorageClasses. Sie helfen dabei, mehrere Speicherklassen zu definieren und werden von Volume-Snapshots referenziert, um den Snapshot mit der erforderlichen Snapshot-Klasse zu verknüpfen. Jeder Volume-Snapshot ist mit einer einzigen Volume-Snapshot-Klasse verknüpft.
A VolumeSnapshotClass sollte von einem Administrator definiert werden, um Snapshots zu erstellen. Eine Volume-Snapshot-Klasse wird mit der folgenden Definition erstellt:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-snapclass
driver: csi.trident.netapp.io
deletionPolicy: Delete
Das driver gibt Kubernetes an, dass Anfragen für Volume-Snapshots der csi-snapclass Klasse von Trident verarbeitet werden. Das deletionPolicy gibt die Aktion an, die ausgeführt werden soll, wenn ein Snapshot gelöscht werden muss. Wenn deletionPolicy auf Delete gesetzt ist, werden sowohl die Volume-Snapshot-Objekte als auch der zugrunde liegende Snapshot auf dem Storage-Cluster entfernt, wenn ein Snapshot gelöscht wird. Alternativ bedeutet das Setzen auf Retain, dass VolumeSnapshotContent und der physische Snapshot erhalten bleiben.
Kubernetes VolumeSnapshot-Objekte
Ein Kubernetes VolumeSnapshot Objekt ist eine Anfrage zum Erstellen eines Snapshots eines Volumes. Genau wie ein PVC eine Anfrage eines Benutzers für ein Volume darstellt, ist ein Volume Snapshot eine Anfrage eines Benutzers zum Erstellen eines Snapshots eines bestehenden PVC.
Wenn eine Volume-Snapshot-Anfrage eingeht, verwaltet Trident automatisch die Erstellung des Snapshots für das Volume im Backend und stellt den Snapshot durch die Erstellung eines eindeutigen
VolumeSnapshotContent Objekts bereit. Sie können Snapshots von bestehenden PVCs erstellen und die Snapshots als DataSource beim Erstellen neuer PVCs verwenden.
|
|
Der Lebenszyklus eines VolumeSnapshot ist unabhängig vom Quell-PVC: Ein Snapshot bleibt auch nach dem Löschen des Quell-PVC erhalten. Beim Löschen eines PVC mit zugehörigen Snapshots markiert Trident das zugehörige Volume für dieses PVC im Status Deleting, entfernt es aber nicht vollständig. Das Volume wird entfernt, wenn alle zugehörigen Snapshots gelöscht sind. |
Kubernetes VolumeSnapshotContent-Objekte
Ein Kubernetes VolumeSnapshotContent-Objekt stellt einen Snapshot eines bereits bereitgestellten Volumes dar. Es ist analog zu einem PersistentVolume und kennzeichnet einen bereitgestellten Snapshot im Speicher-Cluster. Ähnlich wie PersistentVolumeClaim und PersistentVolume Objekten, wenn ein Snapshot erstellt wird, behält das VolumeSnapshotContent Objekt eine Eins-zu-eins-Zuordnung zum VolumeSnapshot Objekt bei, das die Snapshot-Erstellung angefordert hat.
Das VolumeSnapshotContent Objekt enthält Details, die den Snapshot eindeutig identifizieren, wie zum Beispiel das snapshotHandle. Dies snapshotHandle ist eine eindeutige Kombination aus dem Namen des PV und dem Namen des VolumeSnapshotContent Objekts.
Wenn eine Snapshot-Anfrage eingeht, erstellt Trident den Snapshot im Backend. Nachdem der Snapshot erstellt wurde, konfiguriert Trident ein VolumeSnapshotContent Objekt und stellt den Snapshot somit der Kubernetes-API zur Verfügung.
|
|
Normalerweise müssen Sie das VolumeSnapshotContent Objekt nicht verwalten. Eine Ausnahme besteht, wenn Sie ein "einen Volume-Snapshot importieren" außerhalb von Trident erstellt haben.
|
Kubernetes VolumeGroupSnapshotClass-Objekte
Kubernetes VolumeGroupSnapshotClass-Objekte sind analog zu VolumeSnapshotClass. Sie helfen dabei, mehrere Speicherklassen zu definieren und werden von Volume-Gruppen-Snapshots referenziert, um den Snapshot mit der erforderlichen Snapshot-Klasse zu verknüpfen. Jeder Volume-Gruppen-Snapshot ist mit genau einer Volume-Gruppen-Snapshot-Klasse verknüpft.
A VolumeGroupSnapshotClass sollte von einem Administrator definiert werden, um eine Gruppe von Snapshots zu erstellen. Eine Volume Group Snapshot Class wird mit der folgenden Definition erstellt:
apiVersion: groupsnapshot.storage.k8s.io/v1beta1
kind: VolumeGroupSnapshotClass
metadata:
name: csi-group-snap-class
annotations:
kubernetes.io/description: "Trident group snapshot class"
driver: csi.trident.netapp.io
deletionPolicy: Delete
Die driver gibt in Kubernetes an, dass Anfragen für Volume-Gruppen-Snapshots der csi-group-snap-class Klasse von Trident verarbeitet werden. Die deletionPolicy gibt die Aktion an, die ausgeführt werden soll, wenn ein Gruppen-Snapshot gelöscht werden muss. Wenn deletionPolicy auf Delete gesetzt ist, werden sowohl die Volume-Gruppen-Snapshot-Objekte als auch der zugrunde liegende Snapshot auf dem Storage-Cluster entfernt, wenn ein Snapshot gelöscht wird. Alternativ bedeutet das Setzen auf Retain, dass VolumeGroupSnapshotContent und der physische Snapshot erhalten bleiben.
Kubernetes VolumeGroupSnapshot-Objekte
Ein Kubernetes VolumeGroupSnapshot-Objekt ist eine Anfrage zum Erstellen eines Snapshots mehrerer Volumes. Genau wie ein PVC eine Anfrage eines Benutzers für ein Volume darstellt, ist ein Volume-Gruppen-Snapshot eine Anfrage eines Benutzers zum Erstellen eines Snapshots eines bestehenden PVC.
Wenn eine Volume-Gruppen-Snapshot-Anfrage eingeht, verwaltet Trident automatisch die Erstellung des Gruppen-Snapshots für die Volumes im Backend und stellt den Snapshot durch die Erstellung eines eindeutigen VolumeGroupSnapshotContent Objekts bereit. Sie können Snapshots von bestehenden PVCs erstellen und die Snapshots als DataSource beim Erstellen neuer PVCs verwenden.
|
|
Der Lebenszyklus eines VolumeGroupSnapshot ist unabhängig vom Quell-PVC: Ein Snapshot bleibt auch nach dem Löschen des Quell-PVC erhalten. Beim Löschen eines PVC mit zugehörigen Snapshots markiert Trident das zugehörige Datenträgervolumen im Status Deleting, entfernt es aber nicht vollständig. Die Volume Group Snapshot wird entfernt, wenn alle zugehörigen Snapshots gelöscht sind. |
Kubernetes VolumeGroupSnapshotContent-Objekte
Ein Kubernetes VolumeGroupSnapshotContent-Objekt repräsentiert einen Gruppen-Snapshot, der von einem bereits bereitgestellten Volume erstellt wurde. Es ist analog zu einem PersistentVolume und kennzeichnet einen bereitgestellten Snapshot im Speichercluster. Ähnlich wie PersistentVolumeClaim und PersistentVolume Objekten, wenn ein Snapshot erstellt wird, verwaltet das VolumeSnapshotContent Objekt eine Eins-zu-Eins-Zuordnung zu dem VolumeSnapshot Objekt, das die Snapshot-Erstellung angefordert hat.
Das VolumeGroupSnapshotContent Objekt enthält Details, die die Snapshot-Gruppe identifizieren, wie zum Beispiel das volumeGroupSnapshotHandle und einzelne volumeSnapshotHandles, die auf dem Speichersystem vorhanden sind.
Wenn eine Snapshot-Anfrage eingeht, erstellt Trident den Volume-Group-Snapshot im Backend. Nachdem der Volume-Group-Snapshot erstellt wurde, konfiguriert Trident ein VolumeGroupSnapshotContent Objekt und stellt den Snapshot somit der Kubernetes-API zur Verfügung.
Kubernetes CustomResourceDefinition-Objekte
Kubernetes Custom Resources sind Endpunkte in der Kubernetes-API, die vom Administrator definiert werden und zur Gruppierung ähnlicher Objekte verwendet werden. Kubernetes unterstützt die Erstellung von Custom Resources zum Speichern einer Sammlung von Objekten. Sie können diese Ressourcendefinitionen abrufen, indem Sie kubectl get crds ausführen.
Benutzerdefinierte Ressourcendefinitionen (CRDs) und die zugehörigen Objektmetadaten werden von Kubernetes in seinem Metadatenspeicher abgelegt. Dadurch entfällt die Notwendigkeit eines separaten Speichers für Trident.
Trident verwendet CustomResourceDefinition Objekte, um die Identität von Trident-Objekten wie Trident Backends, Trident Storage Classes und Trident Volumes zu erhalten. Diese Objekte werden von Trident verwaltet. Darüber hinaus führt das CSI Volume Snapshot Framework einige CRDs ein, die zur Definition von Volume Snapshots erforderlich sind.
CRDs sind ein Konstrukt von Kubernetes. Objekte der oben definierten Ressourcen werden von Trident erstellt. Als einfaches Beispiel: Wenn ein Backend mit tridentctl erstellt wird, wird ein entsprechendes tridentbackends CRD-Objekt zur Verwendung durch Kubernetes erzeugt.
Hier sind einige Punkte, die Sie bei den CRDs von Trident beachten sollten:
-
Bei der Installation von Trident wird ein Satz von CRDs erstellt, die wie jeder andere Ressourcentyp verwendet werden können.
-
Bei der Deinstallation von Trident mit dem
tridentctl uninstall-Befehl werden die Trident-Pods gelöscht, aber die erstellten CRDs werden nicht bereinigt. Siehe "Trident deinstallieren", um zu verstehen, wie Trident vollständig entfernt und von Grund auf neu konfiguriert werden kann.
Trident StorageClass Objekte
Trident erstellt passende Speicherklassen für Kubernetes StorageClass-Objekte, die csi.trident.netapp.io in ihrem Provisioner-Feld angegeben sind. Der Name der Speicherklasse entspricht dem Namen des Kubernetes StorageClass-Objekts, das sie repräsentiert.
|
|
Mit Kubernetes werden diese Objekte automatisch erstellt, wenn ein Kubernetes StorageClass, das Trident als Provisioner verwendet, registriert wird.
|
Speicherklassen umfassen eine Reihe von Anforderungen für Volumes. Trident gleicht diese Anforderungen mit den Attributen ab, die in jedem Speicherpool vorhanden sind; wenn sie übereinstimmen, ist dieser Speicherpool ein gültiges Ziel für die Bereitstellung von Volumes mit dieser Speicherklasse.
Sie können Speicherklassenkonfigurationen erstellen, um Speicherklassen direkt über die REST-API zu definieren. Bei Kubernetes-Bereitstellungen erwarten wir jedoch, dass sie bei der Registrierung neuer Kubernetes StorageClass Objekte erstellt werden.
Trident Backend-Objekte
Backends stellen die Speicheranbieter dar, auf denen Trident Volumes bereitstellt; eine einzelne Trident Instanz kann beliebig viele Backends verwalten.
|
|
Dies ist einer der beiden Objekttypen, die Sie selbst erstellen und verwalten. Der andere ist das Kubernetes StorageClass-Objekt.
|
Weitere Informationen darüber, wie Sie diese Objekte erstellen, finden Sie unter "Backends konfigurieren".
Trident StoragePool Objekte
Speicherpools repräsentieren die verschiedenen, für die Bereitstellung auf jedem Backend verfügbaren Speicherorte. Für ONTAP entsprechen diese Aggregaten in SVMs. Für NetApp HCI/SolidFire entsprechen sie den vom Administrator festgelegten QoS-Bändern. Jeder Speicherpool verfügt über eine Reihe spezifischer Speicherattribute, die seine Leistungs- und Datenschutzmerkmale definieren.
Im Gegensatz zu den anderen Objekten hier werden Speicherpool-Kandidaten immer automatisch erkannt und verwaltet.
Trident Volume Objekte
Volumes sind die grundlegende Bereitstellungseinheit und umfassen Backend-Endpunkte wie NFS-Freigaben sowie iSCSI- und FC-LUNs. In Kubernetes entsprechen diese direkt PersistentVolumes. Wenn Sie ein Volume erstellen, stellen Sie sicher, dass es eine Speicherklasse hat, die bestimmt, wo dieses Volume bereitgestellt werden kann, sowie eine Größe.
|
|
|
Eine Volumenkonfiguration definiert die Eigenschaften, die ein bereitgestelltes Volumen haben sollte.
| Attribut | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
Version |
Zeichenkette |
nein |
Version der Trident API ("1") |
Name |
Zeichenkette |
Ja |
Name des zu erstellenden Volumes |
storageClass |
Zeichenkette |
Ja |
Speicherklasse, die beim Bereitstellen des Volumes verwendet werden soll |
Größe |
Zeichenkette |
Ja |
Größe des Volumens, das in Bytes bereitgestellt werden soll |
Protokoll |
Zeichenkette |
nein |
Zu verwendender Protokolltyp; „Datei“ oder „Block“ |
internalName |
Zeichenkette |
nein |
Name des Objekts auf dem Speichersystem; generiert von Trident |
cloneSourceVolume |
Zeichenkette |
nein |
ontap (nas, san) & solidfire-*: Name des Volumes, von dem geklont werden soll |
splitOnClone |
Zeichenkette |
nein |
ontap (nas, san): Trennen Sie den Klon von seinem übergeordneten Objekt |
snapshotPolicy |
Zeichenkette |
nein |
ontap-*: Zu verwendende Snapshot-Richtlinie |
snapshotReserve |
Zeichenkette |
nein |
ontap-*: Prozentsatz des für Snapshots reservierten Volumens |
exportPolicy |
Zeichenkette |
nein |
ontap-nas*: Zu verwendende Exportrichtlinie |
snapshotDirectory |
bool |
nein |
ontap-nas*: Ob das Snapshot-Verzeichnis sichtbar ist |
unixPermissions |
Zeichenkette |
nein |
ontap-nas*: Initial UNIX-Berechtigungen |
blockSize |
Zeichenkette |
nein |
solidfire-*: Block-/Sektorgröße |
fileSystem |
Zeichenkette |
nein |
Dateisystemtyp |
skipRecoveryQueue |
Zeichenkette |
nein |
Während des Löschens eines Volumes wird die Wiederherstellungswarteschlange im Speicher umgangen und das Volume sofort gelöscht. |
Trident generiert internalName beim Erstellen des Volumes einen Namen. Dies besteht aus zwei Schritten. Zuerst wird dem Volume-Namen das Speicherpräfix vorangestellt (entweder das Standard trident oder das in der Backend-Konfiguration festgelegte Präfix), sodass ein Name der Form <prefix>-<volume-name> entsteht. Anschließend wird der Name bereinigt, indem Zeichen ersetzt werden, die im Backend nicht zulässig sind. Für ONTAP-Backends werden Bindestriche durch Unterstriche ersetzt (dadurch wird der interne Name zu <prefix>_<volume-name>). Für Element-Backends werden Unterstriche durch Bindestriche ersetzt.
Sie können Volume-Konfigurationen verwenden, um Volumes direkt über die REST-API bereitzustellen, aber bei Kubernetes-Bereitstellungen gehen wir davon aus, dass die meisten Benutzer die Standardmethode von Kubernetes PersistentVolumeClaim verwenden. Trident erstellt dieses Volume-Objekt automatisch im Rahmen des Bereitstellungsprozesses.
Trident Snapshot Objekte
Snapshots sind eine zeitpunktgenaue Kopie von Volumes, die zur Bereitstellung neuer Volumes oder zur Wiederherstellung des Zustands verwendet werden können. In Kubernetes entsprechen diese direkt VolumeSnapshotContent Objekten. Jeder Snapshot ist einem Volume zugeordnet, das die Quelle der Daten für den Snapshot ist.
Jedes Snapshot Objekt umfasst die unten aufgeführten Eigenschaften:
| Attribut | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
Version |
Zeichenkette |
Ja |
Version der Trident API ("1") |
Name |
Zeichenkette |
Ja |
Name des Trident Snapshot-Objekts |
internalName |
Zeichenkette |
Ja |
Name des Trident-Snapshot-Objekts auf dem Speichersystem |
volumeName |
Zeichenkette |
Ja |
Name des Persistent Volume, für das der Snapshot erstellt wird |
volumeInternalName |
Zeichenkette |
Ja |
Name des zugehörigen Trident volume object im Speichersystem |
|
|
In Kubernetes werden diese Objekte automatisch verwaltet. Sie können sie anzeigen, um zu sehen, was Trident bereitgestellt hat. |
Wenn eine Kubernetes VolumeSnapshot-Objektanforderung erstellt wird, arbeitet Trident, indem es ein Snapshot-Objekt auf dem zugrunde liegenden Speichersystem erstellt. Die internalName dieses Snapshot-Objekts wird durch die Kombination des Präfixes snapshot- mit der UID des VolumeSnapshot Objekts generiert (zum Beispiel, snapshot-e8d8a0ca-9826-11e9-9807-525400f3f660). volumeName und volumeInternalName werden durch das Abrufen der Details des zugrunde liegenden Volumes befüllt.
Trident ResourceQuota Objekt
Der Trident Daemonset verwendet eine system-node-critical Priority Class – die höchste in Kubernetes verfügbare Priority Class –, um sicherzustellen, dass Trident Volumes während des ordnungsgemäßen Herunterfahrens von Knoten identifizieren und bereinigen kann und damit Trident Daemonset Pods Workloads mit niedrigerer Priorität in Clustern mit hohem Ressourcendruck verdrängen können.
Um dies zu erreichen, verwendet Trident ein ResourceQuota Objekt, um sicherzustellen, dass die „system-node-critical“ Priority Class beim Trident-Daemonset erfüllt ist. Vor der Bereitstellung und der Erstellung des Daemonsets sucht Trident nach dem ResourceQuota Objekt und wendet es an, falls es nicht gefunden wird.
Wenn Sie mehr Kontrolle über das Standardressourcenkontingent und die Prioritätsklasse benötigen, können Sie eine custom.yaml oder das ResourceQuota Objekt mithilfe eines Helm-Charts generieren oder konfigurieren.
Nachfolgend ein Beispiel für ein ResourceQuota-Objekt, das dem Trident daemonset Priorität einräumt.
apiVersion: <version>
kind: ResourceQuota
metadata:
name: trident-csi
labels:
app: node.csi.trident.netapp.io
spec:
scopeSelector:
matchExpressions:
- operator: In
scopeName: PriorityClass
values:
- system-node-critical
Weitere Informationen zu Ressourcenquoten finden Sie unter "Kubernetes: Ressourcenkontingente".
Aufräumarbeiten durchführen ResourceQuota falls die Installation fehlschlägt
Sollte die Installation in dem seltenen Fall fehlschlagen, nachdem das ResourceQuota Objekt erstellt wurde, versuchen Sie zuerst "Deinstallation" und installieren Sie dann erneut.
Sollte das nicht funktionieren, entfernen Sie das ResourceQuota Objekt manuell.
Entfernen ResourceQuota
Wenn Sie Ihre Ressourcenzuweisung lieber selbst steuern möchten, können Sie das Trident ResourceQuota Objekt mit dem folgenden Befehl entfernen:
kubectl delete quota trident-csi -n trident