Create and manage persistent volumes (PVs) with Azure Disks in خدمة Azure Kubernetes ‏(AKS)

توضح لك هذه المقالة كيفية إنشاء وحدات تخزين دائمة (PVs) ديناميكيا وثابتا باستخدام أقراص Azure لاستخدامها بواسطة وحدة واحدة في عنقود خدمة Azure Kubernetes ‏(AKS).

المتطلبات المسبقه

  • تم تثبيت وتكوين Azure CLI الإصدار 2.0.59 أو لاحقا. ابحث عن الإصدار باستخدام az --version الأمر . للتثبيت أو الترقية، راجع تثبيت Azure CLI.

  • برنامج تشغيل CSI Azure Disks مفعل على عنقود AKS الخاص بك.

  • برنامج تشغيل Azure Disks CSI له حد للحجم لكل عقدة. يتغير عدد وحدات التخزين استنادا إلى حجم تجمع العقدة/العقدة. يمكنك تحديد عدد الأحجام التي يمكن تخصيصها لكل عقدة باستخدام الأمر kubectl get . على سبيل المثال:

    kubectl get CSINode <node-name> -o yaml
    

    إذا كان حد حجم الصوت لكل عقدة يمثل مشكلة في عبء عملك، فكر في استخدام Azure Container Storage للوحدات الدائمة بدلا من تعريفات CSI.

فئات تخزين مدمجة لأنظمة PV الديناميكية مع أقراص Azure

تحدد فئات التخزين كيفية إنشاء وحدة تخزين ديناميكيا بوحدة تخزين ثابتة.

تتضمن كل مجموعة AKS أربع فئات تخزين مدمجة، اثنتان منها مهيأتان للعمل مع أقراص Azure:

  • توفر فئة التخزين default قرص SSD Azure قياسي.
    • أقراص SSD القياسية تدعم التخزين القياسي وتوفر تخزينا فعالا من حيث التكلفة مع الحفاظ على أداء موثوق.
  • توفر فئة التخزين managed-csi-premium قرص Azure مميز.
    • الأقراص عالية الأداء وذات زمن الانتقال المنخفض المستندة إلى SSD تعود إلى الأقراص المتميزة. هي مثالية للآلات الافتراضية (VMs) التي تشغل أحمال عمل الإنتاج. عند استخدام برنامج تشغيل CSI Azure Disk على AKS، يمكنك أيضا استخدام فئة التخزين managed-csi، والتي تدعمها ذاكرة تخزين محلية مكررة محليا (LRS) على SSD قياسي.
  • بدءا من إصدار Kubernetes 1.29: عند نشر مجموعات AKS عبر عدة مناطق توافر، يستخدم AKS الآن التخزين الاحتياطي في المنطقة (ZRS) لإنشاء أقراص مدارة ضمن فئات التخزين المدمجة.
    • يضمن ZRS تكرارا متزامنا لأقراص Azure المدارة عبر عدة مناطق توفر Azure في المنطقة التي اخترتها. تعزز استراتيجية التكرار هذه مرونة تطبيقاتك وتحمي بياناتك من فشل مركز البيانات.
      • ومع ذلك، من المهم ملاحظة أن ZRS يأتي بتكلفة أعلى مقارنة بالتخزين المحلي الاحتياطي (LRS). إذا كان تحسين التكلفة أولوية، يمكنك إنشاء فئة تخزين جديدة باستخدام معامل اسم SKU الخاص ب LRS واستخدامها في ملف PVC الخاص بك.

لا يتم دعم تقليل حجم PVC بسبب خطر فقدان البيانات. يمكنك تعديل فئة تخزين موجودة باستخدام الأمر kubectl edit sc ، أو يمكنك إنشاء فئة تخزين مخصصة خاصة بك.

‏‫ملاحظة‬

