استخدام Azure Container Storage Preview مع NVMe المحلي والنسخ المتماثل للحجم

Azure Container Storage هي خدمة إدارة وحدة تخزين ونشر وتنسيق مستندة إلى السحابة تم إنشاؤها في الأصل للحاويات. توضح هذه المقالة كيفية تكوين Azure Container Storage لاستخدام القرص المؤقت مع NVMe المحلي والنسخ المتماثل للحجم كمساحة تخزين خلفية لأحمال عمل Kubernetes. في النهاية، سيكون لديك جراب يستخدم NVMe المحلي كمخزن له. ينسخ النسخ المتماثل البيانات عبر وحدات التخزين على عقد مختلفة ويستعيد وحدة تخزين عند فقدان نسخة متماثلة، ما يوفر مرونة للقرص المؤقت.

ما هو القرص المؤقت؟

عندما يحتاج تطبيقك إلى زمن انتقال تخزين أقل من مللي ثانية، يمكنك استخدام القرص المؤقت مع Azure Container Storage لتلبية متطلبات الأداء الخاصة بك. تعني الزوال أنه يتم نشر الأقراص على الجهاز الظاهري المحلي (VM) الذي يستضيف نظام مجموعة AKS ولا يتم حفظها في خدمة تخزين Azure. سيتم فقدان البيانات على هذه الأقراص إذا قمت بإيقاف/إلغاء تخصيص الجهاز الظاهري الخاص بك.

يتوفر نوعان من القرص المؤقت: NVMe وSSD المؤقت. تم تصميم NVMe لنقل البيانات بسرعة عالية بين التخزين وCPU. اختر NVMe عندما يتطلب تطبيقك IOPS ومعدل نقل أعلى من SSD المؤقت، أو إذا كان حمل العمل يتطلب النسخ المتماثل. النسخ المتماثل غير مدعوم حاليا ل SSD المؤقت.

المتطلبات الأساسية

  • في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

  • تتطلب هذه المقالة أحدث إصدار (2.35.0 أو أحدث) من Azure CLI. راجع كيفية تثبيت Azure CLI. إذا كنت تستخدم بيئة Bash في Azure Cloud Shell، فإن أحدث إصدار مثبت بالفعل. إذا كنت تخطط لتشغيل الأوامر محليا بدلا من Azure Cloud Shell، فتأكد من تشغيلها بامتيازات إدارية. لمزيد من المعلومات، راجع بدء استخدام Azure Cloud Shell.

  • ستحتاج إلى عميل سطر أوامر Kubernetes، kubectl. يتم تثبيته بالفعل إذا كنت تستخدم Azure Cloud Shell، أو يمكنك تثبيته محليا عن طريق تشغيل az aks install-cli الأمر .

  • إذا لم تكن قد قمت بتثبيت Azure Container Storage بالفعل، فاتبع الإرشادات الواردة في استخدام Azure Container Storage مع Azure Kubernetes Service.

  • تحقق مما إذا كانت منطقتك المستهدفة مدعومة في مناطق Azure Container Storage.

اختر نوع الجهاز الظاهري الذي يدعم NVMe المحلي

يتوفر القرص المؤقت فقط في أنواع معينة من الأجهزة الظاهرية. إذا كنت تخطط لاستخدام NVMe المحلي، يلزم وجود جهاز ظاهري محسن للتخزين مثل standard_l8s_v3 .

يمكنك تشغيل الأمر التالي للحصول على نوع الجهاز الظاهري المستخدم مع تجمع العقدة.

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

فيما يلي مثال على الإخراج.

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

نوصي بأن يكون لكل جهاز ظاهري ما لا يقل عن أربع وحدات معالجة مركزية ظاهرية (vCPUs)، ولكل تجمع عقدة ثلاث عقد على الأقل.

إنشاء وحدات تخزين ثابتة وإرفاقها

اتبع هذه الخطوات لإنشاء وحدة تخزين ثابتة وإرفاقها.

1. إنشاء تجمع تخزين مع النسخ المتماثل وحدة التخزين

اتبع هذه الخطوات لإنشاء تجمع تخزين باستخدام NVMe المحلي مع النسخ المتماثل. يدعم Azure Container Storage حاليا تكوينات ثلاث نسخ متماثلة وخمس نسخ متماثلة. إذا قمت بتحديد ثلاث نسخ متماثلة، يجب أن يكون لديك ثلاث عقد على الأقل في نظام مجموعة AKS. إذا قمت بتحديد خمس نسخ متماثلة، يجب أن يكون لديك خمس عقد على الأقل.

إشعار

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

  1. استخدم محرر النص المفضل لديك لإنشاء ملف بيان YAML مثل code acstor-storagepool.yaml.

  2. الصق التعليمات البرمجية التالية واحفظ الملف. يمكن أن تكون قيمة اسم تجمع التخزين ما تريد. تعيين النسخ المتماثلة إلى 3 أو 5.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
          replicas: 3
    
  3. تطبيق ملف بيان YAML لإنشاء تجمع التخزين.

    kubectl apply -f acstor-storagepool.yaml 
    

    عند اكتمال إنشاء تجمع التخزين، سترى رسالة مثل:

    storagepool.containerstorage.azure.com/ephemeraldisk-nvme created
    

    يمكنك أيضا تشغيل هذا الأمر للتحقق من حالة تجمع التخزين. استبدل <storage-pool-name> بقيمة اسم تجمع التخزين. على سبيل المثال، ستكون القيمة سريعة الزوال-nvme.

    kubectl describe sp <storage-pool-name> -n acstor
    

