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


(модуль) хранилища Оператора Azure Nexus

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

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

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

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

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

служба хранилища Class: 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

служба хранилища Class: nexus-shared

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

Хотя для большинства приложений достаточно производительности и доступности общего доступа к 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

состояние служба хранилища (модуль)

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

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

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

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

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

операции служба хранилища (модуль)

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

Примечание.

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