جهاز تخزين Azure Operator Nexus

تم إنشاء Azure Operator Nexus على بنيات أساسية مثل خوادم الحوسبة وأجهزة التخزين وأجهزة نسيج الشبكة. تمثل أجهزة تخزين Azure Operator Nexus أجهزة تخزين ثابتة على الحامل.

يحتوي كل جهاز تخزين على أجهزة تخزين متعددة، يتم تجميعها لتوفير تجمع تخزين واحد. ثم يتم تقسيم تجمع التخزين هذا إلى وحدات تخزين متعددة، والتي يتم تقديمها إلى خوادم الحوسبة كأجهزة تخزين كتلة. يمكن لخوادم الحوسبة استخدام أجهزة تخزين الكتلة هذه كمساحة تخزين ثابتة لأحمال العمل الخاصة بها. يتم توفير كل مجموعة Azure Operator Nexus مع جهاز تخزين واحد تتم مشاركته عبر جميع أحمال عمل المستأجر.

يتم تمثيل جهاز التخزين في مثيل Azure Operator Nexus كمورد Azure. يحصل المشغلون على حق الوصول لعرض سماته مثل أي مورد Azure آخر.

فئات تخزين Kubernetes

يوفر مكدس Kubernetes لبرنامج Azure Operator Nexus نوعين من التخزين. يحددها المشغلون من خلال آلية Kubernetes StorageClass.

هام

لا يدعم Azure Operator Nexus وحدات التخزين المؤقتة. توصي Nexus باستخدام آليات تخزين وحدة التخزين الثابتة الموضحة في هذا المستند لجميع وحدات تخزين حمل العمل لأنها توفر أعلى مستويات الأداء والتوافر. يتم توفير جميع التخزين في Azure Operator Nexus بواسطة جهاز التخزين. لا يوجد دعم للتخزين الذي توفره أقراص الجهاز العارية.

StorageClass: nexus-volume

آلية التخزين الافتراضية، nexus-volume، هي الخيار المفضل لمعظم المستخدمين. يوفر أعلى مستويات الأداء والتوافر. ومع ذلك، لا يمكن مشاركة وحدات التخزين في وقت واحد عبر عقد عاملة متعددة. يمكن للمشغلين الوصول إلى وحدات التخزين هذه وإدارتها باستخدام واجهة برمجة تطبيقات 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 Kubernetes للوصول إلى نفس وحدة التخزين ومشاركتها بشكل متزامن. يتم دعم فئة التخزين المشتركة نيكزس بواسطة خدمة تخزين NFS. تتوفر خدمة تخزين NFS هذه (تجمع التخزين المحدود حاليا بحد أقصى 1 تيرابايت) لكل شبكة خدمة سحابية (CSN). يمكن لأي مجموعة Nexus Kubernetes متصلة ب CSN توفير وحدة تخزين ثابتة من تجمع التخزين المشترك هذا. يدعم Nexus-shared كلا من وضعي الوصول للقراءة والكتابة مرة واحدة (RWO) وقراءة كتابة العديد (RWX). ما يعنيه ذلك هو أن تطبيقات حمل العمل يمكنها الاستفادة من أي من أوضاع الوصول هذه للوصول إلى التخزين المشترك.

رسم تخطيطي يوضح كيف توفر العلاقة المشتركة وحدة تخزين لحمل العمل في مجموعة Nexus Kubernetes

الشكل: وحدة التخزين المشتركة ل Nexus

على الرغم من أن أداء وتوافر العلاقة المشتركة كافيان لمعظم التطبيقات، نوصي بأن تستخدم أحمال العمل ذات متطلبات الإدخال/الإخراج الثقيلة خيار nexus-volume للحصول على الأداء الأمثل.

قراءة الكتابة مرة واحدة (RWO)

في وضع القراءة والكتابة مرة واحدة (RWO)، يمكن تحميل وحدة التخزين المشتركة بين الروابط بواسطة عقدة واحدة فقط أو مطالبة واحدة في كل مرة. لا يزال وضع الوصول ReadWriteOnce يسمح لوحدات الجراب المتعددة بالوصول إلى وحدة التخزين عند تشغيل pods على نفس العقدة.

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)

في وضع Read Write Many (RWX)، يمكن تحميل وحدة التخزين المشتركة بين العلاقة من قبل عدة عقد أو مطالبات في نفس الوقت.

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

سيتم إنشاء PersistentVolumeClaim واحد لكل جراب من StatefulSet.

# 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) مع فئة التخزين المشتركة بين العلاقة

ينشئ البيان أدناه نشرا باستخدام PersistentVolumeClaim (PVC) باستخدام فئة التخزين المشتركة في وضع ReadWriteMany. تتم مشاركة PVC التي تم إنشاؤها من قبل جميع pods للتوزيع ويمكن استخدامها للقراءة والكتابة من قبلهم جميعا في وقت واحد.

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

بمجرد تطبيقها، ستكون هناك ثلاث نسخ متماثلة للنشر تشارك نفس 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>

يمكن ملاحظة من الإخراج أدناه أن جميع القرون تكتب في نفس 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

حالة جهاز التخزين

تعكس الخصائص التالية الحالة التشغيلية لأجهزة التخزين:

  • Status يشير إلى الحالة على أنها مشتقة من جهاز التخزين. يمكن أن تكون Availableالحالة أو Errorأو Provisioning.

  • Provisioning State يوفر حالة التوفير الحالية لأجهزة التخزين. يمكن أن تكون Succeededحالة التوفير أو Failedأو InProgress.

  • Capacity يوفر السعة الإجمالية والمستخدمة لأجهزة التخزين.

  • Remote Vendor Management يشير إلى ما إذا كانت إدارة المورد البعيد ممكنة أو معطلة لجهاز التخزين.

عمليات أجهزة التخزين

  • List Storage Appliances: سرد أجهزة التخزين في مجموعة الموارد المتوفرة أو الاشتراك.
  • إظهار جهاز التخزين: احصل على خصائص جهاز التخزين المتوفر.
  • تحديث جهاز التخزين: تحديث خصائص أو علامات جهاز التخزين المتوفر.
  • تمكين/تعطيل إدارة المورد البعيد لجهاز التخزين: تمكين أو تعطيل إدارة المورد عن بعد لجهاز التخزين المتوفر.

إشعار

لا يمكن للعملاء إنشاء أجهزة تخزين أو حذفها مباشرة. يتم إنشاء هذه الموارد فقط كإدراك لدورة حياة نظام المجموعة. يمنع التنفيذ طلبات الإنشاء أو الحذف من أي مستخدم، ويسمح فقط بعمليات الإنشاء أو الحذف الداخلية/المستندة إلى التطبيق.