جهاز تخزين 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
على الرغم من أن أداء وتوافر العلاقة المشتركة كافيان لمعظم التطبيقات، نوصي بأن تستخدم أحمال العمل ذات متطلبات الإدخال/الإخراج الثقيلة خيار 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: سرد أجهزة التخزين في مجموعة الموارد المتوفرة أو الاشتراك.
- إظهار جهاز التخزين: احصل على خصائص جهاز التخزين المتوفر.
- تحديث جهاز التخزين: تحديث خصائص أو علامات جهاز التخزين المتوفر.
- تمكين/تعطيل إدارة المورد البعيد لجهاز التخزين: تمكين أو تعطيل إدارة المورد عن بعد لجهاز التخزين المتوفر.
إشعار
لا يمكن للعملاء إنشاء أجهزة تخزين أو حذفها مباشرة. يتم إنشاء هذه الموارد فقط كإدراك لدورة حياة نظام المجموعة. يمنع التنفيذ طلبات الإنشاء أو الحذف من أي مستخدم، ويسمح فقط بعمليات الإنشاء أو الحذف الداخلية/المستندة إلى التطبيق.