تحدد مطالبات الحجم الدائم ب GiB، لكن أقراص Azure المدارة تتم فوترتها بواسطة SKU لحجم محدد. تتراوح هذه الوحدات من 32 جيجابايت لأقراص S4 أو P4 إلى 32 تيبايت لأقراص S80 أو P80 (في المعاينة). يعتمد معدل النقل وأداء IOPS لقرص SSD بريميوم على كل من وحدة التخزين وحجم مثيل العقد في عنقود AKS. لمزيد من المعلومات، راجع تسعير وأداء الأقراص المُدارة .

عرض أصناف التخزين الجاهزة باستخدام kubectl get sc الأمر. يوضح المثال التالي فئات التخزين التي تم إنشاؤها مسبقا المتوفرة داخل نظام مجموعة AKS:

kubectl get sc

يجب أن يشبه مخرجاتك الإخراج المثال التالي، والذي يشمل فئات التخزين default و managed-csi-premium التي تم إنشاؤها مسبقا لأقراص Azure:

NAME                  PROVISIONER               AGE
default (default)     disk.csi.azure.com        1h
managed-csi-premium   disk.csi.azure.com        1h

إنشاء فئات تخزين مخصصة لأنظمة PV الديناميكية باستخدام أقراص Azure

فئات التخزين الافتراضية مناسبة لمعظم السيناريوهات. في بعض الحالات، قد ترغب في تخصيص فئة تخزين خاصة بك مع معاييرك الخاصة. على سبيل المثال، قد ترغب في تغيير الفئة volumeBindingMode .

يمكنك استخدام فئة volumeBindingMode: Immediate تضمن حدوث ذلك فور صنع ال PVC. عندما تكون مجموعات العقد لديك مقيدة بالطوبولوجيا، مثل استخدام مناطق التوفر، ستكون PVs مرتبطة أو مجهزة دون معرفة متطلبات الجدولة الخاصة بالبود.

لمعالجة هذا السيناريو، يمكنك استخدام volumeBindingMode: WaitForFirstConsumer، الذي يؤخر ربط وتجهيز الPV حتى يتم إنشاء كبسولة تستخدم PVC. بهذه الطريقة، تتوافق الشبكة العرضية ويتم توفيرها في منطقة التوافر (أو أي طوبولوجيا أخرى) المحددة بقيود الجدولة الخاصة بالبود. تستخدم فئات volumeBindingMode: WaitForFirstConsumer التخزين الافتراضية الفئة.

  1. أنشئ ملفا مسمى sc-azuredisk-csi-waitforfirstconsumer.yaml والصقه في بيان YAML التالي. فئة التخزين هي نفسها فئة التخزين لدينا managed-csi ، لكن بفئة مختلفة volumeBindingMode .

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: azuredisk-csi-waitforfirstconsumer
    provisioner: disk.csi.azure.com
    parameters:
      skuName: StandardSSD_LRS
    allowVolumeExpansion: true
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    
  2. أنشئ فئة التخزين باستخدام kubectl apply الأمر وحدد ملفك sc-azuredisk-csi-waitforfirstconsumer.yaml :

    kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
    

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

    storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
    

معلمات فئة التخزين لوحدات PV الديناميكية مع أقراص Azure

يتضمن الجدول التالي معلمات يمكنك استخدامها لتعريف فئة تخزين مخصصة لمطالبات الحجم الديناميكي المستمر (PVCs) باستخدام أقراص Azure:

