خيارات التخزين للتطبيقات في خدمة Azure Kubernetes (AKS)

قد تحتاج التطبيقات التي تعمل في خدمة Azure Kubernetes إلى تخزين البيانات واستردادها. في حين أن بعض أحمال عمل التطبيقات يمكن أن تستخدم تخزينًا محليًا وسريعًا على عقد غير ضرورية ومفرغة، يتطلب البعض الآخر تخزينًا يستمر على وحدات تخزين بيانات أكثر انتظامًا داخل نظام Azure الأساسي.

قد تحتاج الأجهزة المتعددة إلى:

  • مشاركة نفس أحجام البيانات.
  • أعد إرفاق وحدات تخزين البيانات إذا تمت إعادة جدولة الكبسولة على عقدة مختلفة.

قد تحتاج أيضا إلى جمع وتخزين البيانات الحساسة أو معلومات تكوين التطبيق في pods.

تقدم هذه المقالة المفاهيم الأساسية التي توفر التخزين لتطبيقاتك في AKS:

رسم تخطيطي لخيارات التخزين للتطبيقات في نظام مجموعة Azure Kubernetes Services (AKS).

قرص نظام التشغيل المؤقت

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

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

إشعار

عندما لا تطلب صراحة أقراص Azure المدارة لنظام التشغيل، يتم تعيين AKS افتراضيا على نظام التشغيل المؤقت إذا كان ذلك ممكنا لتكوين تجمع عقدة معين.

تتوفر متطلبات الحجم والتوصيات لأقراص نظام التشغيل المؤقتة في وثائق Azure VM. فيما يلي بعض الاعتبارات العامة للتحجيم:

  • إذا اخترت استخدام حجم الجهاز الظاهري الافتراضي ل AKS Standard_DS2_v2 SKU بحجم قرص نظام التشغيل الافتراضي 100 غيغابايت، فإن حجم الجهاز الظاهري الافتراضي يدعم نظام التشغيل المؤقت، ولكن يحتوي فقط على 86 غيغابايت من حجم ذاكرة التخزين المؤقت. سيكون هذا التكوين افتراضيا على الأقراص المدارة إذا لم تحدده بشكل صريح. إذا طلبت نظام تشغيل سريع الزوال، فستتلقى خطأ في التحقق من الصحة.

  • إذا طلبت نفس Standard_DS2_v2 SKU مع قرص نظام التشغيل 60 غيغابايت، فإن هذا التكوين سيكون افتراضيا لنظام التشغيل المؤقت. الحجم المطلوب وهو 60 جيبي بايت أصغر من الحد الأقصى لحجم ذاكرة التخزين المؤقت وهو 86 غيغابايت.

  • إذا قمت بتحديد Standard_D8s_v3 SKU مع قرص نظام التشغيل 100 جيجابايت، فإن حجم الجهاز الظاهري هذا يدعم نظام التشغيل المؤقت ويحتوي على 200 جيبي بايت من مساحة ذاكرة التخزين المؤقت. إذا لم تحدد نوع قرص نظام التشغيل، فسيتلقى تجمع العقدة نظام تشغيل سريع الزوال بشكل افتراضي.

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

  • إذا طلبت نفس حجم الجهاز الظاهري Standard_E2bds_v5 مع قرص نظام التشغيل 60 غيغابايت، فسيتم تعيين هذا التكوين افتراضيا على أقراص نظام التشغيل المؤقتة. الحجم المطلوب وهو 60 جيبي بايت أصغر من الحد الأقصى للتخزين المؤقت وهو 75 جيبي بايت.

  • إذا حددت Standard_E4bds_v5 SKU مع قرص نظام التشغيل 100-GiB، فإن حجم الجهاز الظاهري هذا يدعم نظام التشغيل المؤقت ويحتوي على 150 جيبي بايت من التخزين المؤقت. إذا لم تحدد نوع قرص نظام التشغيل، يقوم Azure بشكل افتراضي بتوفير قرص نظام تشغيل سريع الزوال إلى تجمع العقدة.

المفاتيح التي يديرها العميل

يمكنك إدارة التشفير لقرص نظام التشغيل المؤقت باستخدام المفاتيح الخاصة بك على نظام مجموعة AKS. لمزيد من المعلومات، راجع استخدام المفتاح المدار بواسطة العميل مع قرص Azure على AKS.

الأحجام

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

يتم إنشاء وحدات التخزين التقليدية كموارد Kubernetes مدعومة بواسطة Azure Storage. يمكنك إنشاء وحدات تخزين البيانات يدويا لتعيينها إلى pods مباشرة أو أن تقوم Kubernetes بإنشائها تلقائيا. يمكن أن تستخدم وحدات تخزين البيانات: Azure Disk أو Azure Files أو Azure NetApp Files أو Azure Blobs.

إشعار

