Устройство хранилища Для оператора 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
Хотя для большинства приложений достаточно производительности и доступности общего доступа к 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
указывает, включена или отключена ли удаленное управление поставщиками для устройства хранилища.
Операции устройства хранилища
- Перечисление устройств хранения: вывод списка устройств хранения в предоставленной группе ресурсов или подписке.
- Показать устройство хранения: получение свойств предоставленного устройства хранения.
- Обновление устройства хранилища: обновление свойств или тегов предоставленного устройства хранилища.
- Включение и отключение управления удаленными поставщиками для устройства хранилища: включение или отключение удаленного управления поставщиками для предоставленного устройства хранилища.
Примечание.
Клиенты не могут напрямую создавать или удалять устройства хранения. Эти ресурсы создаются только в качестве реализации жизненного цикла кластера. Реализация блокирует запросы на создание или удаление от любого пользователя, и позволяет выполнять только внутренние или управляемые приложением операции создания или удаления.