Zařízení úložiště Nexus pro operátora Azure

Operátor Azure Nexus je založený na základních konstruktech, jako jsou výpočetní servery, zařízení úložiště a síťová zařízení infrastruktury. Zařízení úložiště Nexus operátora Azure představují trvalá úložiště na racku.

Každé zařízení úložiště obsahuje několik úložných zařízení, která jsou agregovaná tak, aby poskytovala jeden fond úložiště. Tento fond úložiště se pak vyřezá do několika svazků, které se předávají výpočetním serverům jako bloková úložiště. Výpočetní servery můžou tato bloková úložiště používat jako trvalé úložiště pro své úlohy. Každý cluster Azure Operator Nexus je zřízený s jedním zařízením úložiště, které je sdílené napříč všemi úlohami tenanta.

Zařízení úložiště v instanci Azure Operator Nexus je reprezentované jako prostředek Azure. Operátoři získají přístup k zobrazení jeho atributů jako jakýkoli jiný prostředek Azure.

Třídy úložiště Kubernetes

Software Kubernetes pro operátora Azure Nabízí dva typy úložiště. Operátory je vyberou prostřednictvím mechanismu Kubernetes StorageClass.

Důležité

Operátor Azure Nexus nepodporuje dočasné svazky. Nexus doporučuje, aby se mechanismy trvalého úložiště svazků popsané v tomto dokumentu používaly pro všechny svazky úloh, protože poskytují nejvyšší úroveň výkonu a dostupnosti. Zařízení úložiště poskytuje veškeré úložiště ve službě Azure Operator Nexus. Disky holých počítačů nepodporují úložiště.

StorageClass: nexus-volume

Výchozí mechanismus úložiště, svazek nexus, je upřednostňovanou volbou pro většinu uživatelů. Poskytuje nejvyšší úroveň výkonu a dostupnosti. Svazky se ale nedají současně sdílet mezi několika pracovními uzly. Operátoři můžou přistupovat k těmto svazkům a spravovat je pomocí rozhraní AZURE API a portálu prostřednictvím prostředku svazku.

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

V situacích, kdy se vyžaduje sdílený systém souborů, je k dispozici třída úložiště typu nexus-shared . Tato třída úložiště poskytuje vysoce dostupné sdílené úložiště tím, že umožňuje více podů ve stejném clusteru Nexus Kubernetes pro souběžný přístup ke stejnému svazku a jejich sdílení. Třída úložiště typu nexus-shared je podporována vysoce dostupnou službou úložiště NFS. Tato služba úložiště NFS (fond úložiště je aktuálně omezena na maximální velikost 1 TiB) je dostupná pro síť cloudových služeb (CSN). Služba úložiště NFS se automaticky nasadí při vytváření prostředku CSN. Jakýkoli cluster Nexus Kubernetes připojený k CSN může z tohoto sdíleného fondu úložiště zřizovat trvalé svazky. Nexus-shared podporuje režimy přístupu jen jednou pro čtení (RWO) i režimy pro čtení typu N (RWX). To znamená, že aplikace úloh můžou pro přístup ke sdílenému úložišti využívat některý z těchto režimů přístupu.

Diagram znázorňující, jak sdílené propojení zřídí svazek pro úlohu v clusteru Nexus Kubernetes

Obrázek: Sdílený svazek Nexus

Přestože výkon a dostupnost sdíleného propojení jsou dostatečné pro většinu aplikací, doporučujeme, aby úlohy s náročnými vstupně-výstupními požadavky používaly možnost nexus-volume pro optimální výkon.

Čtení zápisu jednou (RWO)

V režimu jen jednou pro čtení zápisu (RWO) může současně připojit sdílený svazek nexus pouze jeden uzel nebo deklarant. Režim přístupu ReadWriteOnce stále umožňuje více podům přistupovat ke svazku, když pody běží na stejném uzlu.

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

Čtení zápisu mnoho (RWX)

V režimu N zápisu na čtení (RWX) může více uzlů nebo deklarací současně připojit sdílený svazek nexus.

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

Příklady

Čtení zápisu jednou (RWO) s třídou úložiště nexus-volume