اعتمادا على VM SKU الذي تستخدمه، قد يكون لبرنامج تشغيل Azure Disk CSI حد وحدة تخزين لكل عقدة. بالنسبة لبعض الأجهزة الظاهرية عالية الأداء (على سبيل المثال، 16 ذاكرة أساسية)، الحد هو 64 وحدة تخزين لكل عقدة. لتحديد الحد لكل وحدة SKU للجهاز الظاهري، راجع عمود Max data disks لكل وحدة SKU VM معروضة. للحصول على قائمة بوحدات SKU للأجهزة الظاهرية المقدمة وحدود السعة التفصيلية المقابلة لها، راجع أحجام الجهاز الظاهري للأغراض العامة.

للمساعدة في تحديد الأنسب لحمل العمل الخاص بك بين Azure Files وAzure NetApp Files، راجع المعلومات المقدمة في المقالة Azure Files ومقارنة Azure NetApp Files.

قرص Azure

استخدم قرص Azure لإنشاء مورد Kubernetes DataDisk . تتضمن أنواع الأقراص ما يلي:

  • Premium SSDs (مستحسن لمعظم أحمال العمل)
  • الأقراص الفائقة
  • محركات الأقراص الثابتة القياسية (Standard SSDs)
  • محركات الأقراص الصلبة القياسية (Standard HDDs)

تلميح

بالنسبة لمعظم أحمال عمل الإنتاج والتطوير، استخدم Premium SSDs.

نظرا لأنه يتم تحميل قرص Azure على أنه ReadWriteOnce، فهو متاح فقط لعقدة واحدة. بالنسبة إلى وحدات التخزين التي يمكن الوصول إليها بواسطة pods على عقد متعددة في وقت واحد، استخدم Azure Files.

ملفات Azure

استخدم ملفات Azure لتحميل مشاركة Server Message Block (SMB) الإصدار 3.1.1 أو مشاركة نظام ملفات الشبكة (NFS) الإصدار 4.1. تتيح لك ملفات Azure مشاركة البيانات عبر عقد وقرون متعددة ويمكنها استخدام:

  • تخزين Azure Premium، المدعوم بمحركات أقراص صلبة عالية الأداء
  • تخزين Azure Standard، مدعوم بمحركات أقراص ثابتة عادية

ملفات Azure NetApp

  • تخزين Ultra
  • تخزين متميز
  • تخزين Standard

Azure Blob Storage

استخدم Azure Blob Storage لإنشاء حاوية تخزين blob وإدخالها باستخدام بروتوكول NFS v3.0 أو BlobFuse.

  • كائنات ثنائية كبيرة الحجم خاصة بالكُتل

أنواع الأحجام

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

تشمل أنواع الأحجام الشائعة في Kubernetes ما يلي:

emptyDir

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

سري

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

  1. إنشاء سر باستخدام واجهة برمجة تطبيقات Kubernetes.
  2. حدد الجراب أو النشر الخاص بك واطلب سرا محددا.
    • يتم توفير البيانات السرية فقط للعقد ذات الجراب المجدول الذي يحتاجها.
    • يتم تخزين السر في tmpfs، وليس مكتوبا على القرص.
  3. عند حذف آخر جراب على عقدة تتطلب بيانات سرية، يتم حذف السر من tmpfs للعقدة.
    • يتم تخزين الأسرار داخل مساحة اسم معينة ويتم الوصول إليها فقط بواسطة pods داخل نفس مساحة الاسم.

configMap

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

مثل استخدام بيانات سرية:

  1. إنشاء ConfigMap باستخدام Kubernetes API.
  2. طلب ConfigMap عند تحديد جهاز أو توزيع.
    • يتم تخزين التكوين الخرائط داخل مساحة اسم معينة ويتم الوصول إليها فقط بواسطة pods داخل نفس مساحة الاسم.

وحدات تخزين دائمة.

الكميات التي تم تحديدها وإنشاؤها كجزء من دورة حياة الكبسولة موجودة فقط حتى تقوم بحذف الكبسولة. غالبا ما تتوقع الحجيرات استمرار مركز تخزينها إذا تم إعادة جدولتها لمضيف مختلف أثناء حدث الصيانة، خاصة في “StatefulSets”. وحدة التخزين الدائمة (PV) هي مورد تخزين تم إنشاؤه وإدارته بواسطة واجهة برمجة تطبيقات Kubernetes التي يمكن أن تستمر بعد مدة بقاء حجيرة فردية.

يمكنك استخدام خدمات بيانات Azure Storage التالية لتوفير وحدة التخزين الثابتة:

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

رسم تخطيطي لوحدات التخزين الثابتة في نظام مجموعة Azure Kubernetes Services (AKS).

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

هام

لا يمكن مشاركة وحدات التخزين الثابتة من قبل Windows وLinux pods بسبب الاختلافات في دعم نظام الملفات بين نظامي التشغيل.

فئات التخزين.

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

تحدد فئة التخزين أيضا نهج الاسترداد. عند حذف وحدة التخزين الثابتة، يتحكم نهج الاسترداد في سلوك مورد Azure Storage الأساسي. يمكن حذف المورد الأساسي أو الاحتفاظ به للاستخدام مع جراب مستقبلي.

بالنسبة للمجموعات التي تستخدم واجهة تخزين الحاوية (CSI)، يتم إنشاء فئات التخزين الإضافية التالية:

