Azure Operator Nexus-Speicherappliance
Azure Operator Nexus basiert auf grundlegenden Konstrukten wie Computeservern, Speicherappliances und Netzwerk-Fabric-Geräten. Azure Operator Nexus-Speicherappliances stellen persistente Speicherappliances auf dem Rack dar.
Jede Speicherappliance enthält mehrere Speichergeräte, die aggregiert werden, um einen einzelnen Speicherpool bereitzustellen. Dieser Speicherpool wird dann in mehrere Volumes geschnitzt, die den Computeservern als Blockspeichergeräte angezeigt werden. Die Computeserver können diese Blockspeichergeräte als beständigen Speicher für ihre Workloads verwenden. Jeder Azure Operator Nexus-Cluster wird mit einer einzigen Speicherappliance bereitgestellt, die für alle Mandantenworkloads freigegeben ist.
Die Speicherappliance in einer Azure Operator Nexus-Instanz wird als Azure-Ressource dargestellt. Operatoren können die Attribute wie bei jeder anderen Azure-Ressource einsehen.
Kubernetes-Speicherklassen
Der Software-Kubernetes-Stack von Azure Operator Nexus bietet zwei Arten von Speicher. Operatoren wählen sie über den Kubernetes StorageClass-Mechanismus aus.
StorageClass: Nexus-Volume
Der Standardspeichermechanismus – Nexus-Volume – ist die bevorzugte Wahl für die meisten benutzenden Personen. Sie bietet ein Höchstmaß an Leistung und Verfügbarkeit. Volumes können jedoch nicht gleichzeitig für mehrere Arbeitsknoten freigegeben werden. Operatoren können über die Volumeressource über die Azure-API und das Portal auf diese Volumes zugreifen und diese verwalten.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: testPvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 107Mi
storageClassName: nexus-volume
volumeMode: Block
volumeName: testVolume
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 107Mi
phase: Bound
StorageClass: nexus-shared
In Situationen, in denen ein freigegebenes Dateisystem erforderlich ist, ist die nexus-shared-Speicherklasse verfügbar. Diese Speicherklasse bietet eine freigegebene Speicherlösung, indem mehrere Pods gleichzeitig auf dasselbe Volume zugreifen und gemeinsam genutzt werden können. Diese Volumes sind vom Typ NFS Storage (derzeit auf eine maximale Größe von 1 TB begrenzt), auf die die Kubernetes-Knoten als persistentes Volume zugreifen. Nexus-shared unterstützt die beiden Zugriffsmodi „Read Write Once (RWO)“ und „Read Write Many (RWX)“. Das bedeutet, dass die Workloadanwendungen einen dieser beiden Zugriffsmodi für den Zugriff auf den Speicher nutzen können.
Obwohl die Leistung und Verfügbarkeit von nexus-shared für die meisten Anwendungen ausreichend sind, empfehlen wir, dass Workloads mit hohen E/A-Anforderungen die Option nexus-volume verwenden, um eine optimale Leistung zu erzielen.
Read Write Once (RWO)
Im RWO-Modus (Read Write Once) kann das „nexus-shared“-Volume jeweils nur von einem Knoten oder Anforder gemountet werden. Im ReadWriteOnce-Zugriffsmodus können immer noch mehrere Pods auf das Volume zugreifen, wenn die Pods auf demselben Knoten ausgeführt werden.
apiVersion: v1
items:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: nexus-shared
volumeMode: Filesystem
volumeName: TestVolume
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 5Gi
phase: Bound
Read Write Many (RWX)
Im RWX-Modus (Read Write Many) kann das „nexus-shared“-Volume von mehreren Knoten oder Anforderern gleichzeitig gemountet werden.
apiVersion: v1
items:
- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: nexus-shared
volumeMode: Filesystem
volumeName: TestVolume
status:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
phase: Bound
Beispiele
Read Write Once (RWO) mit der Speicherklasse „nexus-volume“
Das folgende Manifest erstellt ein StatefulSet mit PersistentVolumeClaimTemplate unter Verwendung der Speicherklasse „nexus-volume“ im ReadWriteOnce-Modus.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: test-sts-rwo
labels:
app: test-sts-rwo
spec:
serviceName: test-sts-rwo-svc
replicas: 3
selector:
matchLabels:
app: test-sts-rwo
template:
metadata:
labels:
app: test-sts-rwo
spec:
containers:
- name: busybox
command:
- "/bin/sh"
- "-c"
- while true; do echo "$(date) -- $(hostname)" >> /mnt/hostname.txt; sleep 1; done
image: busybox
volumeMounts:
- name: test-volume-rwo
mountPath: /mnt/
volumeClaimTemplates:
- metadata:
name: test-volume-rwo
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
storageClassName: nexus-volume
Jeder Pod des StatefulSets hat ein PersistentVolumeClaim erstellt.
# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-volume-rwo-test-sts-rwo-0 Bound pvc-e41fec47-cc43-4cd5-8547-5a4457cbdced 10Gi RWO nexus-volume 8m17s
test-volume-rwo-test-sts-rwo-1 Bound pvc-1589dc79-59d2-4a1d-8043-b6a883b7881d 10Gi RWO nexus-volume 7m58s
test-volume-rwo-test-sts-rwo-2 Bound pvc-82e3beac-fe67-4676-9c61-e982022d443f 10Gi RWO nexus-volume 12s
# kubectl get pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-sts-rwo-0 1/1 Running 0 8m31s 10.245.231.74 nexus-cluster-6a8c4018-agentpool2-md-vhhv6 <none> <none>
test-sts-rwo-1 1/1 Running 0 8m12s 10.245.126.73 nexus-cluster-6a8c4018-agentpool1-md-27nw4 <none> <none>
test-sts-rwo-2 1/1 Running 0 26s 10.245.183.9 nexus-cluster-6a8c4018-agentpool1-md-4jprt <none> <none>
# kubectl exec test-sts-rwo-0 -- cat /mnt/hostname.txt
Thu Nov 9 21:57:25 UTC 2023 -- test-sts-rwo-0
Thu Nov 9 21:57:26 UTC 2023 -- test-sts-rwo-0
Thu Nov 9 21:57:27 UTC 2023 -- test-sts-rwo-0
# kubectl exec test-sts-rwo-1 -- cat /mnt/hostname.txt
Thu Nov 9 21:57:19 UTC 2023 -- test-sts-rwo-1
Thu Nov 9 21:57:20 UTC 2023 -- test-sts-rwo-1
Thu Nov 9 21:57:21 UTC 2023 -- test-sts-rwo-1
# kubectl exec test-sts-rwo-s -- cat /mnt/hostname.txt
Thu Nov 9 21:58:32 UTC 2023 -- test-sts-rwo-2
Thu Nov 9 21:58:33 UTC 2023 -- test-sts-rwo-2
Thu Nov 9 21:58:34 UTC 2023 -- test-sts-rwo-2
Read Write Many (RWX) mit „nexus-shared“-Speicherklasse
Das folgende Manifest erstellt eine Bereitstellung mit PersistentVolumeClaim (PVC) unter Verwendung der Speicherklasse nexus-volume im ReadWriteMany-Modus. Der erstellte PVC wird von allen Pods der Bereitstellung gemeinsam genutzt und kann von allen gleichzeitig zum Lesen und Schreiben verwendet werden.
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-volume-rwx
spec:
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 3Gi
storageClassName: nexus-shared
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: test-deploy-rwx
name: test-deploy-rwx
spec:
replicas: 3
selector:
matchLabels:
app: test-deploy-rwx
template:
metadata:
labels:
app: test-deploy-rwx
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: kubernetes.azure.com/agentpool
operator: Exists
values: []
topologyKey: "kubernetes.io/hostname"
containers:
- name: busybox
command:
- "/bin/sh"
- "-c"
- while true; do echo "$(date) -- $(hostname)" >> /mnt/hostname.txt; sleep 1; done
image: busybox
volumeMounts:
- name: test-volume-rwx
mountPath: /mnt/
volumes:
- name: test-volume-rwx
persistentVolumeClaim:
claimName: test-volume-rwx
...
Nach der Anwendung gibt es drei Replikate der Bereitstellung, die sich denselben PVC teilen.
# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-volume-rwx Bound pvc-32f0717e-6b63-4d64-a458-5be4ffe21d37 3Gi RWX nexus-shared 6s
# kubectl get pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-deploy-rwx-fdb8f49c-86pv4 1/1 Running 0 18s 10.245.224.140 nexus-cluster-6a8c4018-agentpool1-md-s2dh7 <none> <none>
test-deploy-rwx-fdb8f49c-9zsjf 1/1 Running 0 18s 10.245.126.74 nexus-cluster-6a8c4018-agentpool1-md-27nw4 <none> <none>
test-deploy-rwx-fdb8f49c-wdgw7 1/1 Running 0 18s 10.245.231.75 nexus-cluster-6a8c4018-agentpool2-md-vhhv6 <none> <none>
Aus der folgenden Ausgabe ist ersichtlich, dass alle Pods in denselben PVC schreiben.
# kubectl exec test-deploy-rwx-fdb8f49c-86pv4 -- cat /mnt/hostname.txt
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov 9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
# kubectl exec test-deploy-rwx-fdb8f49c-9zsjf -- cat /mnt/hostname.txt
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov 9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
# kubectl exec test-deploy-rwx-fdb8f49c-wdgw7 -- cat /mnt/hostname.txt
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov 9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov 9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Status der Speicherappliance
Die folgenden Eigenschaften spiegeln den Betriebszustand einer Speicherappliance wider:
Status
gibt den Zustand an, der von der Speicherappliance abgeleitet wurde. Der Zustand kannAvailable
,Error
oderProvisioning
sein.Provisioning State
gibt den aktuellen Bereitstellungsstatus der Speicherappliance. Der Bereitstellungsstatus kannSucceeded
,Failed
oderInProgress
sein.Capacity
stellt die gesamte und verwendete Kapazität der Speicherappliance bereit.Remote Vendor Management
gibt an, ob die Remoteanbieterverwaltung für die Speicherappliance aktiviert oder deaktiviert ist.
Speicherappliancevorgänge
- Auflisten von Speicherappliances: Auflisten von Speicherappliances in der bereitgestellten Ressourcengruppe oder dem bereitgestellten Abonnement.
- Speicherappliance anzeigen: Abrufen von Eigenschaften der bereitgestellten Speicherappliance.
- Speicherappliance aktualisieren: Aktualisieren von Eigenschaften oder Tags der bereitgestellten Speicherappliance.
- Aktivieren/Deaktivieren der Remoteanbieterverwaltung für die Speicheranwendungappliance: Aktivieren oder deaktivieren Sie die Remoteanbieterverwaltung für die bereitgestellte Speicherappliance.
Hinweis
Die Kundschaft kann keine Speicherappliances direkt erstellen oder löschen. Diese Ressourcen werden nur als Realisierung des Clusterlebenszyklus erstellt. Die Implementierung blockiert Anforderungen zur Erstellung oder Löschung von benutzenden Personen und erlaubt nur interne/anwendungsgesteuerte Erstellungs- oder Löschvorgänge.