الاسم المعنى القيم المتاحة مطلوب القيمة الافتراضية
skuName نوع حساب تخزين الأقراص Azure (الاسم المستعار: storageAccountType). PremiumV2_LRS ودعم UltraSSD_LRS الوصول الفوري لاستعادة اللقطات التدريجية. Standard_LRS، Premium_LRS، StandardSSD_LRS، PremiumV2_LRS، UltraSSD_LRS، ، Premium_ZRSStandardSSD_ZRS لا StandardSSD_LRS
fsType نوع نظام الملفات ext4, ext3, ext2, xfs, للينكس btrfs
ntfs Windows
لا ext4 بالنسبة لينكس
ntfs Windows
cachingMode إعداد Azure Data Disk Cache Settings (PremiumV2_LRS UltraSSD_LRS يدعمان فقط <وضع التخزين المؤقت c1 />) None، ، ReadOnlyReadWrite لا ReadOnly
resourceGroup حدد مجموعة الموارد لأقراص Azure اسم مجموعة الموارد الحالية لا إذا كان فارغا، يستخدم برنامج التشغيل نفس اسم مجموعة الموارد مثل نظام مجموعة AKS الحالي
DiskIOPSReadWrite قدرة Ultra Disk أو SSD Premium v2 IOPS (الحد الأدنى: 2 IOPS/GiB) 100~160000 لا 500
DiskMBpsReadWrite قدرة معالجة Ultra Disk أو Premium SSD v2 (الحد الأدنى: 0.032/جيجابايت) 1~2000 لا 100
LogicalSectorSize حجم القطاع المنطقي بالبايت لقرص Ultra. 512، 4096 لا 4096
tags Azure القرص tags تنسيق العلامة: key1=val1,key2=val2 لا ""
diskEncryptionSetID معرف المورد لتشفير القرص تم ضبطه لتمكين التشفير في حالة السكون الصيغة: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} لا ""
diskEncryptionType نوع التشفير لمجموعة تشفير القرص. EncryptionAtRestWithCustomerKey (بشكل افتراضي)، EncryptionAtRestWithPlatformAndCustomerKeys لا EncryptionAtRestWithCustomerKey
writeAcceleratorEnabled Write Accelerator على أقراص Azure true، false لا ""
networkAccessPolicy NetworkAccessPolicy خاصية لمنع توليد رابط مستخدم SAS للقرص أو لقطة. AllowAll، ، DenyAllAllowPrivate لا AllowAll
diskAccessID معرف مورد Azure لمورد DiskAccess لاستخدام نقاط النهاية الخاصة على الأقراص لا ``
enableBursting تمكين الاندفاع عند الطلب بما يتجاوز هدف الأداء المتاح للقرص. يجب تطبيق الاندفاع عند الطلب فقط على القرص المميز وعندما يكون حجم > القرص 512 جيجابايت. القرص الفائق والمشترك غير مدعوم. يتم تعطيل الاندفاع افتراضياً. true، false لا false
userAgent عامل المستخدم في إحالة استخدام العميل لا تنسيق وكيل المستخدم المولد: driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID حدد معرف اشتراك Azure حيث يتم إنشاء Azure Disks. إذا لم يكن فارغاً، فيجب تقديم resourceGroup. مُعرف اشتراكك في Azure لا
--- المعاملات التالية مخصصة فقط ل v2 --- --- ---
maxShares العدد الإجمالي لتركيبات القرص المشترك المسموح بها للقرص. يؤدي تعيين القيمة إلى 2 أو أكثر إلى تمكين النسخ المتماثلة للمرفقات. تعتمد القيم المدعومة على حجم القرص. انظر Share an disk managed Azure للقيم المدعومة. لا 1
maxMountReplicaCount عدد مرفقات النسخ المتماثلة التي يجب الاحتفاظ بها. يجب أن تكون هذه القيمة في النطاق [0..(maxShares - 1)] لا إذا كان accessMode هو ReadWriteMany، فإن الإعداد الافتراضي هو 0. وإلا، فإن الإعداد الافتراضي هو maxShares - 1

مهم

يتم تطبيق معامل فئة التخزين tags على القرص المدار عندما يقوم برنامج تشغيل CSI للقرص Azure بتوفير الحجم. بعد إنشاء الحجم الدائم، يصبح التخصص PersistentVolume غير قابل للتغيير، لذا فإن تحرير أو تحديث ال PV لتغيير العلامات أو سمات الحجم الأخرى يفشل. تحديث فئة التخزين لاحقا يؤثر فقط على الأحجام التي تم توفيرها حديثا.

لتحديث العلامات على وحدة تخزين موجودة، قم بتغييرها على القرص المدار الأساسي في Azure. هذه العملية لا تقطع التركيبات أو البودات أو الوصول إلى البيانات الموجودة، وعلامات Azure المحدثة لا تتزامن مع Kubernetes PV YAML أو البيانات الوصفية. على سبيل المثال:

