تخزين البيانات في مجموعة Kubernetes

هناك عدة طرق لتكوين تخزين البيانات للتطبيقات التي تعمل على مجموعة Kubernetes. بعضها قديم بالفعل، والبعض الآخر ظهر مؤخرا. في هذه المقالة، سننظر في مفهوم ثلاثة خيارات لتوصيل أنظمة التخزين، بما في ذلك أحدثها - الاتصال عبر واجهة تخزين الحاويات.

تخزين البيانات في مجموعة Kubernetes

الطريقة الأولى: تحديد PV في بيان الكبسولة

بيان نموذجي يصف جرابًا في مجموعة Kubernetes:

تخزين البيانات في مجموعة Kubernetes

يتم تمييز أجزاء البيان التي تصف وحدة التخزين المتصلة وأين يتم تمييزها بالألوان.

في القسم الحجم قم بالإشارة إلى نقاط التثبيت (mountPath) - في أي دليل سيتم تثبيت المجلد الدائم داخل الحاوية، بالإضافة إلى اسم المجلد.

في القسم x يسرد جميع المجلدات المستخدمة في الكبسولة. حدد اسم كل مجلد، بالإضافة إلى النوع (في حالتنا: awsElasticBlockStore) ومعلمات الاتصال. تعتمد المعلمات المدرجة في البيان على نوع وحدة التخزين.

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

تم اختراع طريقة الاتصال هذه في البداية، عندما كان Kubernetes في مهدها، واليوم أصبحت الطريقة قديمة.

هناك عدة مشاكل عند استخدامه:

  1. يجب إنشاء جميع المجلدات يدويًا، ولا يمكن لـ Kubernetes إنشاء أي شيء لنا؛
  2. تعتبر معلمات الوصول لكل مجلد فريدة من نوعها، ويجب تحديدها في بيانات جميع القرون التي تستخدم المجلد؛
  3. لتغيير نظام التخزين (على سبيل المثال، الانتقال من AWS إلى Google Cloud)، يتعين عليك تغيير الإعدادات ونوع وحدات التخزين المثبتة في جميع البيانات.

كل هذا غير مريح للغاية، لذلك في الواقع يتم استخدام هذه الطريقة لتوصيل بعض أنواع وحدات التخزين الخاصة فقط: configMap، Secret،emptyDir،hostPath:

  • configMap وsecret عبارة عن وحدات تخزين خدمة تسمح لك بإنشاء وحدة تخزين تحتوي على ملفات من بيانات Kubernetes الموجودة في الحاوية.

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

  • hostPath - يسمح لك بتثبيت أي دليل على القرص المحلي للخادم الذي يعمل عليه التطبيق داخل حاوية التطبيق، بما في ذلك /etc/kubernetes. تعد هذه ميزة غير آمنة، لذا تحظر سياسات الأمان عادةً استخدام وحدات التخزين من هذا النوع. وبخلاف ذلك، سيتمكن تطبيق المهاجم من تحميل دليل HTC Kubernetes داخل حاويته وسرقة جميع شهادات المجموعة. عادةً، يُسمح باستخدام وحدات تخزين hostPath فقط من خلال تطبيقات النظام التي تعمل في مساحة اسم نظام kube.

أنظمة التخزين التي يعمل معها Kubernetes خارج الصندوق وترد في الوثائق.

الطريقة الثانية: التوصيل بمواقد SC/PVC/PV

طريقة الاتصال البديلة هي مفهوم فئة التخزين، PersistentVolumeClaim، PersistentVolume.

فئة التخزين يخزن معلمات الاتصال لنظام تخزين البيانات.

ثابت VolumeClaim يصف المتطلبات لما يحتاجه التطبيق.
حجم ثابت يخزن معلمات الوصول وحالة الحجم.

جوهر الفكرة: في بيان الكبسولة يشيرون إلى حجم من النوع PersistentVolumeClaim ويشيرون إلى اسم هذا الكيان في معلمةclaimName.

تخزين البيانات في مجموعة Kubernetes

يصف بيان PersistentVolumeClaim متطلبات حجم البيانات التي يتطلبها التطبيق. مشتمل:

  • حجم القرص
  • طريقة الوصول: ReadWriteOnce أو ReadWriteMany؛
  • رابط إلى فئة التخزين - في أي نظام تخزين بيانات نريد إنشاء وحدة التخزين.

يخزن بيان فئة التخزين نوع ومعلمات الاتصال بنظام التخزين. يحتاج المكعب إلى هذه العناصر لتركيب وحدة التخزين على العقدة الخاصة به.

تشير بيانات PersistentVolume إلى فئة التخزين ومعلمات الوصول لوحدة تخزين معينة (معرف وحدة التخزين، والمسار، وما إلى ذلك).

عند إنشاء PVC، ينظر Kubernetes إلى حجم الحجم وفئة التخزين المطلوبة، ويختار PersistentVolume مجانًا.

إذا لم تكن هذه الوحدات الكهروضوئية متوفرة، فيمكن لـ Kubernetes تشغيل برنامج خاص - Provisioner (يشار إلى اسمه في فئة التخزين). يتصل هذا البرنامج بنظام التخزين، وينشئ وحدة تخزين بالحجم المطلوب، ويتلقى معرفًا وينشئ بيان PersistentVolume في مجموعة Kubernetes، المرتبطة بـ PersistentVolumeClaim.

