استخدام Azure Container Storage Preview مع أقراص Azure المدارة

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

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

  • في حال لم يكن لديك اشتراك 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 Container Storage مع الأقراص المدارة من Azure، يجب أن يحتوي نظام مجموعة AKS على تجمع عقدة من ثلاثة أجهزة ظاهرية للأغراض العامة على الأقل مثل standard_d4s_v5 لعقد نظام المجموعة، ولكل منها أربع وحدات معالجة مركزية ظاهرية (vCPUs) كحد أدنى.

التوفر الإقليمي

يتوفر Azure Container Storage فقط لمجموعة فرعية من مناطق Azure:

  • (إفريقيا) جنوب إفريقيا، الشمال
  • (آسيا والمحيط الهادئ) شرق أستراليا
  • (آسيا والمحيط الهادئ) شرق آسيا
  • (Asia Pacific) Japan East
  • (آسيا والمحيط الهادئ) كوريا الوسطى
  • (آسيا والمحيط الهادئ) جنوب شرق آسيا
  • (آسيا والمحيط الهادئ) الهند الوسطي
  • (أوروبا) وسط فرنسا
  • (أوروبا) شمال أوروبا
  • (أوروبا) غرب أوروبا
  • (أوروبا) جنوب المملكة المتحدة
  • (أوروبا) وسط السويد
  • (أوروبا) شمال سويسرا
  • (الشرق الأوسط) شمال الإمارات العربية المتحدة
  • (أمريكا الشمالية) شرق الولايات المتحدة الأمريكية
  • (أمريكا الشمالية) شرق الولايات المتحدة الأميركية 2
  • (أمريكا الشمالية) غرب الولايات المتحدة
  • (أمريكا الشمالية) منطقة غرب الولايات المتحدة الأمريكية 2
  • (أمريكا الشمالية) منطقة غرب الولايات المتحدة الأمريكية 3
  • (أمريكا الشمالية) وسط الولايات المتحدة الأمريكية
  • (أمريكا الشمالية) شمال وسط الولايات المتحدة
  • (أمريكا الشمالية) جنوب وسط الولايات المتحدة الأمريكية
  • (أمريكا الشمالية) غرب وسط الولايات المتحدة
  • (أمريكا الشمالية) منطقة وسط كندا
  • (أمريكا الشمالية) شرق كندا
  • (أمريكا الجنوبية) جنوب البرازيل

إنشاء تجمع تخزين

أولا، قم بإنشاء تجمع تخزين، وهو تجميع منطقي للتخزين لمجموعة Kubernetes الخاصة بك، عن طريق تعريفه في ملف بيان YAML.

إذا قمت بتمكين Azure Container Storage باستخدام az aks create أو az aks update أوامر، فقد يكون لديك بالفعل تجمع تخزين. استخدم kubectl get sp -n acstor للحصول على قائمة تجمعات التخزين. إذا كان لديك تجمع تخزين متوفر بالفعل تريد استخدامه، يمكنك تخطي هذا القسم والمتابعة إلى عرض فئات التخزين المتوفرة. إذا كان لديك أقراص مدارة من Azure تم توفيرها بالفعل، يمكنك إنشاء تجمع تخزين تم توفيره مسبقا باستخدام هذه الأقراص.

هام

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

اتبع هذه الخطوات لإنشاء تجمع تخزين لأقراص Azure.

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

  2. ألصق التعليمات البرمجية التالية. يمكن أن تكون قيمة اسم تجمع التخزين ما تريد. بالنسبة إلى skuName، حدد مستوى الأداء والتكرار. القيم المقبولة هي Premium_LRS Standard_LRS StandardSSD_LRS UltraSSD_LRS Premium_ZRS PremiumV2_LRS StandardSSD_ZRS. للتخزين، حدد مقدار سعة التخزين للتجمع في Gi أو Ti. حفظ الملف.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    
  3. تطبيق ملف بيان YAML لإنشاء تجمع التخزين.

    kubectl apply -f acstor-storagepool.yaml 
    

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

    storagepool.containerstorage.azure.com/azuredisk created
    

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

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

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

إنشاء تجمع تخزين تم توفيره مسبقا

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

اتبع هذه الخطوات لإنشاء تجمع تخزين تم توفيره مسبقا لأقراص Azure.

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. لكل قرص تريد استخدامه، انتقل إلى القرص المدار من Azure وحدد الإعدادات> Properties. انسخ السلسلة بأكملها ضمن معرف المورد وضعها في ملف نصي.

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

  4. ألصق التعليمات البرمجية التالية. يمكن أن تكون قيمة اسم تجمع التخزين ما تريد. استبدل <resource-id> بمعرف المورد لكل قرص مدار. حفظ الملف.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. تطبيق ملف بيان YAML لإنشاء تجمع التخزين.

    kubectl apply -f acstor-storagepool.yaml 
    

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

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

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

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

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