az disk update \
    --name myManagedDisk \
    --resource-group MC_myResourceGroup_myAKSCluster_eastus \
    --set tags.abc=ABC123

أنشئ نسخة PVC باستخدام أقراص Azure

يوفر PVC تلقائيا التخزين بناء على فئة التخزين. في هذه الحالة، يمكن لجهاز PVC استخدام إحدى فئات التخزين الجاهزة لإنشاء قرص Azure مدار Standard أو Premium.

  1. أنشئ ملفا باسم azure-pvc.yaml والصقه في البيان التالي. الطلب يطلب قرصا بحجم azure-managed-disk10 جيجابايت مع إمكانية الوصول إلى ReadWriteOne . تم تحديد فئة التخزين managed-csi كفئة التخزين.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-managed-disk
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: managed-csi
      resources:
        requests:
          storage: 10Gi
    

    نصيحة

    لإنشاء قرص يستخدم وحدة تخزين متميزة، استخدم storageClassName: managed-csi-premium بدلاً من managed-csi.

  2. أنشئ ملف PVC باستخدام kubectl apply الأمر وحدد ملف azure-pvc.yaml الخاص بك:

    kubectl apply -f azure-pvc.yaml
    

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

    persistentvolumeclaim/azure-managed-disk created
    
  3. تحقق من جاهزية الPV للاستخدام من قبل الكبسولة باستخدام kubectl describe pvc الأمر:

    kubectl describe pvc azure-managed-disk
    

    يجب أن يشبه مخرجاتك مثال المخرج، الذي يظهر أن الإضاءة الافتراضية في حالة انتظار :

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    

أنشئ بودك يستخدم PVC مع أقراص Azure

  1. أنشئ ملفا باسم azure-pvc-disk.yaml والصقه في البيان التالي. ينشئ هذا البيان وحدة NGINX أساسية تستخدم ادعاء الحجم الدائم المسمى azure-managed-disk لتثبيت قرص Azure على المسار /mnt/azure. (بالنسبة Windows Server الحاويات، حدد mountPath باستخدام اتفاقية المسار Windows، مثل 'D:').

    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: azure-managed-disk
    
  2. إنشاء الجراب باستخدام kubectl apply الأمر .

    kubectl apply -f azure-pvc-disk.yaml
    

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

    pod/mypod created
    
  3. لديك الآن جهاز تشغيل مع قرص Azure مركب في مجلد /mnt/azure. تحقق من تكوين الجراب باستخدام kubectl describe الأمر .

    kubectl describe pod mypod
    

    يجب أن يشبه مخرجاك المثال التالي، الذي يظهر أن الحجم المسمى يستخدم ملف PVC المسمى azure-managed-disk:

    [...]
    Volumes:
    volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
        default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
    Events:
    Type    Reason                 Age   From                               Message
    ----    ------                 ----  ----                               -------
    Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-12345678-9
    Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-12345678-9  MountVolume.SetUp succeeded for volume "default-token-smm2n"
    Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-12345678-9  MountVolume.SetUp succeeded for volume "pvc-abc0d123-4e5f-67g8-901h-ijk23l45m678"
    [...]
    

معلمات فئة Volume Snapshot لأقراص Azure

يدعم برنامج تشغيل Azure Disks CSI إنشاء snapshots للأحجام الدائمة. كجزء من هذه القدرة، يمكن للسائق تنفيذ لقطات كاملة أو تدريجية اعتمادا على القيمة المحددة في المعامل incremental .

يوفر الجدول التالي تفاصيل للمعلمات التي يمكنك استخدامها لتعريف فئة لقطات حجم مخصصة لقطات الحجم الخاصة بك باستخدام أقراص Azure:

