Поделиться через


Устройство хранилища Для оператора Azure Nexus

Оператор Azure Nexus основан на основных конструкциях, таких как вычислительные серверы, устройства хранения и сетевые устройства структуры. Устройства хранилища Оператора Azure Nexus представляют постоянные устройства хранения на стойке.

Каждое устройство хранилища содержит несколько устройств хранения, которые агрегируются для предоставления одного пула носителей. Затем этот пул носителей вырезается на несколько томов, которые отображаются на вычислительных серверах в виде блочных устройств хранения. Вычислительные серверы могут использовать эти блочные устройства хранения в качестве постоянного хранилища для рабочих нагрузок. Каждый кластер Оператора Azure Nexus подготавливается с одним устройством хранения, общим для всех рабочих нагрузок клиента.

Устройство хранения в экземпляре Оператора Azure Nexus представлено как ресурс Azure. Операторы получают доступ к просмотру атрибутов, как и любой другой ресурс Azure.

Классы хранилища Kubernetes

Стек Kubernetes для оператора Azure Nexus предлагает два типа хранилища. Операторы выбирают их с помощью механизма StorageClass Kubernetes.

Внимание

Оператор Azure Nexus не поддерживает временные тома. Nexus рекомендует использовать механизмы хранения постоянных томов, описанные в этом документе, для всех томов рабочих нагрузок, так как они обеспечивают самые высокие уровни производительности и доступности. Все хранилище в операторе Azure Nexus предоставляется устройством хранилища. Нет поддержки хранилища, предоставляемого дисками компьютера без поддержки.

StorageClass: nexus-volume

Механизм хранения по умолчанию, nexus-volume, является предпочтительным вариантом для большинства пользователей. Он обеспечивает самые высокие уровни производительности и доступности. Тем не менее тома нельзя совместно использовать между несколькими рабочими узлами. Операторы могут получать доступ к этим томам и управлять ими с помощью API Azure и портала через ресурс тома.

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

В ситуациях, когда требуется общая файловая система, доступен класс хранилища nexus-shared . Этот класс хранилища предоставляет высокодоступное решение для общего хранилища, позволяя нескольким модулям pod в одном кластере Nexus Kubernetes одновременно получать доступ к одному и тому же тому. Класс хранилища nexus-shared поддерживается высокодоступной службой хранилища NFS. Эта служба хранилища NFS (пул носителей в настоящее время ограничена максимальным размером 1 ТиБ) доступна для сети облачных служб (CSN). Служба хранилища NFS развертывается автоматически при создании ресурса CSN. Любой кластер Nexus Kubernetes, подключенный к CSN, может подготавливать постоянные тома из этого общего пула носителей. Nexus-shared поддерживает режимы доступа для чтения один раз (RWO) и чтения много операций записи (RWX). Это означает, что приложения рабочей нагрузки могут использовать любой из этих режимов доступа для доступа к общему хранилищу.

Схема, на которой показана подготовка тома для рабочей нагрузки в кластере Nexus Kubernetes с общим доступом на основе nexus

Рисунок: Общий том Nexus

Хотя для большинства приложений достаточно производительности и доступности общего доступа к nexus , рекомендуется, чтобы рабочие нагрузки с тяжелыми требованиями ввода-вывода использовали параметр nexus-volume для оптимальной производительности.

Чтение однократной записи (RWO)

В режиме чтения однократной записи (RWO) только один узел или заявитель может подключать общий том nexus за раз. Режим доступа ReadWriteOnce по-прежнему позволяет нескольким модулям pod получить доступ к тому, когда модули pod выполняются на одном узле.

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

Чтение большого количества операций записи (RWX)

В режиме чтения много операций записи (RWX) несколько узлов или заявителей могут одновременно подключать общий том 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

Примеры

Чтение однократной записи (RWO) с классом хранилища nexus-volume

В этом примере манифест создает StatefulSet с PersistentVolumeClaimTemplate с помощью класса хранилища nexus-volume в режиме 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

Каждый модуль pod StatefulSet имеет один созданный Объект 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

Чтение большого количества операций записи (RWX) с классом хранилища nexus-shared

Приведенный ниже манифест создает развертывание с помощью PersistentVolumeClaim (PVC) с использованием класса хранилища nexus-shared в режиме ReadWriteMany. Создание ПВХ совместно используется всеми модулями pod развертывания и может использоваться для одновременного чтения и записи всех из них.

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

После применения существует три реплики развертывания с одинаковым ПВХ.

# 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>

Это можно увидеть из приведенных ниже выходных данных, что все модули pod записываются в один и тот же ПВХ.

# 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

Ограничения размера тома и управление емкостью

PvCs, созданные с помощью тома nexus и nexus-shared, имеют минимальный и максимальный размер утверждений.

Класс хранения Минимальный размер ПВХ Максимальный размер ПВХ
nexus-volume 1 МиБ 12 ТиБ
nexus-shared нет 1 ТиБ

Внимание

Тома, которые достигают предела потребления, могут привести к ошибкам места на диске для рабочих нагрузок, которые используют их. Необходимо убедиться, что вы подготавливаете подходящие размеры томов для требований рабочей нагрузки. Необходимо отслеживать как устройство хранения, так и все серверы NFS для их процентного потребления хранилища. Это можно сделать с помощью метрик, описанных в списке доступных метрик.

  • Как для сетевых адаптеров, так и для сетевых адаптеров используется запрошенная емкость хранилища в качестве ограничения потребления. Том не может использовать больше хранилища, чем связанный запрос ПВХ.
  • Все физические тома подготовлены тонкой подготовкой. При необходимости необходимо отслеживать общее потребление хранилища на устройстве хранения и выполнять операции обслуживания, чтобы освободить место в хранилище.
  • Запрос на подготовку nexus-volume PVC завершается ошибкой, если запрошенный размер меньше минимального или более максимального поддерживаемого размера тома.
  • Общие тома Nexus логически подготавливаются на резервном сервере NFS. Этот сервер NFS имеет фиксированную емкость 1 ТиБ.
    • Связь общего ПВХ может быть подготовлен, несмотря на запросы более 1 ТиБ хранилища, однако только 1 ТиБ можно использовать.
    • Можно подготовить набор PVC, где сумма запросов емкости превышает 1 ТиБ. Однако применяется ограничение потребления 1 ТиБ; Набор связанных PV может не использовать более 1 ТиБ хранилища.

Состояние устройства хранилища

Следующие свойства отражают рабочее состояние устройства хранения:

  • Status указывает состояние, производное от устройства хранилища. Состояние может быть Available, Errorили Provisioning.

  • Provisioning State предоставляет текущее состояние подготовки устройства хранилища. Состояние подготовки может быть Succeeded, Failedили InProgress.

  • Capacity предоставляет общую и используемую емкость устройства хранения.

  • Remote Vendor Management указывает, включена или отключена ли удаленное управление поставщиками для устройства хранилища.

Операции устройства хранилища

  • Перечисление устройств хранения: вывод списка устройств хранения в предоставленной группе ресурсов или подписке.
  • Показать устройство хранения: получение свойств предоставленного устройства хранения.
  • Обновление устройства хранилища: обновление свойств или тегов предоставленного устройства хранилища.
  • Включение и отключение управления удаленными поставщиками для устройства хранилища: включение или отключение удаленного управления поставщиками для предоставленного устройства хранилища.

Примечание.

Клиенты не могут напрямую создавать или удалять устройства хранения. Эти ресурсы создаются только в качестве реализации жизненного цикла кластера. Реализация блокирует запросы на создание или удаление от любого пользователя, и позволяет выполнять только внутренние или управляемые приложением операции создания или удаления.