فئة التخزين ‏‏الوصف
managed-csi يستخدم تخزين Azure Standard SSD المكرر محليا (LRS) لإنشاء قرص مدار. تضمن سياسة الاسترداد حذف قرص Azure الأساسي عند حذف وحدة التخزين الدائمة التي استخدمته. تقوم فئة التخزين أيضا بتكوين وحدات التخزين الثابتة لتكون قابلة للتوسيع. يمكنك تحرير مطالبة وحدة التخزين الثابتة لتحديد الحجم الجديد.
managed-csi-premium يستخدم Azure Premium التخزين المتكرر محليا (LRS) لإنشاء قرص مدار. تضمن سياسة الاسترداد حذف قرص Azure الأساسي عند حذف وحدة التخزين الدائمة التي استخدمته. وبالمثل، تسمح فئة التخزين هذه بتوسيع الأحجام الثابتة.
azurefile-csi يستخدم تخزين Azure Standard لإنشاء مشاركة ملف Azure. يضمن نهج الاسترداد حذف مشاركة ملف Azure الأساسية عند حذف وحدة التخزين الثابتة التي استخدمتها.
azurefile-csi-premium يستخدم تخزين Azure Premium لإنشاء مشاركة ملف Azure. يضمن نهج الاسترداد حذف مشاركة ملف Azure الأساسية عند حذف وحدة التخزين الثابتة التي استخدمتها.
azureblob-nfs-premium يستخدم تخزين Azure Premium لإنشاء حاوية تخزين Azure Blob والاتصال باستخدام بروتوكول NFS v3. يضمن نهج الاسترداد حذف حاوية تخزين Azure Blob الأساسية عند حذف وحدة التخزين الثابتة المستخدمة.
azureblob-fuse-premium يستخدم تخزين Azure Premium لإنشاء حاوية تخزين Azure Blob والاتصال باستخدام BlobFuse. يضمن نهج الاسترداد حذف حاوية تخزين Azure Blob الأساسية عند حذف وحدة التخزين الثابتة المستخدمة.

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

هام

بدءاً من Kubernetes الإصدار 1.21، تستخدم AKS برامج تشغيل CSI فقط بشكل افتراضي ويتم تمكين ترحيل CSI. بينما تستمر وحدات التخزين الثابتة الموجودة داخل الشجرة في العمل، بدءا من الإصدار 1.26، لن تدعم AKS وحدات التخزين التي تم إنشاؤها باستخدام برنامج التشغيل داخل الشجرة والتخزين المخصص للملفات والقرص.

default ستكون الفئة هي نفسها managed-csi.

يمكنك إنشاء فئة تخزين لاحتياجات أخرى باستخدام kubectl. يستخدم المثال التالي الأقراص المدارة المتميزة ويحدد أنه يجب الاحتفاظ ب Azure Disk الأساسي عند حذف pod:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-premium-retain
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_ZRS
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

إشعار

يوفق AKS بين فئات التخزين الافتراضية وسيحل محل أي تغييرات تجريها على فئات التخزين هذه.

لمزيد من المعلومات حول فئات التخزين، راجع StorageClass في Kubernetes.

المطالبة بوحدات التخزين الدائمة.

تطلب مطالبة وحدة التخزين الدائمة (PVC) تخزين فئة تخزين معينة ووضع الوصول وحجمها. يمكن لخادم Kubernetes API توفير مورد Azure Storage الأساسي ديناميكيا إذا لم يتمكن أي مورد موجود من تلبية المطالبة استنادا إلى فئة التخزين المحددة.

يتضمن تعريف الحجيرة تحميل وحدة التخزين بمجرد توصيل وحدة التخزين إلى حجيرة.

رسم تخطيطي لمطالبات وحدة التخزين الثابتة في نظام مجموعة Azure Kubernetes Services (AKS).

بمجرد تعيين مورد تخزين متوفر إلى الجراب الذي يطلب التخزين، يتم ربط وحدة التخزين الدائمة بمطالبة وحدة تخزين ثابتة. يتم تعيين وحدات التخزين الدائمة إلى المطالبات في تعيين 1:1.

يظهر مثال بيان YAML التالي مطالبة وحدة تخزين ثابتة تستخدم فئة التخزين المدارة المتميزة ويطلب قرص Azure بحجم 5 غيغيت :

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

عندما تنشئ تعريف جهاز، فإنك تحدد أيضًا:

  • المطالبة بالحجم الثابت لطلب التخزين المطلوب.
  • تحميل وحدة التخزين لتطبيقاتك لقراءة البيانات وكتابتها.

يوضح المثال التالي بيان YAML كيف يمكن استخدام مطالبة وحدة التخزين الثابتة السابقة لإدخال وحدة تخزين على / mnt / azure :

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      volumeMounts:
      - mountPath: "/mnt/azure"
        name: volume
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-managed-disk

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

...      
      volumeMounts:
      - mountPath: "d:"
        name: volume
      - mountPath: "c:\k"
        name: k-dir
...

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

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

لمعرفة كيفية استخدام برامج تشغيل CSI، راجع مقالات الكيفية التالية:

لمزيد من المعلومات حول مفاهيم Kubernetes وAKS الأساسية، راجع المقالات التالية: