Urządzenie magazynu Operator Platformy Azure Nexus
Operator platformy Azure Nexus jest oparty na podstawowych konstrukcjach, takich jak serwery obliczeniowe, urządzenia magazynujące i urządzenia sieci szkieletowej. Urządzenia magazynujące Operator Nexus platformy Azure reprezentują trwałe urządzenia magazynujące na stojaku.
Każde urządzenie magazynu zawiera wiele urządzeń magazynujących, które są agregowane w celu zapewnienia pojedynczej puli magazynów. Ta pula magazynów jest następnie wyodrębniona na wiele woluminów, które są prezentowane serwerom obliczeniowym jako urządzenia magazynujące blokowe. Serwery obliczeniowe mogą używać tych urządzeń magazynujących blokowych jako magazynu trwałego dla obciążeń. Każdy klaster Operator Nexus platformy Azure jest aprowizowany przy użyciu jednego urządzenia magazynu współużytkowanego we wszystkich obciążeniach dzierżawy.
Urządzenie magazynu w wystąpieniu operatora platformy Azure Nexus jest reprezentowane jako zasób platformy Azure. Operatorzy uzyskują dostęp do wyświetlania swoich atrybutów, takich jak każdy inny zasób platformy Azure.
Klasy magazynu Kubernetes
Stos Kubernetes oprogramowania Platformy Kubernetes operatora platformy Azure oferuje dwa typy magazynu. Operatorzy wybierają je za pomocą mechanizmu Kubernetes StorageClass.
StorageClass: nexus-volume
Domyślny mechanizm przechowywania, nexus-volume, jest preferowanym wyborem dla większości użytkowników. Zapewnia najwyższy poziom wydajności i dostępności. Woluminy nie mogą być jednak współużytkowane jednocześnie w wielu węzłach roboczych. Operatorzy mogą uzyskiwać dostęp do tych woluminów i zarządzać nimi przy użyciu interfejsu API platformy Azure i portalu za pośrednictwem zasobu woluminu.
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
W sytuacjach, w których wymagany jest udostępniony system plików, dostępna jest klasa magazynu współużytkowanego typu nexus. Ta klasa magazynu udostępnia udostępnione rozwiązanie magazynu, włączając wiele zasobników w tym samym klastrze Nexus Kubernetes w celu współbieżnego dostępu i współużytkowania tego samego woluminu. Klasa magazynu udostępnionego nexus jest wspierana przez usługę magazynu NFS. Ta usługa magazynu NFS (pula magazynów obecnie ograniczona do maksymalnego rozmiaru 1TiB) jest dostępna dla sieci usług w chmurze (CSN). Każdy klaster Kubernetes Nexus dołączony do csN może aprowizować wolumin trwały z tej udostępnionej puli magazynów. Nexus-shared obsługuje zarówno tryb odczytu i zapisu raz (RWO) i odczyt zapisu wiele (RWX). Oznacza to, że aplikacje obciążeń mogą korzystać z jednego z tych trybów dostępu w celu uzyskania dostępu do magazynu udostępnionego.
Mimo że wydajność i dostępność nexus-shared są wystarczające dla większości aplikacji, zalecamy, aby obciążenia z dużymi wymaganiami we/wy używały opcji nexus-volume w celu uzyskania optymalnej wydajności.
Odczyt zapisu raz (RWO)
W trybie odczytu zapisu raz (RWO) wolumin współużytkowany nexus może być zainstalowany tylko przez jeden węzeł lub oświadczenie w danym momencie. Tryb dostępu ReadWriteOnce nadal umożliwia wielu zasobnikom dostęp do woluminu, gdy zasobniki są uruchomione w tym samym węźle.
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
Odczytywanie wielu zapisów (RWX)
W trybie Odczytuj wiele (RWX) współużytkowany wolumin nexus może być instalowany przez wiele węzłów lub oświadczeń w tym samym czasie.
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
Przykłady
Odczyt zapisu raz (RWO) z klasą magazynu woluminów nexus
Poniższy manifest tworzy element StatefulSet z elementem PersistentVolumeClaimTemplate przy użyciu klasy magazynu woluminów nexus w trybie ReadWriteOnce.
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
Każdy zasobnik statefulSet będzie miał utworzony jeden element PersistentVolumeClaim.
# 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
Odczytywanie wielu zapisów (RWX) za pomocą udostępnionej klasy magazynu nexus
Poniższy manifest tworzy wdrożenie z trwałymvolumeClaim (PVC) przy użyciu klasy magazynu udostępnionego nexus w trybie ReadWriteMany. Utworzony element PVC jest współużytkowany przez wszystkie zasobniki wdrożenia i może służyć do odczytywania i zapisywania wszystkich z nich jednocześnie.
---
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
...
Po zastosowaniu będą dostępne trzy repliki wdrożenia współużytkowania tego samego PVC.
# 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>
Można zaobserwować z poniższych danych wyjściowych, że wszystkie zasobniki zapisują się w tym samym PCV.
# 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
Stan urządzenia magazynu
Następujące właściwości odzwierciedlają stan operacyjny urządzenia magazynu:
Status
wskazuje stan pochodzący z urządzenia magazynu. Stanem może byćAvailable
,Error
lubProvisioning
.Provisioning State
zapewnia bieżący stan aprowizacji urządzenia magazynu. Stan aprowizacji może mieć wartośćSucceeded
,Failed
lubInProgress
.Capacity
zapewnia łączną i używaną pojemność urządzenia magazynu.Remote Vendor Management
wskazuje, czy zdalne zarządzanie dostawcami jest włączone, czy wyłączone dla urządzenia magazynu.
Operacje na urządzeniu magazynu
- Wyświetlanie listy urządzeń magazynu: wyświetlanie listy urządzeń magazynujących w podanej grupie zasobów lub subskrypcji.
- Pokaż urządzenie magazynu: pobierz właściwości dostarczonego urządzenia magazynu.
- Aktualizuj urządzenie magazynu: zaktualizuj właściwości lub tagi dostarczonego urządzenia magazynu.
- Włącz/wyłącz zdalne zarządzanie dostawcami dla urządzenia magazynu: włącz lub wyłącz zdalne zarządzanie dostawcami dla dostarczonego urządzenia magazynu.
Uwaga
Klienci nie mogą bezpośrednio tworzyć ani usuwać urządzeń magazynujących. Te zasoby są tworzone tylko jako realizacja cyklu życia klastra. Implementacja blokuje tworzenie lub usuwanie żądań od dowolnego użytkownika i umożliwia tylko operacje tworzenia i usuwania oparte na aplikacjach wewnętrznych/aplikacji.