إنشاء وحدة تخزين واستخدامها مع أقراص Azure في خدمة Azure Kubernetes (AKS)

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

إشعار

يمكن تحميل قرص Azure فقط باستخدام نوع وضع الوصول ReadWriteOnce، مما يجعله متاحا لعقدة واحدة في AKS. لا يزال وضع الوصول هذا يسمح لوحدات الجراب المتعددة بالوصول إلى وحدة التخزين عند تشغيل pods على نفس العقدة. لمزيد من المعلومات، راجع أوضاع الوصول إلى Kubernetes PersistentVolume.

توضح لك هذه المقالة كيفية:

  • العمل مع وحدة تخزين ثابتة ديناميكية (PV) عن طريق تثبيت برنامج تشغيل واجهة تخزين الحاوية (CSI) وإنشاء قرص واحد أو أكثر من أقراص Azure المدارة لإرفاقها بجراب ديناميكيا.
  • العمل مع PV ثابت عن طريق إنشاء قرص واحد أو أكثر من أقراص Azure المدارة أو استخدام قرص موجود وإرفاقه بجراب.

لمزيد من المعلومات حول وحدات تخزين Kubernetes، راجع خيارات التخزين للتطبيقات في AKS .

قبل البدء

  • تأكد من تثبيت الإصدار 2.0.59 من Azure CLI أو إصدار أحدث وتكوينه. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

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

    kubectl get CSINode <nodename> -o yaml
    

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

يوفر هذا القسم إرشادات لمسؤولي نظام المجموعة الذين يرغبون في توفير وحدة تخزين ثابتة واحدة أو أكثر تتضمن تفاصيل تخزين Azure Disk لاستخدامها بواسطة حمل العمل. تستخدم مطالبة وحدة التخزين الثابتة (PVC) كائن فئة التخزين لتوفير حاوية تخزين قرص Azure ديناميكيا.

معلمات فئة التخزين ل PersistentVolumes الديناميكية

يتضمن الجدول التالي معلمات يمكنك استخدامها لتعريف فئة تخزين مخصصة ل PersistentVolumeClaim.

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

فئات تخزين مدمجة

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

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

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

لا يتم دعم تقليل حجم PVC بسبب خطر فقدان البيانات. يمكنك تحرير فئة تخزين موجودة باستخدام kubectl edit sc الأمر ، أو يمكنك إنشاء فئة التخزين المخصصة الخاصة بك. على سبيل المثال، إذا كنت تريد استخدام قرص بحجم 4 تيرابايت، يجب إنشاء فئة تخزين تحدد cachingmode: None لأن التخزين المؤقت للقرص غير مدعوم للأقراص 4 تيرابايت وأكبر. لمزيد من المعلومات حول فئات التخزين وإنشاء فئة التخزين الخاصة بك، راجع خيارات التخزين للتطبيقات في AKS.

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

kubectl get sc

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

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

إشعار

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

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

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

  1. قم بإنشاء ملف باسم azure-pvc.yaml وانسخه في البيان التالي. تطلب المطالبة قرصا باسم azure-managed-disk بحجم 5 غيغابايت مع وصول ReadWriteOnce . تم تحديد فئة التخزين managed-csi كفئة التخزين.

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

تلميح

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

  1. أنشئ مطالبة وحدة التخزين الثابتة باستخدام kubectl apply الأمر وحدد ملف azure-pvc.yaml .

    kubectl apply -f azure-pvc.yaml
    

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

    persistentvolumeclaim/azure-managed-disk created
    

استخدم الحجم الثابت

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

  1. تحقق من حالة PVC باستخدام kubectl describe pvc الأمر .

    kubectl describe pvc azure-managed-disk
    

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

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. قم بإنشاء ملف باسم 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
    
  3. إنشاء الجراب باستخدام kubectl apply الأمر .

     kubectl apply -f azure-pvc-disk.yaml
    

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

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

     kubectl describe pod mypod
    

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

    [...]
    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-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

استخدام أقراص Azure ultra

لاستخدام قرص Azure ultra، راجع استخدام الأقراص الفائقة على خدمة Azure Kubernetes (AKS).

استخدام علامات Azure

لمزيد من المعلومات حول استخدام علامات Azure، راجع استخدام علامات Azure في Azure Kubernetes Service (AKS).

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

يوفر هذا القسم إرشادات لمسؤولي نظام المجموعة الذين يرغبون في إنشاء وحدة تخزين ثابتة واحدة أو أكثر تتضمن تفاصيل أقراص Azure لاستخدامها بواسطة حمل العمل.

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

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

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

إنشاء قرص Azure

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

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

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

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

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

    يُعرض معرف مورد القرص بمجرد اكتمال الأمر بنجاح، كما هو موضح في إخراج المثال التالي. يمكنك استخدام معرف القرص لتحميل القرص في القسم التالي.

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

تحميل القرص كوحدة تخزين

  1. قم بإنشاء ملف pv-azuredisk.yaml باستخدام PersistentVolume. قم بتحديث 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_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    
  2. قم بإنشاء ملف pvc-azuredisk.yaml مع PersistentVolumeClaim يستخدم PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. قم بإنشاء PersistentVolume و PersistentVolumeClaim باستخدام kubectl apply الأمر والإشارة إلى ملفي YAML اللذين أنشأتهما.

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

    kubectl get pvc pvc-azuredisk
    

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

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. إنشاء ملف azure-disk-pod.yaml للإشارة إلى PersistentVolumeClaim. بالنسبة لحاويات 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
    
  6. تطبيق التكوين وتركيب وحدة التخزين باستخدام kubectl apply الأمر .

    kubectl apply -f azure-disk-pod.yaml
    

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

عند الانتهاء من الموارد التي تم إنشاؤها في هذه المقالة، يمكنك إزالتها باستخدام kubectl delete الأمر .

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

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

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