تتيح لك كل هذه المجموعة من التجريدات إزالة المعلومات حول نظام التخزين الذي يعمل به التطبيق من مستوى بيان التطبيق إلى مستوى الإدارة.

توجد جميع معلمات الاتصال بنظام تخزين البيانات في فئة التخزين، والتي يكون مسؤولو المجموعة مسؤولين عنها. كل ما عليك فعله عند الانتقال من AWS إلى Google Cloud هو تغيير اسم فئة التخزين إلى PVC في بيانات التطبيق. سيتم إنشاء حجم الثبات لتخزين البيانات في المجموعة تلقائيًا باستخدام برنامج Provisioner.

الطريقة الثالثة: واجهة تخزين الحاويات

جميع التعليمات البرمجية التي تتفاعل مع أنظمة التخزين المختلفة هي جزء من جوهر Kubernetes. يرتبط إصدار إصلاحات الأخطاء أو الوظائف الجديدة بالإصدارات الجديدة، ويجب تغيير التعليمات البرمجية لجميع الإصدارات المدعومة من Kubernetes. كل هذا يصعب الحفاظ عليه وإضافة وظائف جديدة.

لحل المشكلة، أنشأ المطورون من Cloud Foundry وKubernetes وMesos وDocker واجهة تخزين الحاويات (CSI) - وهي واجهة موحدة بسيطة تصف تفاعل نظام إدارة الحاويات وبرنامج تشغيل خاص (CSI Driver) يعمل مع برنامج تشغيل محدد. نظام التخزين. تم نقل كافة التعليمات البرمجية للتفاعل مع أنظمة التخزين من جوهر Kubernetes إلى نظام منفصل.

توثيق واجهة تخزين الحاويات.

عادةً ما يتكون برنامج تشغيل CSI من مكونين: Node Plugin وController plugin.

يعمل Node Plugin على كل عقدة وهو مسؤول عن تركيب وحدات التخزين وتنفيذ العمليات عليها. يتفاعل المكون الإضافي لوحدة التحكم مع نظام التخزين: يقوم بإنشاء وحدات التخزين أو حذفها، وتعيين حقوق الوصول، وما إلى ذلك.

في الوقت الحالي، تظل برامج التشغيل القديمة موجودة في نواة Kubernetes، ولكن لم يعد يُنصح باستخدامها ويُنصح الجميع بتثبيت برنامج تشغيل CSI خصيصًا للنظام الذي سيعملون به.

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

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

عند العمل مع Ceph، يوفر البرنامج المساعد CSI المزيد من الخيارات للعمل مع أنظمة التخزين من برامج التشغيل المضمنة.

  1. إنشاء القرص الديناميكي. عادةً ما يتم استخدام أقراص RBD فقط في وضع RWO، لكن CSI for Ceph يسمح باستخدامها في وضع RWX. يمكن للعديد من القرون الموجودة على العقد المختلفة تركيب نفس قرص RDB على العقد الخاصة بها والعمل معها بالتوازي. لكي نكون منصفين، ليس كل شيء مشرقًا جدًا - لا يمكن توصيل هذا القرص إلا كجهاز كتلة، مما يعني أنه سيتعين عليك تكييف التطبيق للعمل معه في وضع الوصول المتعدد.
  2. إنشاء لقطات. في مجموعة Kubernetes، يمكنك إنشاء بيان يتطلب إنشاء لقطة. سوف يراها البرنامج المساعد CSI ويأخذ لقطة من القرص. وبناءً عليه، يمكنك عمل نسخة احتياطية أو نسخة من PersistentVolume.
  3. زيادة حجم القرص على التخزين وPersistentVolume في مجموعة Kubernetes.
  4. الحصص. لا تدعم برامج تشغيل CephFS المضمنة في Kubernetes الحصص، ولكن يمكن لمكونات CSI الإضافية الجديدة مع أحدث إصدار من Ceph Nautilus تمكين الحصص على أقسام CephFS.
  5. مقاييس. يمكن أن يزود البرنامج الإضافي CSI Prometheus بمجموعة متنوعة من المقاييس حول وحدات التخزين المتصلة، وما هي الاتصالات التي تجري، وما إلى ذلك.
  6. علم الطوبولوجيا. يسمح لك بتحديد كيفية توزيع المجموعة جغرافيًا في البيانات، وتجنب توصيل نظام تخزين موجود في أمستردام بالقرون التي تعمل في لندن.

كيفية توصيل Ceph بمجموعة Kubernetes عبر CSI، راجع في الجزء العملي من محاضرة مدرسة Slurm المسائية. يمكنك أيضًا الاشتراك في دورة فيديو سيفوالتي ستنطلق في 15 أكتوبر.

مؤلف المقال: سيرجي بونداريف، مهندس معماري ممارس في Southbridge، مدير Kubernetes معتمد، أحد مطوري kubespray.

بوست بسيط ليس من أجل الدعاية بل من أجل الفائدة...

يقود PS Sergey Bondarev دورتين مكثفتين: محدثة قاعدة Kubernetes 28-30 سبتمبر والمتقدمة Kubernetes ميجا 14-16 أكتوبر.

تخزين البيانات في مجموعة Kubernetes

المصدر: www.habr.com

إضافة تعليق