استخدام التخزين الموزع على阿里yun في مجموعة K8S مبنية ذاتياً
Categories:
مقدمة
تمت كتابة هذا المقال في 2024.06.14، ويشرح كيفية استخدام التخزين الموزع على阿里yun في مجموعة K8S مبنية ذاتياً على阿里yun. يتم إرفاق روابط المستندات في النهاية. حيث أن وثائق阿里yun الرسمية باللغة الصينية، ولكن إعداد مكون تخزين阿里yun على github متاح حالياً باللغة الإنجليزية فقط. يُقترح على القراء ذوي الظروف المواتية قراءة النص الأصلي قدر الإمكان.
إعداد مكون التخزين
- إنشاء سياسة أذونات مخصصة: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- إنشاء دور RAM، منح سياسة الأذونات المخصصة، حفظ مؤقتًا
accesskeyوsecretkubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
- تثبيت برنامج تشغيل CSI، لا يوجد مخطط helm، يمكن التثبيت محليًا فقط (20240613).
git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.gitcd alibaba-cloud-csi-driver/deploy- إذا تم التثبيت في مجموعة مبنية ذاتياً على ECS阿里yun، يمكن تنفيذ الجملة التالية مباشرة، وإلا يرجى قراءة: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
helm upgrade --install alibaba-cloud-csi-driver ./chart --values chart/values-ecs.yaml --namespace kube-system
- التأكيد،
watch kubectl get pods -n kube-system -l app=csi-plugin
مرجع اختيار نوع التخزين
- الحد الأدنى لسعة قرص ECS السحابي هو 20GB، IOPS 3000، هذه السعة كبيرة نسبيًا، وليست مربحة جدًا.
- وحدة تخزين سحابة ديناميكية
- الوثائق الرسمية:
- لا تدعم وحدات التخزين السحابية الاستخدام عبر المناطق، فهي تخزين غير مشترك، ويمكن فقط لـ Pod واحد تعليقها في نفس الوقت. (تم اختباره عمليًا يمكن لعدة pods من نفس deployment تعليقها)
- يجب أن يتطابق نوع القرص مع نوع ECS لتعليقه، وإلا سيفشل التعليق. للحصول على العلاقة بين أنواع الأقراص وأنواع ECS، يرجى الرجوع إلى عائلة مواصفات المثيل.
- عند نشر التطبيق، يتم شراء الأقراص السحابية تلقائيًا من خلال StorageClass لإنشاء PV. إذا قمت بشراء قرص سحابي بالفعل، يُقترح استخدام وحدة تخزين سحابة ثابتة.
- لا يمكن أن تتجاوز سعة القرص السحابي المطلوبة الحد الأقصى للسعة للقرص الواحد.
- عند إعادة إنشاء Pod، سيتم تعليق القرص السحابي الأصلي. إذا كان لا يمكن جدولة Pod إلى المنطقة المتوفرة الأصلية بسبب قيود أخرى، فسوف يكون في حالة Pending.
- الأقراص السحابية التي يتم إنشاؤها ديناميكيًا هي أقراص سحابية مدفوعة حسب الاستخدام.
- ملخصات الاختبارات الأخرى:
- على الرغم من إمكانية تعليق القرص السحابي على عدة pods، إلا أن Pod واحد فقط يمكنه القراءة والكتابة، ولا يمكن لـ pods الأخرى القراءة والكتابة. لذلك، يمكن ضبط
accessModesفي pvc فقط إلىReadWriteOnce، ولا يؤدي التعديل إلى النتيجة الصحيحة. - إذا تم ضبط
reclaimPolicyلـ StorageClass إلىDelete، عند حذف PVC، سيتم حذف القرص السحابي تلقائيًا. - إذا تم ضبط
reclaimPolicyلـ StorageClass إلىRetain، عند حذف PVC، لن يتم حذف القرص السحابي تلقائيًا، ويجب حذفه يدويًا من المجموعة والوحة التحكم阿里yun.
- على الرغم من إمكانية تعليق القرص السحابي على عدة pods، إلا أن Pod واحد فقط يمكنه القراءة والكتابة، ولا يمكن لـ pods الأخرى القراءة والكتابة. لذلك، يمكن ضبط
- من الصعب العثور على حالات استخدام مناسبة.
- الوثائق الرسمية:
- وحدة تخزين سحابة ثابتة
- الوثائق الرسمية:
- إنشاء PV و PVC يدويًا
- لا تدعم وحدات التخزين السحابية الاستخدام عبر المناطق، فهي تخزين غير مشترك، ويمكن فقط لـ Pod واحد تعليقها في نفس الوقت.
- يجب أن يتطابق نوع القرص مع نوع ECS لتعليقه، وإلا سيفشل التعليق.
- يمكن اختيار قرص سحابي في حالة التعليق في نفس المنطقة والمنطقة المتوفرة مثل المجموعة.
- الوثائق الرسمية:
- وحدة تخزين سحابة ديناميكية
- تأخير كبير في عمليات NAS، أفضل أداء 2 مللي ثانية، تخزين عميق 10 مللي ثانية، الدفع حسب الاستخدام، أداء القراءة والكتابة أعلى نسبيًا مقارنةً بـ OSS
- وحدة تخزين OSS، https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
- OSS هو تخزين مشترك، ويمكنه تقديم خدمات التخزين المشتركة لعدة Pods في نفس الوقت.
- (20240613) حاليًا يدعم CentOS و Alibaba Cloud Linux و ContainerOS وأنظمة تشغيل Anolis.
- عند استخدام وحدة التخزين، يستخدم كل تطبيق اسم PV مستقل.
- وحدة تخزين OSS هي نظام ملفات FUSE يتم تعليقه باستخدام أداة ossfs.
- مناسب لسيناريوهات قراءة الملفات. على سبيل المثال، قراءة ملفات التكوين وملفات الفيديو وملفات الصور.
- غير مناسب لسيناريوهات تطبيقات كتابة الملفات. إذا لزم الأمر كتابة ملفات، يُقترح استخدام SDK لتنفيذ عمليات الكتابة أو استخدام خدمة وحدة تخزين NAS.
- يمكن تحسين أداء ossfs في مجالات التخزين المؤقت والأذونات من خلال تعديل معلمات التكوين.
- قيود استخدام ossfs
- ستؤدي عمليات الكتابة العشوائية أو الإلحاقية للملفات إلى إعادة كتابة جميع الملفات.
- بسبب الحاجة للوصول عن بعد إلى خادم OSS، فإن أداء عمليات البيانات الوصفية مثل قائمة الدلائل ضعيف.
- عمليات إعادة تسمية الملفات والمجلدات ليست ذرية.
- عند تعليق نفس OSS Bucket على عدة عميل، يعتمد ذلك على تنسيق المستخدم لسلوك كل عميل، على سبيل المثال، تجنب كتابة نفس الملف بواسطة عدة عملاء.
- لا يدعم الارتباطات الصلبة (Hard Link).
- عندما يكون CSI plugin إصدار v1.20.7 أو أقل، فإنه يكتشف فقط التعديلات المحلية، ولا يمكنه اكتشاف التعديلات الخارجية بواسطة عميل أو أدوات أخرى.
- لتجنب ارتفاع عبء النظام، لا يُستخدم في سيناريوهات القراءة والكتابة عالية التزامن.
- إذا كانت مجموعة مختلطة (جزء من العقد لا ينتمي إلى阿里yun)، فيمكن استخدام وحدة تخزين NAS و OSS فقط.
- الأقراص السحابية و NAS و OSS لديها قيود إقليمية.
الخلاصة، يتم طلب وتركيب الأقراص السحابية بشكل كامل للقرص، غير مناسبة للمشاركة. OSS لديه دقة تشغيل على مستوى الملف، ومشاكل في الأداء في سيناريوهات القراءة والكتابة عالية التزامن، وأنظمة التشغيل المدعومة محدودة.
- الأقراص السحابية مناسبة لسيناريوهات قواعد البيانات التي تحتاج إلى مساحة كبيرة وأداء عالٍ
- يمكن لباقي السيناريوهات ذات متطلبات الأداء المنخفضة اختيار NAS
- OSS غير مناسب لسيناريوهات الكتابة عالية التزامن في مجموعة阿里yun، ويمكن استخدامه في سيناريوهات القراءة المتزامنة.
توجد مشاكل في موقع وثائق阿里yun الرسمية غير الموحدة والتناقضات المتبادلة، ويجب على القارئ تحديد ذلك وفقًا لتاريخ الوثيقة، حيث قد تكون بعض السمات المعلنة غير المدعومة مدعومة بالفعل مع تحديث الإصدار، ويجب على القارئ إجراء بعض المحاولات بنفسه.
خطوات التشغيل
هذا دليل阿里yun الرسمي، بعد إكمال إعداد مكون التخزين阿里yun وفقًا للدليل أعلاه، يمكن إجراء النشر والاختبار وفقًا لـ استخدام وحدة تخزين NAS ثابتة.
ملاحظة: مستخدمو k3s سيواجهون مشكلة local-path-storage، قد يكون معلومات الخطأ كالتالي:
- فشل في توفير وحدة تخزين مع StorageClass “local-path”: claim.Spec.Selector غير مدعوم
- في انتظار إنشاء وحدة تخزين إما بواسطة المزود الخارجي ’localplugin.csi.alibabacloud.com’ أو يدويًا بواسطة مسؤول النظام. إذا كان إنشاء وحدة التخزين متأخرًا، يرجى التحقق من أن المزود يعمل ومسجل بشكل صحيح.
يجب تعيين storageClassName في persistentVolumeClaim إلى فارغ لتجنب استخدام local-path-storage الافتراضي لـ k3s.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
selector:
matchLabels:
alicloud-pvname: pv-nas
storageClassName: ""
مراجع
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/disk.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/deploy/chart/values.yaml
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-dynamically-provisioned-disk-volumes?#6d16e8a415nie
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/mount-statically-provisioned-nas-volumes?spm=a2c4g.11186623.0.0.125672b9VnrKw6