استخدم برنامج تشغيل واجهة تخزين حاوية ملفات Azure (CSI) في خدمة Azure Kubernetes (AKS)
برنامج تشغيل Azure Files Container Storage Interface (CSI) هو برنامج تشغيل متوافق مع مواصفات CSI تستخدمه خدمة Azure Kubernetes (AKS) لإدارة دورة حياة مشاركات ملفات Azure. منظمة التضامن المسيحي الدولية هو معيار لفضح كتلة التعسفي وأنظمة تخزين الملفات لأعباء العمل في حاويات على Kubernetes.
من خلال اعتماد واستخدام CSI، يمكن لـ AKS الآن كتابة وتوزيع وتكرار المكونات الإضافية لكشف أنظمة التخزين الجديدة أو تحسين أنظمة التخزين الحالية في Kubernetes. يؤدي استخدام برامج تشغيل CSI في AKS إلى تجنب الاضطرار إلى لمس التعليمات البرمجية الأساسية لـ Kubernetes وانتظار دورات الإصدار الخاصة به.
لإنشاء مجموعة AKS باستخدام دعم برامج تشغيل CSI، قم بمراجعة تمكين برامج تشغيل CSI على AKS.
إشعار
تشير برامج التشغيل في شجرة إلى برامج تشغيل التخزين الحالية التي هي جزء من تعليمة برمجية لـ Kubernetes أساسية مقابل برامج تشغيل CSI الجديدة، وهي مكونات إضافية.
ميزات برنامج تشغيل Azure Files CSI الجديدة
بالإضافة إلى ميزات برنامج التشغيل الأصلي داخل الشجرة، يقوم برنامج تشغيل Azure Files CSI بدعم الميزات الجديدة التالية:
- نِظام ملفات الشبكة (NFS) الإصدار 4.1
- نقطة النهاية الخاصة
- إنشاء تحميل كبير من مشاركات الملفات بالتوازي.
استخدم وحدة تخزين ثابتة مع ملفات Azure
تمثل وحدة التخزين الثابتة (PV) قطعة تخزين يتم توفيرها للاستخدام مع قرون Kubernetes. يمكن استخدام PV من قبل واحد أو العديد من القرون ويمكن توفيرها ديناميكيا أو ثابتا. إذا كانت الحاويات المتعددة بحاجة إلى وصول متزامن إلى نفس وحدة التخزين، فيمكنك استخدام ملفات Azure للاتصال باستخدام بروتوكول Server Message Block (SMB) أو بروتوكول NFS. توضح لك هذه المقالة كيفية إنشاء مشاركة لملفات Azure بشكل ديناميكي لاستخدامها من قبل عدة مجموعات في مجموعة AKS. للتوفير الثابت، راجع إنشاء واستخدام وحدة تخزين يدويًا باستخدام مشاركة ملفات Azure .
إشعار
يرجى العلم أن برنامج تشغيل Azure File CSI يسمح فقط بتحميل مشاركات ملفات SMB باستخدام المصادقة المستندة إلى المفتاح (NTLM v2)، وبالتالي لا يدعم الحد الأقصى لملف تعريف الأمان لإعدادات مشاركة ملف Azure. من ناحية أخرى، لا يتطلب تحميل مشاركات ملفات NFS مصادقة تستند إلى المفتاح.
مع مشاركات Azure Files، لا يوجد حد لعدد الملفات التي يمكن تحميلها على عقدة.
لمزيد من المعلومات حول وحدات تخزين Kubernetes، راجع خيارات التخزين للتطبيقات في AKS .
قم بإنشاء Azure Files PVs ديناميكيًا باستخدام فئات التخزين المبنية
يتم استخدام فئة التخزين لتحديد كيفية إنشاء مشاركة ملف Azure. يتم إنشاء حساب تخزين تلقائيا في مجموعة موارد العقدة للاستخدام مع فئة التخزين للاحتفاظ بمشاركة ملفات Azure. اختر أحد وحدات SKU الخاصة بتكرار تخزين Azure لـ skuName:
- Standard_LRS : تخزين قياسي محلي إضافي
- Standard_GRS : تخزين قياسي متكرر جغرافيًا
- Standard_ZRS : مساحة تخزين احتياطية قياسية
- Standard_RAGRS : تخزين قياسي مكرر جغرافيًا يمكن الوصول إليه للقراءة
- Standard_RAGRS : مساحة تخزين زائدة عن الحاجة للمنطقة الجغرافية للوصول للقراءة
- Premium_LRS : مساحة تخزين متميزة وفائضة محليًا
- Premium_ZRS- مساحة تخزين ممتازة زائدة عن الحاجة
إشعار
تدعم Azure Files مشاركات ملفات Azure Premium. الحد الأدنى لسعة مشاركة الملف هو 100 جيبي بايت. نوصي باستخدام مشاركات ملفات Azure Premium بدلا من مشاركات الملفات القياسية لأن مشاركات الملفات المتميزة تقدم أداء أعلى ودعم قرص زمن انتقال منخفض لأحمال العمل كثيفة الإدخال/الإخراج.
عند استخدام برامج تشغيل التخزين CSI على AKS، هناك اثنان إضافيان مضمنان StorageClasses
يستخدمان برامج تشغيل تخزين Azure Files CSI. يتم إنشاء فئات تخزين CSI الأخرى باستخدام الكتلة جنبًا إلى جنب مع فئات التخزين الافتراضية داخل الشجرة.
azurefile-csi
: يستخدم Azure Standard Storage لإنشاء مشاركة ملف Azure.azurefile-csi-premium
: يستخدم Azure Premium Storage لإنشاء مشاركة ملف Azure.
يضمن نهج الاسترداد على فئتي التخزين حذف مشاركة ملفات Azure الأساسية عند حذف PV المعني. تقوم فئات التخزين أيضًا بتكوين مشاركات الملف لتكون قابلة للتوسيع، عليك فقط تحرير مطالبة وحدة التخزينالدائمة (PVC) بالحجم الجديد.
لاستخدام فئات التخزين هذه، قم بإنشاء PVC والحجرة الخاصة التي تشير إليها واستخدمها. يتم استخدام PVC لتوفير التخزين تلقائيا استنادا إلى فئة تخزين. يمكن ل PVC استخدام إحدى فئات التخزين التي تم إنشاؤها مسبقا أو فئة تخزين معرفة من قبل المستخدم لإنشاء مشاركة ملفات Azure ل SKU والحجم المطلوبين. عند إنشاء تعريف جراب، يتم تحديد PVC لطلب التخزين المطلوب.
قم بإنشاء نموذج PVC وحاوية تقوم بطباعة التاريخ الحالي في outfile
عن طريق تشغيل أوامر kubectl apply:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/pvc-azurefile-csi.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/nginx-pod-azurefile.yaml
إخراج الأمر يشبه المثال التالي:
persistentvolumeclaim/pvc-azurefile created
pod/nginx-azurefile created
بعد أن تكون الكبسولة في حالة التشغيل، يمكنك التحقق من أن مشاركة الملف قد تم تحميلها بشكل صحيح عن طريق تشغيل الأمر التالي والتحقق من احتواء الإخراج على outfile
:
kubectl exec nginx-azurefile -- ls -l /mnt/azurefile
إخراج الأمر يشبه المثال التالي:
total 29
-rwxrwxrwx 1 root root 29348 Aug 31 21:59 outfile
إنشاء فئة تخزين مخصصة
تناسب فئات التخزين الافتراضية السيناريوهات الأكثر شيوعا، ولكن ليس كلها. بالنسبة لبعض الحالات، قد ترغب في تخصيص فئة التخزين الخاصة بك مع المعلمات الخاصة بك. على سبيل المثال، استخدم البيان التالي لتكوين mountOptions
مشاركة الملف.
القيمة الافتراضية لـ file Mode وdir Mode هي 0777 لمشاركات الملفات المحملة على Kubernetes. يمكنك تحديد خيارات التحميل المختلفة على كائن فئة التخزين.
قم بإنشاء ملف باسم azure-file-sc.yaml
، والصق مثال البيان التالي:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: my-azurefile
provisioner: file.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- dir_mode=0640
- file_mode=0640
- uid=0
- gid=0
- mfsymlinks
- cache=strict # https://linux.die.net/man/8/mount.cifs
- nosharesock
parameters:
skuName: Standard_LRS
قم بإنشاء فئة التخزين باستخدام الأمر kubectl apply:
kubectl apply -f azure-file-sc.yaml
إخراج الأمر يشبه المثال التالي:
storageclass.storage.k8s.io/my-azurefile created
يدعم برنامج تشغيل Azure Files CSI إنشاء لقطات لوحدات التخزين الثابتة ومشاركات الملفات الأساسية.
أنشئ فئة لقطة وحدة التخزين باستخدام الأمر kubectl apply :
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yaml
إخراج الأمر يشبه المثال التالي:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc created
أنشئ لقطة وحدة تخزين من PVC أنشأناها ديناميكيًا في بداية هذا البرنامج التعليمي ، pvc-azurefile
.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yaml
إخراج الأمر يشبه المثال التالي:
volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot created
قم بالتحقق من إنشاء اللقطة بشكل صحيح عن طريق تشغيل الأمر التالي:
kubectl describe volumesnapshot azurefile-volume-snapshot
إخراج الأمر يشبه المثال التالي:
Name: azurefile-volume-snapshot
Namespace: default
Labels: <none>
Annotations: API Version: snapshot.storage.k8s.io/v1beta1
Kind: VolumeSnapshot
Metadata:
Creation Timestamp: 2020-08-27T22:37:41Z
Finalizers:
snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
Generation: 1
Resource Version: 955091
Self Link: /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot
UID: c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
Spec:
Source:
Persistent Volume Claim Name: pvc-azurefile
Volume Snapshot Class Name: csi-azurefile-vsc
Status:
Bound Volume Snapshot Content Name: snapcontent-c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
Ready To Use: false
Events: <none>
تغيير حجم وحدة تخزين ثابتة
يمكنك طلب حجم أكبر لـ PVC. تحرير الكائن PVC، وتحديد حجم أكبر. يؤدي هذا التغيير إلى توسيع وحدة التخزين الأساسية التي تدعم PV.
إشعار
لا يتم إنشاء PV جديدة لتلبية المطالبة. بدلا من ذلك، يتم حجم وحدة تخزين موجودة.
تقليص وحدات التخزين الثابتة غير مدعوم حاليا.
في AKS، تدعم فئة التخزين azurefile-csi
المدمجة التوسيع بالفعل، لذا استخدم PVC الذي تم إنشاؤه مسبقًا مع فئة التخزين هذه . طلب PVC مشاركة ملف 100 GiB. يمكننا أن نؤكد ذلك عن طريق تشغيل:
kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
إخراج الأمر يشبه المثال التالي:
Filesystem Size Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770 100G 128K 100G 1% /mnt/azurefile
قم بتوسيع PVC عن طريق زيادة الحقل spec.resources.requests.storage
:
kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'
إخراج الأمر يشبه المثال التالي:
persistentvolumeclaim/pvc-azurefile patched
تحقق من أن كلاً من PVC ونظام الملفات داخل الكبسولة يظهران الحجم الجديد:
kubectl get pvc pvc-azurefile
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-azurefile Bound pvc-5e5d9980-da38-492b-8581-17e3cad01770 200Gi RWX azurefile-csi 64m
kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
Filesystem Size Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770 200G 128K 200G 1% /mnt/azurefile
استخدام وحدة تخزين ثابتة مع تخزين ملفات Azure الخاصة (نقطة نهاية خاصة)
إذا كانت موارد Azure Files محمية بنقطة نهاية خاصة، فيجب عليك إنشاء فئة التخزين الخاصة بك. تأكد من تكوين إعدادات DNS لحل عنوان IP لنقطة النهاية الخاصة إلى FQDN سلسلة الاتصال. تخصيص المعلمات التالية:
resourceGroup
مجموعة الموارد التي يتم نشر حساب التخزين فيها.storageAccount
: اسم حساب التخزين.server
: FQDN لنقطة النهاية الخاصة لحساب التخزين.
أنشئ ملفا باسم private-azure-file-sc.yaml
، ثم الصق بيان المثال التالي في الملف. استبدل قيم <resourceGroup>
و<storageAccountName>
.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: private-azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
resourceGroup: <resourceGroup>
storageAccount: <storageAccountName>
server: <storageAccountName>.file.core.windows.net
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict # https://linux.die.net/man/8/mount.cifs
- nosharesock # reduce probability of reconnect race
- actimeo=30 # reduce latency for metadata-heavy workload
إنشاء فئة التخزين باستخدام kubectl apply
الأمر :
kubectl apply -f private-azure-file-sc.yaml
إخراج الأمر يشبه المثال التالي:
storageclass.storage.k8s.io/private-azurefile-csi created
أنشئ ملفا باسم private-pvc.yaml
، ثم الصق بيان المثال التالي في الملف:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: private-azurefile-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: private-azurefile-csi
resources:
requests:
storage: 100Gi
قم بإنشاء PVC باستخدام الأمر kubectl apply :
kubectl apply -f private-pvc.yaml
مشاركات ملفات NFS
تدعم ملفات Azure بروتوكول NFS v4.1 . يوفر لك دعم الإصدار 4.1 من NFS لملفات Azure نظام ملفات NFS مُدار بالكامل كخدمة مبنية على نظام أساسي للتخزين مرن ومتوفر للغاية وموزع للغاية.
تم تحسين هذا الخيار لأحمال عمل الوصول العشوائي مع تحديثات البيانات الموضعية ويوفر دعمًا كاملاً لنظام ملفات POSIX. يوضح لك هذا القسم كيفية استخدام مشاركات NFS مع برنامج تشغيل Azure File CSI على مجموعة AKS.
المتطلبات الأساسية
- تتم إضافة هوية وحدة التحكم في نظام مجموعة AKS (أي اسم مجموعة AKS) إلى دور المساهم على VNet وNetworkSecurityGroup.
- يجب إضافة كيان خدمة نظام مجموعة AKS أو هوية الخدمة المدارة (MSI) إلى دور المساهم في حساب التخزين.
إشعار
يمكنك استخدام نقطة نهاية خاصة بدلا من السماح بالوصول إلى VNet المحددة.
تحسين خيارات حجم القراءة والكتابة
يوفر هذا القسم معلومات حول كيفية التعامل مع ضبط الأداء NFS مع برنامج تشغيل Azure Files CSI مع خيارات rsize وwsize. تحدد خيارات rsize وwsize الحد الأقصى لحجم النقل لعملية NFS. إذا لم يتم تحديد rsize أو wsize عند التحميل، يتفاوض العميل والخادم على أكبر حجم يدعمه الاثنين. حاليا، تدعم كل من ملفات Azure NetApp وتوزيعات Linux الحديثة أحجام القراءة والكتابة بحجم 1,048,576 بايت (1 ميبي بايت).
يعتمد الأداء الأمثل على اتصال فعال بين العميل والخادم. يمكن أن تؤدي زيادة قيم حجم خيار القراءة والكتابة أو تقليلها إلى تحسين أداء NFS. الحجم الافتراضي لحزم القراءة/الكتابة المنقولة بين العميل والخادم هو 8 كيلوبايت للإصدار 2 من NFS، و32 كيلوبايت للإصدارين 3 و4 من NFS. قد تكون هذه الإعدادات الافتراضية كبيرة جدا أو صغيرة جدا. قد يؤدي تقليل rsize وwsize إلى تحسين أداء NFS في شبكة ازدحام عن طريق إرسال حزم أصغر لكل طلب قراءة وكتابة NFS. ومع ذلك، يمكن أن يزيد هذا من عدد الحزم اللازمة لإرسال البيانات عبر الشبكة، ما يزيد من إجمالي نسبة استخدام الشبكة واستخدام وحدة المعالجة المركزية على العميل والخادم.
من المهم إجراء الاختبار للعثور على rsize وwsize الذي يحافظ على نقل الحزمة efficent، حيث لا يقلل من معدل النقل ويزيد من زمن الانتقال.
لمزيد من المعلومات حول تحسين rsize وwsize، راجع أفضل ممارسات خيارات تحميل Linux NFS لملفات Azure NetApp.
على سبيل المثال، لتكوين rsize وwsize كحد أقصى من 256-KiB، قم بتكوين mountOptions
في فئة التخزين كما يلي:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
protocol: nfs
mountOptions:
- nconnect=4
- noresvport
- actimeo=30
- rsize=262144
- wsize=262144
أنشئ فئة تخزين مشاركة ملف NFS
قم بإنشاء ملف باسمnfs-sc.yaml
وانسخ البيان أدناه. للحصول على قائمة بخيارات التحميل المدعومة mountOptions
، راجع خيارات تحميل NFS.
إشعار
vers
، minorversion
sec
يتم تكوينها بواسطة برنامج تشغيل Azure File CSI. تحديد قيمة في البيان الخاص بك لهذه الخصائص غير مدعوم.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
protocol: nfs
mountOptions:
- nconnect=4
- noresvport
- actimeo=30
بعد تحرير الملف وحفظه، أنشئ فئة التخزين باستخدام الأمر kubectl apply:
kubectl apply -f nfs-sc.yaml
إخراج الأمر يشبه المثال التالي:
storageclass.storage.k8s.io/azurefile-csi-nfs created
إنشاء عملية نشر مع مشاركة ملف مدعومة من NFS
يمكنك نشر مثال مجموعة ذات حالة توفر الطوابع الزمنية في ملف data.txt
باستخدام الأمر kubectl apply :
kubectl apply -f
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-azurefile
labels:
app: nginx
spec:
podManagementPolicy: Parallel # default is OrderedReady
serviceName: statefulset-azurefile
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: statefulset-azurefile
image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
command:
- "/bin/bash"
- "-c"
- set -euo pipefail; while true; do echo $(date) >> /mnt/azurefile/outfile; sleep 1; done
volumeMounts:
- name: persistent-storage
mountPath: /mnt/azurefile
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: nginx
volumeClaimTemplates:
- metadata:
name: persistent-storage
spec:
storageClassName: azurefile-csi-nfs
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 100Gi
إخراج الأمر يشبه المثال التالي:
statefulset.apps/statefulset-azurefile created
تحقق من صحة محتويات المجلد عن طريق تشغيل الأمر التالي:
kubectl exec -it statefulset-azurefile-0 -- df -h
إخراج الأمر يشبه المثال التالي:
Filesystem Size Used Avail Use% Mounted on
...
/dev/sda1 29G 11G 19G 37% /etc/hosts
accountname.file.core.windows.net:/accountname/pvc-fa72ec43-ae64-42e4-a8a2-556606f5da38 100G 0 100G 0% /mnt/azurefile
...
إشعار
لاحظ أنه نظرا لوجود مشاركة ملف NFS في حساب Premium، فإن الحد الأدنى لحجم مشاركة الملف هو 100 جيبي بايت. إذا قمت بإنشاء PVC بحجم تخزين صغير، فقد تواجه خطأ مشابهًا لما يلي: فشل في إنشاء مشاركة ملف ... الحجم (5) .....
حاويات Windows
يدعم برنامج تشغيل Azure Files CSI أيضًا عُقد وحاويات Windows. لاستخدام حاويات Windows، اتبع التشغيل السريع لحاويات Windows لإضافة تجمع عقدة Windows.
بعد أن يكون لديك تجمع عقدة Windows، استخدم فئات التخزين المضمنة مثلazurefile-csi
أو أنشئ مجموعة مخصصة. يمكنك توزيع نموذج لمجموعة الحالة المستندة إلى Windows والتي تحفظ الطوابع الزمنية في ملف data.txt
عن طريق تشغيل الأمر kubectl apply:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yaml
إخراج الأمر يشبه المثال التالي:
statefulset.apps/busybox-azurefile created
تحقق من صحة محتويات المجلد عن طريق تشغيل الأمر kubectl exec التالي:
kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux/MacOS Bash
kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell/CMD
إخراج الأوامر يشبه المثال التالي:
2020-08-27 22:11:01Z
2020-08-27 22:11:02Z
2020-08-27 22:11:04Z
(...)
الخطوات التالية
- لمعرفة كيفية استخدام برامج تشغيل CSI لأقراص Azure، راجع استخدام أقراص Azure مع برامج تشغيل CSI .
- لمعرفة كيفية استخدام برنامج تشغيل CSI لتخزين Azure Blob، راجع استخدام تخزين Azure Blob مع برنامج تشغيل جهاز CSI.
- لمزيد من المعلومات حول أفضل ممارسات التخزين، راجع أفضل ممارسات التخزين والنسخ الاحتياطية في خدمة Azure Kubernetes .
Azure Kubernetes Service