الاسم المعنى القيم المتاحة مطلوب القيمة الافتراضية
resourceGroup مجموعة الموارد لتخزين اللقطات مجموعة الموارد الحالية لا إذا لم يتم تحديدها، سيتم تخزين اللقطة في نفس مجموعة الموارد التي تخزن فيها أقراص Azure الأصلية
incremental خذ لقطات كاملة أو تدريجية true، false لا true
tags أقراص Azure tags تنسيق الوسم: 'key1=val1,key2=val2' لا ""
userAgent عامل المستخدم في إحالة استخدام العميل لا وكيل المستخدم المولد بتنسيق driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID حدد معرف اشتراك Azure حيث سيتم إنشاء Azure Disks مُعرف اشتراكك في Azure لا إذا لم يكن فارغا، resourceGroup يجب توفيره، ويجب incremental أن يكون كالتالي false

أنشئ لقطة حجم من ملف PVC باستخدام أقراص Azure

‏‫ملاحظة‬

قبل المتابعة، تأكد من أن التطبيق لا يكتب بيانات على القرص المصدر.

  1. أنشئ فئة لقطة حجم باستخدام kubectl apply الأمر:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml
    

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

    volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created
    
  2. أنشئ لقطة حجم من ال PVC الديناميكي الذي أنشأته سابقا في هذا الدرس باستخدام kubectl apply الأمر:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml
    

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

    volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
    
  3. تحقق من إنشاء لقطة الصوت بنجاح باستخدام kubectl describe الأمر:

    kubectl describe volumesnapshot azuredisk-volume-snapshot
    

    يجب أن يشبه مخرجاك المثال التالي للمخرجات، والذي يوضح أن لقطة الحجم جاهزة للاستخدام:

    Name:         azuredisk-volume-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  API Version:  snapshot.storage.k8s.io/v1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2020-08-27T05:27:58Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
        snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
      Generation:        1
      Resource Version:  714582
      Self Link:         /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot
      UID:               00aa00aa-bb11-cc22-dd33-44ee44ee44ee
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-azuredisk
      Volume Snapshot Class Name:      csi-azuredisk-vsc
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-00aa00aa-bb11-cc22-dd33-44ee44ee44ee
      Creation Time:                       2020-08-31T05:27:59Z
      Ready To Use:                        true
      Restore Size:                        10Gi
    Events:                                <none>
    

أنشئ ملف PVC جديد بناء على لقطة حجم باستخدام أقراص Azure

يمكنك إنشاء PVC جديد بناء على لقطة الحجم. في هذا القسم، نستخدم لقطة من إنشاء لقطة حجم من PVC مع قسم Azure الأقراص وننشئ new PVC وnew pod لاستهلاكها.

  1. أنشئ ال PVC والوحدة باستخدام الأوامر التالية kubectl apply :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml
    

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

    persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
    pod/nginx-restored created
    
  2. تحقق من أنه نفس ال PVC الذي تم إنشاؤه سابقا عن طريق التحقق من محتوى المجلد باستخدام kubectl exec الأمر لتنفيذ ls الأمر داخل الكبسولة:

    kubectl exec nginx-restored -- ls /mnt/azuredisk
    

    يجب أن يشبه مخرجاتك مثال الإخراج التالي، الذي يعرض نفس محتوى ال PVC الأصلي، بما في ذلك الملف test.txt الذي تم إنشاؤه في ال PVC الأصلي:

    lost+found
    outfile
    test.txt
    

نسخ الأحجام باستخدام أقراص Azure

يعرف الحجم المستنسخ بأنه نسخة مكررة من حجم Kubernetes موجود. لمزيد من المعلومات حول أحجام الاستنساخ في كوبيرنيتس، راجع التوثيق المفاهيمي لاستنساخ الحجم.

يدعم برنامج تشغيل CSI لأقراص Azure استنساخ الصوت. لتوضيح، أنشئ حجما مستنسخا من ال PVC الديناميكي الذي أنشأته سابقا في هذا الدرس وكبسولة جديدة لاستهلاكها.

  1. أنشئ ال PVC المستنسخ والكبسولة باستخدام الأوامر التالية kubectl apply :

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml
    

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

    persistentvolumeclaim/pvc-azuredisk-cloning created
    pod/nginx-restored-cloning created
    
  2. تحقق من أن الحجم المستنسخ يحتوي على نفس محتوى الحجم الأصلي عن طريق التحقق من محتويات المجلد باستخدام الأمر لتنفيذ kubectl execls الأمر داخل الكبسولة:

    kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
    

    يجب أن يشبه مخرجاتك مثال الإخراج التالي، الذي يعرض نفس محتوى ال PVC الأصلي، بما في ذلك الملف test.txt الذي تم إنشاؤه في ال PVC الأصلي:

    lost+found
    outfile
    test.txt
    