تمكين التشفير من جانب الخادم باستخدام المفاتيح التي يديرها العميل

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

يتم تشفير جميع البيانات في حساب تخزين Azure في حالة الثبات. بشكل افتراضي، يتم تشفير البيانات باستخدام المفاتيح المُدارة من قِبل Microsoft. لمزيد من التحكم في مفاتيح التشفير، يمكنك توفير مفاتيح يديرها العميل (CMK) لتشفير وحدات التخزين الثابتة التي ستقوم بإنشائها من تجمع تخزين قرص Azure.

لاستخدام المفتاح الخاص بك، يجب أن يكون لديك Azure Key Vault مع مفتاح. يجب تمكين حماية التطهير في Key Vault، ويجب أن يستخدم نموذج إذن Azure RBAC. تعرف على المزيد حول المفاتيح المدارة من قبل العملاء على Linux.

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

  • يحدد keyVersion إصدار المفتاح الذي يجب استخدامه
  • keyName هو اسم المفتاح الخاص بك
  • keyVaultUri هو معرف المورد الموحد ل Azure Key Vault، على سبيل المثال https://user.vault.azure.net
  • تحدد الهوية هوية مدارة مع الوصول إلى المخزن، على سبيل المثال /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

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

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

  2. الصق في التعليمات البرمجية التالية، وقم بتوفير المعلمات المطلوبة، واحفظ الملف. يمكن أن تكون قيمة اسم تجمع التخزين ما تريد. بالنسبة إلى skuName، حدد مستوى الأداء والتكرار. القيم المقبولة هي Premium_LRS Standard_LRS StandardSSD_LRS UltraSSD_LRS Premium_ZRS PremiumV2_LRS StandardSSD_ZRS. للتخزين، حدد مقدار سعة التخزين للتجمع في Gi أو Ti. تأكد من توفير معلمات تشفير CMK.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. تطبيق ملف بيان YAML لإنشاء تجمع التخزين.

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

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

    storagepool.containerstorage.azure.com/azuredisk created
    

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

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

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

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

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

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

هام

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

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

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

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

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. تطبيق ملف بيان YAML لإنشاء PVC.

    kubectl apply -f acstor-pvc.yaml
    

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

    persistentvolumeclaim/azurediskpvc created
    

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

    kubectl describe pvc azurediskpvc
    

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

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

إنشاء جراب باستخدام 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: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. تطبيق ملف بيان YAML لنشر الجراب.

    kubectl apply -f acstor-pod.yaml
    

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

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

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  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
    

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

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

لفصل وحدة تخزين ثابتة، احذف الكبسولة المرفقة بوحدة التخزين الثابتة. استبدل <pod-name> باسم pod، على سبيل المثال fiopod.

kubectl delete pods <pod-name>

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

للتحقق من وحدة التخزين الثابتة التي ترتبط بها مطالبة وحدة التخزين الثابتة، قم بتشغيل kubectl get pvc <persistent-volume-claim-name>.

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

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

إشعار

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

اتبع هذه الإرشادات لتوسيع تجمع تخزين موجود لأقراص Azure.

  1. باستخدام محرر نص، افتح ملف بيان YAML الذي استخدمته لإنشاء تجمع التخزين، على سبيل المثال code acstor-storagepool.yaml.

  2. استبدل إدخال التخزين المحدد في ملف بيان YAML بالقيمة المطلوبة. يجب أن تكون هذه القيمة أكبر من السعة الحالية لتجمع التخزين. على سبيل المثال، إذا تم تعيين المواصفات إلى storage: 1Ti، فقم بتغييرها إلى storage: 2Ti. إذا قمت بإنشاء تجمع تخزين تم توفيره مسبقا، فلن يكون هناك إدخال تخزين لأن تجمع التخزين ورث حجم السعة من أقراص Azure المتوفرة مسبقا. إذا لم تشاهد إدخال تخزين في YAML، فأضف التعليمات البرمجية التالية التي تحدد سعة التخزين المطلوبة ثم احفظ ملف البيان:

    spec:
      resources:
        requests:
          storage: 2Ti
    
  3. تطبيق ملف بيان YAML لتوسيع تجمع التخزين.

    kubectl apply -f acstor-storagepool.yaml 
    
  4. قم بتشغيل هذا الأمر للتحقق من حالة تجمع التخزين. استبدل <storage-pool-name> بقيمة اسم تجمع التخزين.

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

    يجب أن تشاهد رسالة مثل "تجمع التخزين يتوسع." قم بتشغيل الأمر مرة أخرى بعد بضع دقائق ويجب أن تكون الرسالة قد اختفت.

  5. تشغيل kubectl get sp -A وينبغي أن يعكس تجمع التخزين الحجم الجديد.

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

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

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

(راجع أيضًا )