عند إنشاء تجمع التخزين، سيقوم Azure Container Storage بإنشاء فئة تخزين نيابة عنك، باستخدام اصطلاح acstor-<storage-pool-name>التسمية .

2. عرض فئات التخزين المتوفرة

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

قم بتشغيل kubectl get sc لعرض فئات التخزين المتوفرة. يجب أن تشاهد فئة تخزين تسمى acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-nvme        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

هام

لا تستخدم فئة التخزين التي تم وضع علامة داخلي عليها. إنها فئة تخزين داخلية مطلوبة لكي يعمل Azure Container Storage.

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

يتم استخدام مطالبة الحجم الثابت (PVC)؛ لتوفير التخزين تلقائيًا بناءً على فئة التخزين. اتبع هذه الخطوات لإنشاء PVC باستخدام فئة التخزين الجديدة.

  1. استخدم محرر النص المفضل لديك لإنشاء ملف بيان YAML مثل code acstor-pvc.yaml.

  2. الصق التعليمات البرمجية التالية واحفظ الملف. يمكن أن تكون قيمة PVC name ما تريد.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ephemeralpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    عند تغيير حجم تخزين وحدات التخزين الخاصة بك، تأكد من أن الحجم أقل من السعة المتوفرة للقرص المؤقت لعقدة واحدة. راجع التحقق من سعة القرص المؤقت للعقدة.

  3. تطبيق ملف بيان YAML لإنشاء PVC.

    kubectl apply -f acstor-pvc.yaml
    

    يجب أن تلاحظ مخرجات مشابهة لـ:

    persistentvolumeclaim/ephemeralpvc created
    

    يمكنك التحقق من حالة PVC عن طريق تشغيل الأمر التالي:

    kubectl describe pvc ephemeralpvc
    

بمجرد إنشاء PVC، يكون جاهزا للاستخدام من قبل جراب.

4. نشر جراب وإرفاق وحدة تخزين ثابتة

إنشاء جراب باستخدام Fio (اختبار الإدخال/الإخراج المرن) لقياس الأداء ومحاكاة حمل العمل، وتحديد مسار تحميل وحدة التخزين الثابتة. بالنسبة إلى claimName، استخدم قيمة الاسم التي استخدمتها عند إنشاء مطالبة وحدة التخزين الدائمة.

  1. استخدم محرر النص المفضل لديك لإنشاء ملف بيان YAML مثل code acstor-pod.yaml.

  2. الصق التعليمات البرمجية التالية واحفظ الملف.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  3. تطبيق ملف بيان YAML لنشر الجراب.

    kubectl apply -f acstor-pod.yaml
    

    يجب أن ترى مخرجات مماثلة لما يلي:

    pod/fiopod created
    
  4. تحقق من أن الحاوية قيد التشغيل وأن مطالبة وحدة التخزين الدائمة قد تم ربطها بنجاح بالجراب:

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  5. تحقق من اختبار fio لمعرفة حالته الحالية:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

لقد قمت الآن بنشر جراب يستخدم NVMe المحلي مع النسخ المتماثل للحجم، ويمكنك استخدامه لأحمال عمل Kubernetes.

إدارة وحدات التخزين وتجمعات التخزين

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

التحقق من سعة القرص المؤقت للعقدة

يتم تخصيص وحدة تخزين سريعة الزوال على عقدة واحدة. عند تكوين حجم وحدات التخزين المؤقتة، يجب أن يكون الحجم أقل من السعة المتوفرة للقرص المؤقت للعقدة الواحدة.

قم بتشغيل الأمر التالي للتحقق من السعة المتوفرة للقرص المؤقت لعقدة واحدة.

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-nvme-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

في هذا المثال، السعة المتوفرة للقرص المؤقت لعقدة واحدة هي 75031990272 بايت أو 69 غيغابايت.

فصل وحدة تخزين ثابتة وإعادة إرفاقها

لفصل وحدة تخزين ثابتة، احذف الكبسولة المرفقة بوحدة التخزين الثابتة.

kubectl delete pods <pod-name>

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

للتحقق من وحدة التخزين الثابتة التي ترتبط بها مطالبة وحدة التخزين الثابتة، قم بتشغيل:

kubectl get pvc <persistent-volume-claim-name>

توسيع تجمع تخزين

يمكنك توسيع تجمعات التخزين المدعومة من NVMe المحلي لتوسيع نطاقها بسرعة وبدون وقت تعطل. تقليص تجمعات التخزين غير مدعوم حاليا.

نظرا لأن تجمع التخزين المدعوم من القرص المؤقت يستخدم موارد التخزين المحلية على عقد نظام مجموعة AKS (VMs)، فإن توسيع تجمع التخزين يتطلب إضافة عقدة أخرى إلى نظام المجموعة. اتبع هذه الإرشادات لتوسيع تجمع التخزين.

  1. قم بتشغيل الأمر التالي لإضافة عقدة إلى نظام مجموعة AKS. استبدل <cluster-name>و <nodepool name>و <resource-group-name> بقيمك الخاصة. للحصول على اسم تجمع العقدة، قم بتشغيل kubectl get nodes.

    az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
    
  2. قم بتشغيل kubectl get nodes وسترى أنه تمت إضافة عقدة إلى نظام المجموعة.

  3. قم بتشغيل kubectl get sp -A ويجب أن ترى أن سعة تجمع التخزين قد زادت.

حذف تجمع تخزين

إذا كنت تريد حذف تجمع تخزين، فقم بتشغيل الأمر التالي. استبدل <storage-pool-name> باسم تجمع التخزين.

kubectl delete sp -n acstor <storage-pool-name>

(راجع أيضًا )