إعادة حجم حجم مستمر دون توقف مؤقت باستخدام أقراص Azure

‏‫ملاحظة‬

تقليص وحدات التخزين الثابتة غير مدعوم حاليا. محاولة إصلاح PVC موجود بحجم أصغر من الحالي تؤدي إلى رسالة الخطأ التالية:

The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

يمكنك طلب حجم أكبر لجهاز PVC عن طريق تعديل كائن PVC لتحديد حجم أكبر. يؤدي هذا التغيير إلى توسيع وحدة التخزين الأساسية التي تدعم PV. لا يتم إنشاء PV جديدة لتلبية المطالبة. بدلا من ذلك، يتم حجم وحدة تخزين موجودة.

في AKS، تدعم فئة التخزين المدمجة managed-csi بالفعل التوسعة، لذا يمكنك استخدام PVC الديناميكي الذي أنشأته سابقا في هذا الدرس. طلب جهاز PVC حجما مستمرا بسعة 10 جيتار.

  1. تحقق من حجم الصوت الحالي باستخدام kubectl exec الأمر لتنفيذ df -h الأمر داخل البود:

    kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
    

    يجب أن يشبه المخرجات مثالية التالية، والتي تظهر أن حجم الصوت الحالي هو 10 جيجيت:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdc        9.8G   42M  9.8G   1% /mnt/azuredisk
    
  2. قم بتوسيع ال PVC عن طريق زيادة المجال spec.resources.requests.storage باستخدام kubectl patch الأمر. في هذا المثال، نزيد حجم PVC إلى 15 جيجيتار:

    kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
    

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

    persistentvolumeclaim/pvc-azuredisk patched
    
  3. تحقق من الزجاج الافتراضي للتأكد من أن الحجم الجديد يظهر في الكاميرا باستخدام kubectl get pv الأمر:

    kubectl get pv
    

    يجب أن يشبه مخرجاتك مثال الإخراج التالي، والذي يظهر أن ال PV تم تغيير حجمه إلى 15 جيجي:

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE
    pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1   15Gi       RWO            Delete           Bound    default/pvc-azuredisk                     managed-csi             2d2h
    (...)
    
  4. بعد بضع دقائق، تحقق من ال PVC للتأكد من أن الحجم الجديد ينعكس في ال PVC باستخدام kubectl get pvc الأمر:

    kubectl get pvc pvc-azuredisk
    

    يجب أن يشبه مخرجاك المثال التالي، الذي يظهر أن PVC تم تغيير حجمه إلى 15 جيجيت:

    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1   15Gi       RWO            managed-csi    2d2h
    
  5. تأكد من تحديث حجم القرص في الوحدة إلى الحجم الجديد باستخدام kubectl exec الأمر لتنفيذ df -h الأمر داخل الكبسولة:

    kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
    

    يجب أن يشبه مخرجاك المثال التالي للمخرجات، والذي يظهر أن حجم الصوت تم تحديثه إلى 15 جيجي:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdc         15G   46M   15G   1% /mnt/azuredisk
    

الانفجار عند الطلب لأقراص SSD المميزة مع أقراص Azure

