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.
Ważne
Operator platformy Azure Nexus nie obsługuje woluminów efemerycznych. Nexus zaleca, aby mechanizmy trwałego magazynu woluminów opisane w tym dokumencie były używane dla wszystkich woluminów obciążeń, ponieważ zapewniają one najwyższy poziom wydajności i dostępności. Wszystkie magazyny w narzędziu Operator Nexus platformy Azure są dostarczane przez urządzenie magazynu. Brak obsługi magazynu udostępnianego przez dyski maszyny baremetalowej.
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 rozwiązanie magazynu współdzielonego o wysokiej dostępności, 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 o wysokiej dostępności. Ta usługa magazynu NFS (pula magazynów obecnie ograniczona do maksymalnego rozmiaru 1 TiB) jest dostępna dla sieci usług w chmurze (CSN). Usługa magazynu NFS jest wdrażana automatycznie podczas tworzenia zasobu CSN. Każdy klaster Kubernetes Nexus dołączony do csN może aprowizować woluminy trwałe 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.
Rysunek: Udostępniony wolumin Nexus
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) tylko jeden węzeł lub roszczenia może zainstalować wolumin udostępniony nexus naraz. 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 odczytu zapisu wiele (RWX) wiele węzłów lub oświadczeń może zainstalować wolumin współużytkowany nexus 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
Ten przykładowy manifest tworzy element StatefulSet z elementem PersistentVolumeClaimTemplate przy użyciu klasy magazynu nexus-volume 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 ma jeden utworzony 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 istnieją trzy repliki wdrożenia, które współużytkują ten sam 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 go 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
Limity rozmiaru woluminu i zarządzanie pojemnością
PvCs utworzone przy użyciu nexus-volume i nexus-shared mają minimalne i maksymalne rozmiary oświadczeń.
Klasa magazynu | Minimalny rozmiar PVC | Maksymalny rozmiar PVC |
---|---|---|
nexus-volume | 1 MiB | 12 TiB |
nexus-shared | Brak | 1 TiB |
Ważne
Woluminy, które osiągną limit użycia, spowodują błędy braku miejsca na dysku w obciążeniach, które z nich korzystają. Należy upewnić się, że aprowizuj odpowiednie rozmiary woluminów dla wymagań dotyczących obciążenia. Należy monitorować zarówno urządzenie magazynu, jak i wszystkie serwery NFS pod kątem procentowego użycia magazynu. Można to zrobić, korzystając z metryk udokumentowanych na liście dostępnych metryk.
- Zarówno nexus-volume i nexus-shared PVC mają żądane pojemności magazynu wymuszone jako limit zużycia. Wolumin nie może zużywać więcej miejsca niż skojarzone żądanie PVC.
- Wszystkie woluminy fizyczne są alokowane elastycznie. W razie potrzeby należy monitorować całkowite zużycie magazynu na urządzeniu magazynu i wykonywać operacje konserwacji, aby zwolnić miejsce do magazynowania.
- Żądanie aprowizacji woluminu nexus-PVC kończy się niepowodzeniem, jeśli żądany rozmiar jest mniejszy niż minimalny lub większy niż maksymalny obsługiwany rozmiar woluminu.
- Udostępnione woluminy Nexus są logicznie alokowane elastycznie na serwerze NFS. Ten serwer NFS ma stałą pojemność 1 TiB.
- Nexus-shared PVC można aprowizować pomimo żądania więcej niż 1 TiB magazynu, jednak tylko 1 TiB może być zużyte.
- Istnieje możliwość aprowizowania zestawu PVC, w którym suma żądań pojemności jest większa niż 1 TiB. Stosuje się jednak limit zużycia 1 TiB; zestaw skojarzonych telewizorów może nie zużywać więcej niż 1 TiB miejsca do magazynowania.
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.