Tento ukázkový manifest vytvoří StatefulSet s PersistentVolumeClaimTemPlate pomocí třídy úložiště nexus-volume v režimu 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ždý pod StatefulSet má vytvořenou jednu 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

Čtení zápisu N (RWX) s třídou úložiště sdíleného propojením

Následující manifest vytvoří nasazení s PersistentVolumeClaim (PVC) pomocí třídy úložiště nexus-shared v režimu ReadWriteMany. Vytvořený PVC je sdílen všemi pody nasazení a lze je použít ke čtení a zápisu všemi z nich současně.

---
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 použití existují tři repliky nasazení, které sdílejí stejný 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>

Z následujícího výstupu lze pozorovat, že všechny pody se zapisují do stejného PVC.

# 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

Omezení velikosti svazku a správa kapacity

PvCs vytvořené pomocí svazku nexus a nexus-shared mají minimální a maximální velikost deklarací identity.

Třída úložiště Minimální velikost PVC Maximální velikost PVC
nexus-volume 1 MiB 12 TiB
nexus-shared Nic 1 TiB

Důležité

Svazky, které dosáhnou limitu spotřeby, způsobí chyby kvůli chybám místa na disku u úloh, které je spotřebovávají. Musíte zajistit, abyste zřídili vhodné velikosti svazků pro vaše požadavky na úlohy. Musíte monitorovat jak zařízení úložiště, tak všechny servery NFS, aby se jejich procentuální spotřeba úložiště chovaly. Můžete to provést pomocí metrik zdokumentovaných v seznamu dostupných metrik.

  • Svazky nexus i sdílené pvcs mají požadovanou kapacitu úložiště vynucenou jako limit spotřeby. Svazek nemůže spotřebovávat více úložiště než přidružený požadavek PVC.
  • Všechny fyzické svazky jsou dynamicky zajišťované. Musíte monitorovat celkovou spotřebu úložiště na úložném zařízení a provádět operace údržby, aby se v případě potřeby uvolnilo místo v úložišti.
  • Požadavek na zřizování PVC typu nexus-volume selže, pokud je požadovaná velikost menší než minimální nebo větší než maximální podporovaná velikost svazku.
  • Sdílené svazky Nexus jsou logicky dynamicky zřízeny na záložním serveru NFS. Tento server NFS má pevnou kapacitu 1 TiB.
    • Navzdory žádosti o více než 1 TiB úložiště je možné zřídit nexus-shared PVC, ale lze spotřebovat pouze 1 TiB.
    • Je možné zřídit sadu pvcs, kde je součet požadavků na kapacitu větší než 1 TiB. Nicméně platí limit spotřeby 1 TiB; sada přidružených virtuálních počítačů nemusí spotřebovávat více než 1 TiB úložiště.

Stav zařízení úložiště

Následující vlastnosti odrážejí provozní stav zařízení úložiště:

  • Status označuje stav odvozený ze zařízení úložiště. Stav může být Available, Errornebo Provisioning.

  • Provisioning State poskytuje aktuální stav zřizování zařízení úložiště. Stav zřizování může být Succeeded, Failednebo InProgress.

  • Capacity poskytuje celkovou a využitou kapacitu úložného zařízení.

  • Remote Vendor Management označuje, jestli je pro zařízení úložiště povolená nebo zakázaná správa vzdáleného dodavatele.

Operace zařízení úložiště

  • Seznam zařízení úložiště: Uveďte zařízení úložiště v poskytnuté skupině prostředků nebo předplatném.
  • Zobrazit zařízení úložiště: Získejte vlastnosti poskytnutého úložného zařízení.
  • Aktualizovat zařízení úložiště: Aktualizujte vlastnosti nebo značky poskytnutého zařízení úložiště.
  • Povolení nebo zakázání správy vzdáleného dodavatele pro zařízení úložiště: Povolí nebo zakáže vzdálenou správu dodavatele pro poskytnuté zařízení úložiště.

Poznámka:

Zákazníci nemůžou přímo vytvářet ani odstraňovat zařízení úložiště. Tyto prostředky se vytvářejí pouze jako realizace životního cyklu clusteru. Implementace blokuje žádosti o vytvoření nebo odstranění od libovolného uživatele a umožňuje pouze interní nebo aplikace řízené operacemi vytváření nebo odstraňování.