Udostępnij za pośrednictwem


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.

Diagram przedstawiający sposób aprowizowania woluminu udostępnionego przez nexusa dla obciążenia w klastrze Kubernetes Nexus

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, Errorlub Provisioning.

  • Provisioning State zapewnia bieżący stan aprowizacji urządzenia magazynu. Stan aprowizacji może mieć wartość Succeeded, Failedlub InProgress.

  • 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.