نموذج انفجار الأقراص عند الطلب يسمح بدفعات القرص كلما تجاوزت احتياجاته سعته الحالية. هذا النموذج يولد شحنات إضافية في كل مرة ينفجر فيها القرص. التفجير عند الطلب متاح فقط لأقراص SSD المميزة التي تزيد حجمها عن 512 جيجابايت. لمزيد من المعلومات حول IOPS المجهزة في أقراص Premium SSD ومعدل النقل لكل قرص، راجع حجم Premium SSD. بدلا من ذلك، الانفجار المعتمد على الرصيد هو حيث ينفجر القرص فقط إذا كان لديه أرصدة متراكمة في صندوق الائتمان الخاص به. الانفجار المعتمد على الائتمان لا يولد شحنات إضافية عند انفجار القرص. التثبيت المعتمد على الائتمان متاح فقط لأقراص SSD المميزة بحجم 512 جيجابايت أو أصغر، وأقراص SSD القياسية بحجم 1024 جيجابايت وما أصغر. لمزيد من المعلومات حول الانفجار عند الطلب، انظر الانفجار عند الطلب.

مهم

فئة التخزين الافتراضية managed-csi-premium لديها تعطيل الانفجار عند الطلب وتستخدم الانفجار المعتمد على الاعتماد. أي قرص SSD مميز يتم إنشاؤه ديناميكيا بواسطة مطالبة حجم دائم بناء على فئة التخزين الافتراضية managed-csi-premium أيضا يتم تعطيل الانفجار عند الطلب.

لإنشاء وحدة تخزين SSD دائمة مع تفعيل الانفجار عند الطلب ، يمكنك إنشاء فئة تخزين جديدة مع تعيين معامل enableBursting كما true هو موضح في قالب YAML التالي. لمزيد من المعلومات حول تفعيل الانفجار عند الطلب، راجع الانفجار عند الطلب. لمزيد من المعلومات حول بناء فئة تخزين خاصة بك مع تفعيل الانفجار عند الطلب، راجع إنشاء فئة Premium Storage CSI مدارة من Burstable Class.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_LRS
  enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Use Azure Disks with Windows containers

يدعم برنامج تشغيل Azure Disk CSI عقد وحاويات Windows. إذا أردت استخدام حاويات Windows، اتبع Windows الحاويات السريع لإضافة مجموعة عقد Windows. بعد أن يكون لديك تجمع عقد Windows، يمكنك استخدام فئات التخزين المدمجة مثل managed-csi.

  1. نشر مثال Windows setful set الذي يحفظ الطوابع الزمنية في الملف data.txt باستخدام الأمر التالي kubectl apply:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
    

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

    statefulset.apps/busybox-azuredisk created
    
  2. تحقق من محتوى الملف data.txt في الوحدة باستخدام kubectl exec الأمر لتنفيذ الأمر type داخل الكبسولة:

    kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"
    

    يجب أن يشبه مخرجاتك مثال الإخراج التالي، الذي يوضح الطوابع الزمنية التي يتم حفظها في الملف data.txt:

    2020-08-27 08:13:41Z
    2020-08-27 08:13:42Z
    2020-08-27 08:13:44Z
    (...)
    

إنشاء ملف PV ثابت باستخدام أقراص Azure

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

معلمات فئة التخزين للPVs الثابتة مع أقراص Azure

يتضمن الجدول التالي معلمات يمكنك استخدامها لتعريف فئة تخزين مخصصة لوحدات PVC الثابتة الخاصة بك مع أقراص Azure:

الاسم المعنى القيم المتاحة مطلوب القيمة الافتراضية
volumeHandle Azure disk URI /subscriptions/{sub-id}/resourceGroups/{group-name}/providers/microsoft.compute/disks/{disk-id} ‏‏نعم‬ غير متوفر
volumeAttributes.fsType نوع نظام الملفات ext4, ext3, ext2, xfs, للينكس btrfs
ntfs Windows
لا ext4 بالنسبة لينكس
ntfs Windows
volumeAttributes.partition رقم قسم القرص الحالي (مدعوم فقط في Linux) 1، ، 23 لا فارغ (بدون قسم) تأكد من تنسيق القسم هو: -part1
volumeAttributes.cachingMode إعداد ذاكرة التخزين المؤقت لمضيف القرص None، ، ReadOnlyReadWrite لا ReadOnly

Create an Azure disk

