إنشاء وحدة تخزين واستخدامها مع ملفات 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، ، NoRootSquashRootSquash لا
--- المعلمات التالية هي لإعداد 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.

  1. إنشاء ملف مسمى 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
    
  2. إنشاء فئة التخزين باستخدام kubectl apply الأمر .

    kubectl apply -f azure-file-sc.yaml
    

إنشاء مطالبة وحدة تخزين ثابتة

تستخدم مطالبة وحدة التخزين الدائمة (PVC) كائن فئة التخزين لتوفير مشاركة ملف Azure بشكل ديناميكي. يمكنك استخدام YAML التالي لإنشاء مطالبة وحدة تخزين ثابتة بحجم 100 غيغابايت مع وصول ReadWriteMany . لمزيد من المعلومات حول أوضاع الوصول، راجع وحدة تخزين Kubernetes الثابتة.

  1. قم بإنشاء ملف باسم 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 .

  2. إنشاء مطالبة وحدة التخزين الدائمة باستخدام 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:'.

  1. قم بإنشاء ملف باسم 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
    
  2. إنشاء الجراب باستخدام 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 ومشاركة الملف.

  1. احصل على اسم مجموعة الموارد باستخدام az aks show الأمر مع المعلمة --query nodeResourceGroup .

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    إخراج الأمر يشبه المثال التالي:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. إنشاء حساب تخزين باستخدام 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
    
  3. تصدير سلسلة الاتصال كمتغير بيئة باستخدام الأمر التالي، والذي تستخدمه لإنشاء مشاركة الملف.

    export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
    
  4. إنشاء مشاركة الملف باستخدام az storage share create الأمر . تأكد من استبدال shareName باسم المشاركة.

    az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
    
  5. تصدير مفتاح حساب التخزين كمتغير بيئة باستخدام الأمر التالي.

    STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    
  6. كرر اسم حساب التخزين والمفتاح باستخدام الأمر التالي. انسخ هذه المعلومات، حيث تحتاج إلى هذه القيم عند إنشاء وحدة تخزين Kubernetes.

    echo Storage account key: $STORAGE_KEY
    

إنشاء البيانات السرية Kubernetes

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

  1. إنشاء البيانات السرية باستخدام kubectl create secret الأمر . في المثال التالي، تُنشأ بيانات سرية باسمazure-secret وتملأ azurestorageaccountname وazurestorageaccountkey من الخطوة السابقة. لاستخدام حساب تخزين Azure موجود، قم بتوفير اسم الحساب والمفتاح.

    kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
    

تحميل مشاركة الملفات كوحدة تخزين ثابتة

  1. أنشئ ملفا جديدا باسم 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:
          resourceGroup: resourceGroupName  # optional, only set this when storage account is not in the same resource group as node
          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
    
  2. إنشاء وحدة التخزين الثابتة باستخدام kubectl create الأمر .

    kubectl create -f azurefiles-pv.yaml
    
  3. أنشئ ملفا جديدا باسم azurefiles-mount-options-pvc.yaml وانسخ المحتويات التالية.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  4. إنشاء PersistentVolumeClaim باستخدام kubectl apply الأمر .

    kubectl apply -f azurefiles-mount-options-pvc.yaml
    
  5. تحقق من إنشاء PersistentVolumeClaim وربطه ب PersistentVolume باستخدام kubectl get الأمر .

    kubectl get pvc azurefile
    

    الإخراج من الأمر يشبه المثال التالي:

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  6. قم بتحديث مواصفات الحاوية للإشارة إلى PersistentVolumeClaim والجراب الخاص بك في ملف YAML. على سبيل المثال:

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  7. لا يمكن تحديث مواصفات الجراب في مكانها، لذا احذف الحاوية kubectl delete باستخدام الأمر وأعد إنشائها باستخدام kubectl apply الأمر .

    kubectl delete pod mypod
    
    kubectl apply -f azure-files-pod.yaml
    

تحميل مشاركة الملف كوحدة تخزين مضمنة

إشعار

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

لتحميل مشاركة ملف ملفات Azure في الجراب الخاص بك، يمكنك تكوين وحدة التخزين في مواصفات الحاوية.

  1. أنشئ ملفا جديدا باسم 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
  1. إنشاء الجراب باستخدام kubectl apply الأمر .

    kubectl apply -f azure-files-pod.yaml
    

    لديك الآن جراب قيد التشغيل مع مشاركة ملف Azure Files مثبتة في /mnt/azure. يمكنك التحقق من تحميل المشاركة بنجاح باستخدام kubectl describe الأمر .

    kubectl describe pod mypod
    

الخطوات التالية

بالنسبة لمعلمات برنامج تشغيل Azure Files CSI، راجع معلمات برنامج تشغيل CSI.

للحصول على أفضل الممارسات المرتبطة بها، راجع أفضل الممارسات للتخزين والنسخ الاحتياطي في AKS.