إنشاء وحدة تخزين واستخدامها مع ملفات Azure في خدمة Azure Kubernetes (AKS)
تمثل وحدة التخزين الثابتة جزءًا من التخزين الذي تم توفيره للاستخدام مع كبسولات Kubernetes. يمكنك استخدام وحدة تخزين ثابتة مع واحد أو العديد من القرون، ويمكن توفيرها ديناميكيا أو ثابتا. إذا احتاجت العديد من الحاويات إلى وصول متزامن إلى نفس وحدة التخزين، فيمكنك استخدام ملفات Azure للاتصال باستخدام بروتوكول Server Message Block (SMB). توضح هذه المقالة كيفية إنشاء مشاركة ملف Azure ديناميكيا لاستخدامها من قبل عدة pods في نظام مجموعة Azure Kubernetes Service (AKS).
توضح لك هذه المقالة كيفية:
- العمل مع وحدة تخزين ثابتة ديناميكية (PV) عن طريق تثبيت برنامج تشغيل واجهة تخزين الحاوية (CSI) وإنشاء مشاركة ملف Azure واحدة أو أكثر بشكل ديناميكي لإرفاقها بحاوية.
- العمل مع PV ثابت عن طريق إنشاء مشاركة ملف Azure واحدة أو أكثر، أو استخدام مشاركة موجودة وإرفاقها ب pod.
لمزيد من المعلومات حول وحدات تخزين Kubernetes، راجع خيارات التخزين للتطبيقات في AKS .
قبل البدء
- تحتاج إلى حساب تخزين Azure.
- تأكد من تثبيت الإصدار 2.0.59 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل
az --version
للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI. - عند الاختيار بين مشاركات الملفات القياسية والمميزة، من المهم فهم نموذج التوفير ومتطلبات نمط الاستخدام المتوقع الذي تخطط لتشغيله على Azure Files. لمزيد من المعلومات، راجع اختيار مستوى أداء ملفات Azure استنادا إلى أنماط الاستخدام.
توفير وحدة تخزين ديناميكيا
يوفر هذا القسم إرشادات لمسؤولي نظام المجموعة الذين يرغبون في توفير وحدة تخزين ثابتة واحدة أو أكثر تتضمن تفاصيل مشاركة واحدة أو أكثر على ملفات Azure. تستخدم مطالبة وحدة التخزين الثابتة (PVC) كائن فئة التخزين لتوفير مشاركة ملف Azure Files ديناميكيا.
معلمات فئة التخزين ل PersistentVolumes الديناميكية
يتضمن الجدول التالي معلمات يمكنك استخدامها لتعريف فئة تخزين مخصصة ل PersistentVolumeClaim.
الاسم | المعنى | القيمة المتاحة | إلزامي | القيمة الافتراضية |
---|---|---|---|---|
accountAccessTier | طبقة الوصول لحساب التخزين | يمكن للحساب القياسي اختيار Hot أو Cool ، ويمكن لحساب Premium اختيار Premium فقط . |
لا | أجوف. استخدم الإعداد الافتراضي أنواع حسابات تخزين مختلفة. |
حصص الحساب | تقييد الحصة النسبية للحساب. يمكنك تحديد حد أقصى للحصة النسبية بالجيجابايت (102400 غيغابايت بشكل افتراضي). إذا تجاوز الحساب الحصة النسبية المحددة، يتخطى برنامج التشغيل تحديد الحساب. | لا | 102400 |
|
allowBlobPublicAccess | السماح بالوصول العام أو عدم السماح به لجميع الكائنات الثنائية كبيرة الحجم أو الحاويات لحساب التخزين الذي أنشأه برنامج التشغيل. | true أو false |
لا | false |
disableDeleteRetentionPolicy | حدد ما إذا كان سيتم تعطيل DeleteRetentionPolicy لحساب التخزين الذي تم إنشاؤه بواسطة برنامج التشغيل. | true أو false |
لا | false |
تمكينLargeFileShares | حدد ما إذا كنت تريد استخدام حساب تخزين مع تمكين مشاركات الملفات الكبيرة أم لا. إذا تم تعيين هذه العلامة إلى true ولم يكن حساب تخزين مع مشاركات الملفات الكبيرة الممكنة موجودا، يتم إنشاء حساب تخزين جديد مع تمكين مشاركات الملفات الكبيرة. يجب استخدام هذه العلامة مع وحدة sku القياسية حيث تم تمكين خيار حسابات التخزين التي تم إنشاؤها باستخدام Premium sku largeFileShares بشكل افتراضي. |
true أو false |
لا | true |
اسم المجلد | حدد اسم المجلد في مشاركة ملف Azure. | اسم المجلد الموجود في مشاركة ملف Azure. | لا | إذا لم يكن اسم المجلد موجودا في مشاركة الملف، يفشل التحميل. |
getLatestAccount | تحديد ما إذا كان يجب الحصول على أحدث مفتاح حساب استنادا إلى وقت الإنشاء. يحصل برنامج التشغيل هذا على المفتاح الأول بشكل افتراضي. | true أو false |
لا | false |
مكان | حدد منطقة Azure لحساب تخزين Azure. | على سبيل المثال، eastus |
لا | إذا كان فارغا، يستخدم برنامج التشغيل نفس اسم الموقع مثل نظام مجموعة AKS الحالي. |
علامات المطابقة | مطابقة العلامات عندما يحاول برنامج التشغيل العثور على حساب تخزين مناسب. | true أو false |
لا | false |
نوع نقطة نهاية الشبكة | حدد نوع نقطة نهاية الشبكة لحساب التخزين الذي تم إنشاؤه بواسطة برنامج التشغيل. إذا privateEndpoint تم تحديدها، يتم إنشاء نقطة نهاية خاصة لحساب التخزين. بالنسبة للحالات الأخرى، يتم إنشاء نقطة نهاية خدمة بشكل افتراضي. |
"",privateEndpoint |
لا | "" |
البروتوكول | حدد بروتوكول مشاركة الملف. | smb , nfs |
لا | smb |
يتطلب تشفير الأشعة تحت الحمراء | حدد ما إذا كانت الخدمة تطبق طبقة ثانوية من التشفير باستخدام مفاتيح مدارة للنظام الأساسي للبيانات الثابتة لحساب التخزين الذي أنشأه برنامج التشغيل أم لا. | true أو false |
لا | false |
resourceGroup | حدد مجموعة الموارد لأقراص Azure. | اسم مجموعة الموارد الحالية | لا | إذا كان فارغا، يستخدم برنامج التشغيل نفس اسم مجموعة الموارد مثل نظام مجموعة AKS الحالي. |
حددRandomMatchingAccount | تحديد ما إذا كنت تريد تحديد حساب مطابق عشوائيا. بشكل افتراضي، يحدد برنامج التشغيل دائما أول حساب مطابق بترتيب أبجدي (ملاحظة: يستخدم برنامج التشغيل هذا ذاكرة التخزين المؤقت للبحث في الحساب، مما يؤدي إلى توزيع غير متساو لإنشاء الملفات عبر حسابات متعددة). | true أو false |
لا | false |
الخادم | حدد عنوان خادم حساب تخزين Azure. | عنوان الخادم الموجود، على سبيل المثال accountname.privatelink.file.core.windows.net . |
لا | إذا كان فارغا، يستخدم برنامج التشغيل عنوان حساب سحابة افتراضي accountname.file.core.windows.net أو آخر ذي سيادة. |
shareAccessTier | طبقة الوصول لمشاركة الملفات | يمكن لحساب v2 للأغراض العامة الاختيار بين TransactionOptimized (افتراضي) Hot و و.Cool نوع حساب التخزين المتميز لمشاركات الملفات فقط. |
لا | أجوف. استخدم الإعداد الافتراضي أنواع حسابات تخزين مختلفة. |
shareName | حدد اسم مشاركة ملف Azure. | اسم مشاركة ملف Azure الحالي أو الجديد. | لا | إذا كان فارغا، يقوم برنامج التشغيل بإنشاء اسم مشاركة ملف Azure. |
shareNamePrefix | حدد بادئة اسم مشاركة ملف Azure التي تم إنشاؤها بواسطة برنامج التشغيل. | يمكن أن يحتوي اسم المشاركة فقط على أحرف صغيرة وأرقام وواصلات وطول يجب أن يكون أقل من 21 حرفا. | لا | |
skuName | نوع حساب تخزين ملفات Azure (الاسم المستعار: storageAccountType ) |
Standard_LRS ، Standard_ZRS ، Standard_GRS ، Standard_RAGRS ، Standard_RAGZRS ،Premium_LRS ، Premium_ZRS |
لا | StandardSSD_LRS الحد الأدنى لحجم مشاركة الملف لنوع حساب Premium هو 100 غيغابايت. نوع حساب ZRS مدعوم في مناطق محدودة. تدعم مشاركة ملف NFS نوع حساب Premium فقط. |
storageAccount | حدد اسم حساب تخزين Azure. | storageAccountName | -لا | عند عدم توفير اسم حساب تخزين معين، سيبحث برنامج التشغيل عن حساب تخزين مناسب يطابق إعدادات الحساب داخل نفس مجموعة الموارد. إذا فشل في العثور على حساب تخزين مطابق، فسينشئ حسابا جديدا. ومع ذلك، إذا تم تحديد اسم حساب تخزين، يجب أن يكون حساب التخزين موجودا بالفعل. |
storageEndpointSuffix | حدد لاحقة نقطة نهاية تخزين Azure. | core.windows.net ، core.chinacloudapi.cn ، إلخ. |
لا | إذا كان فارغا، يستخدم برنامج التشغيل لاحقة نقطة نهاية التخزين الافتراضية وفقا لبيئة السحابة. على سبيل المثال، core.windows.net |
العلامات | يتم إنشاء العلامات في حساب تخزين جديد. | تنسيق العلامة: 'foo=aaa,bar=bbb' | لا | "" |
--- | المعلمات التالية هي فقط لبروتوكول SMB | --- | --- | |
subscriptionID | حدد معرف اشتراك Azure حيث يتم إنشاء مشاركة ملف Azure. | مُعرف اشتراكك في Azure | لا | إذا لم يكن فارغاً، فيجب تقديم resourceGroup . |
storeAccountKey | حدد ما إذا كنت تريد تخزين مفتاح الحساب إلى سر Kubernetes. | true أو false false يعني أن برنامج التشغيل يستخدم هوية kubelet للحصول على مفتاح الحساب. |
لا | true |
secretName | حدد اسمًا سريًا لتخزين مفتاح الحساب. | لا | ||
secretNamespace | حدد مساحة اسم البيانات السرية لتخزين مفتاح الحساب. ملاحظة: إذا secretNamespace لم يتم تحديد، يتم إنشاء السر في نفس مساحة الاسم مثل pod. |
default ،kube-system ، وما إلى ذلك. |
لا | مساحة اسم PVC، على سبيل المثال csi.storage.k8s.io/pvc/namespace |
استخدام واجهة برمجة التطبيقات الخاصة بDataPlane | حدد ما إذا كنت تريد استخدام واجهة برمجة تطبيقات مستوى البيانات لإنشاء/حذف/تغيير حجم مشاركة الملف، مما قد يحل مشكلة تقييد واجهة برمجة تطبيقات SRP لأن واجهة برمجة تطبيقات مستوى البيانات ليس لها حد تقريبا، بينما ستفشل عند وجود جدار حماية أو إعدادات Vnet على حساب التخزين. | true أو false |
لا | false |
--- | المعلمات التالية مخصصة فقط لبروتوكول NFS | --- | --- | |
mountPermissions | أذونات المجلد الذي تم تحميله. الافتراضي هو 0777 . إذا تم تعيينه إلى 0 ، فلن يعمل chmod برنامج التشغيل بعد التحميل |
0777 |
لا | |
rootSquashType | حدد سلوك سحق الجذر على المشاركة. الإعداد الافتراضي هو NoRootSquash |
AllSquash ، ، NoRootSquash RootSquash |
لا | |
--- | المعلمات التالية هي لإعداد VNet فقط. على سبيل المثال، NFS، نقطة نهاية خاصة | --- | --- | |
fsGroupChangePolicy | يشير إلى كيفية تغيير برنامج التشغيل لملكية وحدة التخزين. يتم تجاهل الجراب securityContext.fsGroupChangePolicy . |
OnRootMismatch (افتراضي)، Always ، None |
لا | OnRootMismatch |
subnetName | اسم الشبكة الفرعية | اسم الشبكة الفرعية الموجودة لعقدة العامل. | لا | إذا كان فارغًا، يستخدم برنامج التشغيل القيمة subnetName في ملف تكوين سحابة Azure. |
vnetName | اسم الشبكة الظاهرية | اسم الشبكة الظاهرية الموجودة. | لا | إذا كان فارغًا، يستخدم برنامج التشغيل القيمة vnetName في ملف تكوين سحابة Azure. |
vnetResourceGroup | حدد مجموعة موارد VNet حيث يتم تعريف الشبكة الظاهرية. | اسم مجموعة الموارد الموجودة. | لا | إذا كان فارغًا، يستخدم برنامج التشغيل القيمة vnetResourceGroup في ملف تكوين سحابة Azure. |
أنشئ فئة تخزين
تحدد فئات التخزين كيفية إنشاء مشاركة ملف Azure. يتم إنشاء حساب تخزين تلقائيا في مجموعة موارد العقدة للاستخدام مع فئة التخزين للاحتفاظ بمشاركة ملف Azure Files. اختر وحدات SKU التالية لتكرار تخزين Azure ل skuName
:
Standard_LRS
: تخزين قياسي مكرر محليا (LRS)Standard_GRS
: تخزين قياسي متكرر جغرافيا (GRS)Standard_ZRS
: التخزين المتكرر للمنطقة القياسية (ZRS)Standard_RAGRS
: التخزين المتكرر جغرافيا للوصول للقراءة القياسي (RA-GRS)Premium_LRS
: التخزين المتكرر محليا المتميز (LRS)Premium_ZRS
: التخزين المتكرر للمنطقة المتميزة (ZRS)
إشعار
الحد الأدنى لمشاركة الملفات المتميزة هو 100غيغابايت.
لمزيد من المعلومات حول فئات التخزين Kubernetes لملفات Azure، راجع فئات تخزين Kubernetes.
إنشاء ملف مسمى
azure-file-sc.yaml
ونسخه في بيان تطبيق المثال التالي. لمزيد من المعلومات حولmountOptions
، راجع قسم خيارات التحميل.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: my-azurefile provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21 allowVolumeExpansion: true mountOptions: - dir_mode=0777 - file_mode=0777 - uid=0 - gid=0 - mfsymlinks - cache=strict - actimeo=30 - nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks parameters: skuName: Premium_LRS
إنشاء فئة التخزين باستخدام
kubectl apply
الأمر .kubectl apply -f azure-file-sc.yaml
إنشاء مطالبة وحدة تخزين ثابتة
تستخدم مطالبة وحدة التخزين الدائمة (PVC) كائن فئة التخزين لتوفير مشاركة ملف Azure بشكل ديناميكي. يمكنك استخدام YAML التالي لإنشاء مطالبة وحدة تخزين ثابتة بحجم 100 غيغابايت مع وصول ReadWriteMany . لمزيد من المعلومات حول أوضاع الوصول، راجع وحدة تخزين Kubernetes الثابتة.
قم بإنشاء ملف باسم
azure-file-pvc.yaml
وانسخه في YAML التالي. تأكد منstorageClassName
تطابق فئة التخزين التي أنشأتها في الخطوة السابقة.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-azurefile spec: accessModes: - ReadWriteMany storageClassName: my-azurefile resources: requests: storage: 100Gi
إشعار
إذا كنت تستخدم
Premium_LRS
SKU لفئة التخزين الخاصة بك، يجب أن تكون100Gi
القيمة الدنيا لstorage
.إنشاء مطالبة وحدة التخزين الدائمة باستخدام
kubectl apply
الأمر .kubectl apply -f azure-file-pvc.yaml
بمجرد الانتهاء، يتم إنشاء مشاركة الملف. يتم أيضًا إنشاء بيانات Kubernetes سرية يتضمن معلومات الاتصال وبيانات الاعتماد. يمكنك استخدام
kubectl get
الأمر لعرض حالة PVC:kubectl get pvc my-azurefile
إخراج الأمر يشبه المثال التالي:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-azurefile Bound pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477 100Gi RWX my-azurefile 5m
استخدم الحجم الثابت
ينشئ YAML التالي جراب يستخدم مطالبة وحدة التخزين الثابتة my-azurefile لتحميل مشاركة ملف ملفات Azure في مسار /mnt/azure . بالنسبة لحاويات Windows Server، حدد mountPath
استخدام اصطلاح مسار Windows، مثل 'D:'.
قم بإنشاء ملف باسم
azure-pvc-files.yaml
وانسخه في ملف YAML التالي. تأكد منclaimName
تطابق PVC الذي قمت بإنشائه في الخطوة السابقة.kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: /mnt/azure name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: my-azurefile
إنشاء الجراب باستخدام
kubectl apply
الأمر .kubectl apply -f azure-pvc-files.yaml
لديك الآن جراب قيد التشغيل مع مشاركة ملف ملفات Azure المثبتة في دليل /mnt/azure . يمكن رؤية هذا التكوين عند فحص الجراب الخاص بك باستخدام
kubectl describe
الأمر . يظهر إخراج المثال المكثف التالي وحدة التخزين المثبتة في الحاوية.Containers: mypod: Container ID: docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e Image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine Image ID: docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424 State: Running Started: Fri, 01 Mar 2019 23:56:16 +0000 Ready: True Mounts: /mnt/azure from volume (rw) /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro) [...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: my-azurefile ReadOnly: false [...]
خيارات التحميل
القيمة الافتراضية ل fileMode
و dirMode
هي 0777 لإصدارات Kubernetes 1.13.0 وما فوق. إذا كنت تقوم بإنشاء وحدة التخزين الثابتة ديناميكيا باستخدام فئة تخزين، يمكنك تحديد خيارات التحميل على كائن فئة التخزين. لمزيد من المعلومات، راجع خيارات التحميل. المثال التالي يعين 0777:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
- actimeo=30
- nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
skuName: Premium_LRS
استخدام علامات Azure
لمزيد من المعلومات حول استخدام علامات Azure، راجع استخدام علامات Azure في Azure Kubernetes Service (AKS).
توفير وحدة تخزين بشكل ثابت
يوفر هذا القسم إرشادات لمسؤولي نظام المجموعة الذين يرغبون في إنشاء وحدة تخزين ثابتة واحدة أو أكثر تتضمن تفاصيل مشاركة ملفات Azure موجودة لاستخدامها مع حمل العمل.
معلمات التوفير الثابت ل PersistentVolume
يتضمن الجدول التالي المعلمات التي يمكنك استخدامها لتعريف PersistentVolume.
الاسم | المعنى | القيمة المتاحة | إلزامي | القيمة الافتراضية |
---|---|---|---|---|
volumeAttributes.resourceGroup | اسم مجموعة موارد Azure الخاصة بك. | myResourceGroup | لا | إذا كان فارغا، يستخدم برنامج التشغيل نفس اسم مجموعة الموارد مثل نظام المجموعة الحالي. |
volumeAttributes.storageAccount | حدد اسم حساب تخزين Azure موجود. | storageAccountName | نعم | |
volumeAttributes.shareName | حدد اسم مشاركة ملف Azure. | fileShareName | نعم | |
volumeAttributes.folderName | حدد اسم مجلد في مشاركة ملف Azure. | اسم المجلد | لا | إذا لم يكن اسم المجلد موجودا في مشاركة الملف، فسيفشل التحميل. |
volumeAttributes.protocol | حدد بروتوكول مشاركة الملف. | smb , nfs |
لا | smb |
volumeAttributes.server | تحديد عنوان خادم حساب تخزين Azure | عنوان الخادم الموجود، على سبيل المثال accountname.privatelink.file.core.windows.net . |
لا | إذا كان فارغا، يستخدم برنامج التشغيل عنوان حساب سحابة افتراضي accountname.file.core.windows.net أو آخر ذي سيادة. |
--- | المعلمات التالية هي فقط لبروتوكول SMB | --- | --- | --- |
volumeAttributes.secretName | حدد اسما سريا يخزن اسم حساب التخزين ومفتاحه. | لا | ||
volumeAttributes.secretNamespace | حدد مساحة اسم سرية. | default ،kube-system ، وما إلى ذلك. |
لا | مساحة اسم PVC (csi.storage.k8s.io/pvc/namespace ) |
nodeStageSecretRef.name | حدد اسما سريا يخزن اسم حساب التخزين ومفتاحه. | الاسم السري الموجود. | لا | إذا كان فارغا، يستخدم برنامج التشغيل هوية kubelet للحصول على مفتاح الحساب. |
nodeStageSecretRef.namespace | حدد مساحة اسم سرية. | مساحة اسم Kubernetes | لا | |
--- | المعلمات التالية مخصصة فقط لبروتوكول NFS | --- | --- | --- |
volumeAttributes.fsGroupChangePolicy | يشير إلى كيفية تغيير برنامج التشغيل لملكية وحدة التخزين. يتم تجاهل الجراب securityContext.fsGroupChangePolicy . |
OnRootMismatch (افتراضي)، Always ، None |
لا | OnRootMismatch |
volumeAttributes.mountPermissions | حدد أذونات المجلد المحمل. الإعداد الافتراضي هو 0777 |
لا |
إنشاء مشاركة ملف Azure
قبل أن تتمكن من استخدام مشاركة ملف Azure Files كحجم Kubernetes، يجب إنشاء حساب تخزين Azure ومشاركة الملف.
احصل على اسم مجموعة الموارد باستخدام
az aks show
الأمر مع المعلمة--query nodeResourceGroup
.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
إخراج الأمر يشبه المثال التالي:
MC_myResourceGroup_myAKSCluster_eastus
إنشاء حساب تخزين باستخدام
az storage account create
الأمر مع المعلمة--sku
. يقوم الأمر التالي بإنشاء حساب تخزين باستخدامStandard_LRS
SKU. تأكد من استبدال العناصر النائبة التالية:myAKSStorageAccount
باسم حساب التخزينnodeResourceGroupName
باسم مجموعة الموارد التي تتم استضافة عقد نظام مجموعة AKS فيهاlocation
باسم المنطقة لإنشاء المورد فيها. يجب أن تكون نفس المنطقة مثل عقد نظام مجموعة AKS.
az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
تصدير سلسلة الاتصال كمتغير بيئة باستخدام الأمر التالي، والذي تستخدمه لإنشاء مشاركة الملف.
export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
إنشاء مشاركة الملف باستخدام
az storage share create
الأمر . تأكد من استبدالshareName
باسم المشاركة.az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
تصدير مفتاح حساب التخزين كمتغير بيئة باستخدام الأمر التالي.
STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
كرر اسم حساب التخزين والمفتاح باستخدام الأمر التالي. انسخ هذه المعلومات، حيث تحتاج إلى هذه القيم عند إنشاء وحدة تخزين Kubernetes.
echo Storage account key: $STORAGE_KEY
إنشاء البيانات السرية Kubernetes
يحتاج Kubernetes إلى بيانات الاعتماد للوصول إلى مشاركة الملف الذي تم إنشاؤه في الخطوة السابقة. يتم تخزين بيانات الاعتماد هذه في سر Kubernetes، والذي تتم الإشارة إليه عند إنشاء جراب Kubernetes.
إنشاء البيانات السرية باستخدام
kubectl create secret
الأمر . في المثال التالي، تُنشأ بيانات سرية باسمazure-secret وتملأ azurestorageaccountname وazurestorageaccountkey من الخطوة السابقة. لاستخدام حساب تخزين Azure موجود، قم بتوفير اسم الحساب والمفتاح.kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
تحميل مشاركة الملفات كوحدة تخزين ثابتة
أنشئ ملفا جديدا باسم
azurefiles-pv.yaml
وانسخه في المحتويات التالية. ضمنcsi
، حدِّثresourceGroup
وvolumeHandle
وshareName
. بالنسبة لخيارات التحميل، القيمة الافتراضية لfileMode
وdirMode
هي 0777.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: file.csi.azure.com name: azurefile spec: capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: azurefile-csi csi: driver: file.csi.azure.com volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}" # make sure this volumeid is unique for every identical share in the cluster volumeAttributes: shareName: aksshare nodeStageSecretRef: name: azure-secret namespace: default mountOptions: - dir_mode=0777 - file_mode=0777 - uid=0 - gid=0 - mfsymlinks - cache=strict - nosharesock - nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
إنشاء وحدة التخزين الثابتة باستخدام
kubectl create
الأمر .kubectl create -f azurefiles-pv.yaml
أنشئ ملفا جديدا باسم azurefiles-mount-options-pvc.yaml وانسخ المحتويات التالية.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5Gi
إنشاء PersistentVolumeClaim باستخدام
kubectl apply
الأمر .kubectl apply -f azurefiles-mount-options-pvc.yaml
تحقق من إنشاء PersistentVolumeClaim وربطه ب PersistentVolume باستخدام
kubectl get
الأمر .kubectl get pvc azurefile
الإخراج من الأمر يشبه المثال التالي:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5s
قم بتحديث مواصفات الحاوية للإشارة إلى PersistentVolumeClaim والجراب الخاص بك في ملف YAML. على سبيل المثال:
... volumes: - name: azure persistentVolumeClaim: claimName: azurefile
لا يمكن تحديث مواصفات الجراب في مكانها، لذا احذف الحاوية
kubectl delete
باستخدام الأمر وأعد إنشائها باستخدامkubectl apply
الأمر .kubectl delete pod mypod kubectl apply -f azure-files-pod.yaml
تحميل مشاركة الملف كوحدة تخزين مضمنة
إشعار
لتجنب مشكلة الأداء، نوصي باستخدام وحدة تخزين ثابتة بدلا من وحدة تخزين مضمنة عند وصول العديد من pods إلى نفس مشاركة الملف. يمكن لوحدات التخزين المضمنة الوصول إلى البيانات السرية فقط في نفس مساحة الاسم باعتبارها الحجيرة. لتحديد مساحة اسم سرية مختلفة، استخدم وحدة تخزين ثابتة.
لتحميل مشاركة ملف ملفات Azure في الجراب الخاص بك، يمكنك تكوين وحدة التخزين في مواصفات الحاوية.
- أنشئ ملفا جديدا باسم
azure-files-pod.yaml
وانسخه في المحتويات التالية. إذا قمت بتغيير اسم مشاركة الملف أو الاسم السري، فقمshareName
بتحديث وsecretName
. يمكنك أيضا تحديثmountPath
، وهو المسار حيث يتم تحميل مشاركة الملفات في pod. بالنسبة لحاويات Windows Server، حددmountPath
استخدام اصطلاح مسار Windows، مثل 'D:'.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- image: 'mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine'
name: mypod
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
volumeMounts:
- name: azure
mountPath: /mnt/azure
readOnly: false
volumes:
- name: azure
csi:
driver: file.csi.azure.com
volumeAttributes:
secretName: azure-secret # required
shareName: aksshare # required
mountOptions: 'dir_mode=0777,file_mode=0777,cache=strict,actimeo=30,nosharesock,nobrl' # optional
إنشاء الجراب باستخدام
kubectl apply
الأمر .kubectl apply -f azure-files-pod.yaml
لديك الآن جراب قيد التشغيل مع مشاركة ملف Azure Files مثبتة في /mnt/azure. يمكنك التحقق من تحميل المشاركة بنجاح باستخدام
kubectl describe
الأمر .kubectl describe pod mypod
الخطوات التالية
بالنسبة لمعلمات برنامج تشغيل Azure Files CSI، راجع معلمات برنامج تشغيل CSI.
للحصول على أفضل الممارسات المرتبطة بها، راجع أفضل الممارسات للتخزين والنسخ الاحتياطي في AKS.
Azure Kubernetes Service