عندما تنشئ قرص Azure للاستخدام مع AKS، يمكنك إنشاء مورد القرص في مجموعة موارد العقد. يسمح هذا الأسلوب لنظام مجموعة AKS بالوصول إلى موارد القرص وإدارتها. إذا أنشأت القرص بدلا من ذلك في مجموعة موارد منفصلة، يجب أن تمنح هوية AKS المدارة لمجموعة Contributor الدور الخاصة بمجموعة موارد القرص.

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

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

    يجب أن يشبه مخرجاتك مثال الإخراج التالي، الذي يظهر اسم مجموعة موارد العقد لمجموعة AKS:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. إنشاء قرص باستخدام az disk create الأمر . حدد اسم مجموعة موارد العقدة واسما لمورد القرص، مثل myAKSDisk. المثال التالي ينشئ قرصا بسعة 20 جيجابايت ويخرج معرف القرص بعد إنشائه. إذا كنت بحاجة لإنشاء قرص لاستخدامه مع الحاويات Windows Server، أضف معامل --os-type windows لتهيئة القرص بشكل صحيح.

    az disk create \
      --resource-group MC_myResourceGroup_myAKSCluster_eastus \
      --name myAKSDisk \
      --size-gb 20 \
      --query id --output tsv
    

    ‏‫ملاحظة‬

    يتم فوترة أقراص Azure بواسطة SKU لحجم محدد. تتراوح هذه الوحدات من 32 جيجابايت لأقراص S4 أو P4 إلى 32 تيبايت لأقراص S80 أو P80 (في المعاينة). يعتمد معدل النقل وأداء IOPS للقرص المدار Premium على كل من SKU وحجم المثيل للعقد في نظام مجموعة AKS. انظر تسعير وأداء أقراص مُدارة.

    يجب أن يشبه مخرجاك المثال التالي للمخرجات، والذي يظهر معرف مورد القرص الذي تم إنشاؤه:

    /subscriptions/<subscriptionID>/resourceGroups/MC_myResourceGroup_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
    

أنشئ ملف PV وPVC يشير إلى قرص Azure

  1. أنشئ ملف pv-azuredisk.yaml باستخدام ملف PV باستخدام المثال التالي الظاهرة. قم بتحديث volumeHandle بمعرف مورد القرص من الخطوة السابقة. بالنسبة للحاويات Windows Server، حدد ntfs للمعامل fsType.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: disk.csi.azure.com
      name: pv-azuredisk
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myResourceGroup_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    

    كما هو مذكور في إنشاء قرص Azure، إذا تم إنشاء قرص volumeHandle في مجموعة موارد منفصلة، فعليك منح هوية AKS المدارة لمجموعة الموارد Contributor لمجموعة موارد القرص.

  2. أنشئ ملف pvc-azuredisk.yaml باستخدام ملف PVC يستخدم الملف الافتراضي باستخدام المثال التالي:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. أنشئ ال PV و PVC باستخدام الأوامر التالية kubectl apply :

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. تحقق من إنشاء PVC الخاص بك بنجاح وربطه بالطاقة الزجاجية باستخدام kubectl get pvc الأمر:

    kubectl get pvc pvc-azuredisk
    

    يجب أن يشبه المخرجات المثال التالي، الذي يظهر أن ال PVC في حالة Bound :

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    

أنشئ كبسولة تستخدم ال PVC مع أقراص Azure

  1. أنشئ ملف azure-disk-pod.yaml للإشارة إلى ملف PVC الخاص بك باستخدام البيان المثال التالي. (بالنسبة 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
      volumes:
        - name: azure
          persistentVolumeClaim:
            claimName: pvc-azuredisk
    
  2. تطبيق التكوين وتركيب وحدة التخزين باستخدام kubectl apply الأمر .

    kubectl apply -f azure-disk-pod.yaml
    

تنظيف الموارد

  • قم بإزالة الموارد التي أنشأتها في هذا الدرس باستخدام أوامر [kubectl delete][kubectl-delete] التالية:

    # Remove the pod
    kubectl delete -f azure-pvc-disk.yaml
    
    # Remove the persistent volume claim
    kubectl delete -f azure-pvc.yaml