ملاحظة perev. : تحدثنا لأول مرة عما يسمى المكونات الإضافية للتخزين Kubernetes (ملحقات حجم CSI خارج الشجرة) في مراجعتنا لإصدار K8s 1.9 ، حيث ظهرت هذه الميزة في حالة إصدار ألفا. قام مؤلف المادة الجديدة ، Anoop Vijayan Maniankara (مهندس DevOps الرائد في شركة Tuxera الفنلندية) ، بجمع معلومات أساسية حول الأفكار وجهاز CSI ، مما يساعد على التعرف بسرعة على المفهوم الجديد ، والذي ، وفقًا لبعض موظفينا ، "سيكون الشيء الكبير التالي". من أجل دراسة أكثر تفصيلاً وتقنية لـ CSI ، يتم توفير روابط مفيدة في نهاية المقالة ، ومن بينها سأسلط الضوء بشكل خاص على عرض أحد مؤلفي هذه المواصفات (Jie Yu). ولكن لا يزال الأمر يستحق البدء بـ "الصورة الكبيرة" ...
واجهة تخزين الحاويات (CSI) هي مبادرة لتوحيد واجهة المخازن ، مثل Ceph و Portworx و NetApp وما إلى ذلك ، في أنظمة تنسيق الحاويات: Kubernetes و Mesos و Docker Swarm و Cloud Foundry وغيرها. والفكرة هي أن تنفيذ الشركة المصنعة للتخزين واحد CSI مضمونة للعمل مع جميع هذه الأنظمة.
مصدر الصورة: تقرير Jie Yu CSI في CloudNativeCon EU 2018يرجى ملاحظة : ستتحدث هذه المقالة فقط عن التزويد الديناميكي. تتجاوز الأحجام المكونة مسبقًا والأحجام المرنة نطاقها. إذا كنت ترغب في فهم ما سيتم مناقشته بشكل أفضل ، يجب عليك أولاً قراءة وثائق Kubernetes . بالإضافة إلى ذلك ، لن تتعمق المقالة في تفاصيل تنفيذ CSI. سأقدم نظرة عامة عالية المستوى على CSI وأرسي الأساس لإنشاء حجم CSI. أخيرًا ، يتم استخدام معلومات Kubernetes للحصول على أمثلة وروابط إلى التفاصيل.قبل الغوص في الموضوع ، من المهم أيضًا معرفة الحاويات الجانبية في Kubernetes. يوسعون قدرات الحاوية الرئيسية (
الرئيسية ) ، الموجودة في نفس الموقد ، ومشاركة التخزين والشبكة.
في وقت كتابة هذه السطور
(13 أغسطس 2018) ، كان لمكونات CSI الإصدارات التالية:

قبل CSI
تم إصدار الإصدار الأول من CSI - v0.1 - في ديسمبر 2017. بالطبع ، يمكن إجراء التزويد للتخزين الخارجي في أنظمة التنسيق حتى قبل ظهوره. في حالة Kubernetes ، كانت الإضافات الصوتية - الإضافات الصوتية مسؤولة عن احتياجات التخزين:

كما ترون من الصورة أعلاه ، فإن هذه المكونات الإضافية هي جزء من جوهر نظام التنسيق. ولهذا السبب ، حدثت المشكلات التالية التي تم ذكرها في
مستند هندسة CSI :
- يرتبط تطوير البرنامج المساعد لوحدة التخزين ارتباطًا وثيقًا بإصدارات Kubernetes.
- يتحمل مطورو / مجتمع Kubernetes مسؤولية اختبار ودعم جميع المكونات الإضافية بدلاً من اختبار وصيانة واجهة برمجة تطبيقات إضافية ثابتة ؛
- يمكن أن تسقط الأخطاء في الإضافات الصوتية ليس فقط البرنامج المساعد نفسه ، ولكن أيضًا مكونات Kubernetes الهامة ؛
- الإضافات تحصل على الامتيازات الكاملة لمكونات Kubernetes (kubelet و kube-controller-manager) ؛
- يضطر مطورو المكوِّن الإضافي إلى نشر شفرة المصدر للمكوِّن الإضافي ولا يمكنهم اختيار مسار الثنائيات.
فهم CSI
تقديم CSI ، أصدر فريق Kubernetes مكونات خارجية ليست جزءًا من النواة ومصممة للتفاعل مع المكونات الخارجية الأخرى المقدمة من قبل الشركات المصنعة. يتواصلون مع
بعضهم البعض من خلال مآخذ المجال
( مآخذ المجال
UNIX - ترجمة تقريبا.) باستخدام
gRPC .

المكونات الخارجية ل Kubernetes
يتم تنفيذها ودعمها بالكامل من قبل فريق Kubernetes وتوسيع أنشطة Kubernetes خارج Kubernetes. لا يمكن للجهات المصنعة أن تقلق على الإطلاق بشأن ميزات تنفيذها. تتكون من ثلاثة أجزاء:
- مسجل برنامج التشغيل عبارة عن حاوية جانبية تسجل برنامج تشغيل CSI في kubelet وتضيف برنامج تشغيل
NodeId
إلى تسمية كائن العقدة في Kubernetes API. للقيام بذلك ، يتفاعل مع خدمة برنامج تشغيل Identity CSI (لمزيد من التفاصيل ، انظر أدناه - تقريبًا ترجمة.) ويستدعي GetNodeId
على CSI ؛ - الموفر الخارجي - حاوية جانبية تراقب كائنات PersistentVolumeClaim في واجهة برمجة تطبيقات Kubernetes وتستدعي
CreateVolume
و DeleteVolume
لبرنامج نقطة النهاية ؛ - المرفق الخارجي عبارة عن حاوية جانبية تراقب كائنات VolumeAttachment في واجهة برمجة تطبيقات Kubernetes وتستدعي الأمرين
ControllerUnpublish
و ControllerUnpublish
لبرنامج نقطة النهاية.
مكون خارجي من الشركة المصنعة للتخزين / طرف ثالث
التنفيذ الخاص بالمورد. ينفذ كل مصنع واجهات برمجة التطبيقات الضرورية كجزء من وظائف خدمة gRPC. على سبيل المثال ، تنفيذ
GCE PD أو
Ceph ، إلخ. وتتكون أيضًا من ثلاثة مكونات:
- هوية CSI - بشكل أساسي لتحديد المكون الإضافي: تأكد من أنه يعمل ، وأعد المعلومات الأساسية حول المكون الإضافي ؛
service Identity { // rpc GetPluginInfo(GetPluginInfoRequest) returns (GetPluginInfoResponse) {} // , Controller rpc GetPluginCapabilities(GetPluginCapabilitiesRequest) returns (GetPluginCapabilitiesResponse) {} // , , rpc Probe (ProbeRequest) returns (ProbeResponse) {} }
( kubernetes-csi-الهوية.بروتو ) - يتحكم CSI في التحكم في المجلدات وإدارتها: الإنشاء والحذف والإرفاق / الفصل واللقطات وما إلى ذلك ؛
service Controller { // provisioning rpc CreateVolume (CreateVolumeRequest) returns (CreateVolumeResponse) {} // rpc DeleteVolume (DeleteVolumeRequest) returns (DeleteVolumeResponse) {} // rpc ControllerPublishVolume (ControllerPublishVolumeRequest) returns (ControllerPublishVolumeResponse) {} // rpc ControllerUnpublishVolume (ControllerUnpublishVolumeRequest) returns (ControllerUnpublishVolumeResponse) {} // , / rpc ValidateVolumeCapabilities (ValidateVolumeCapabilitiesRequest) returns (ValidateVolumeCapabilitiesResponse) {} // rpc ListVolumes (ListVolumesRequest) returns (ListVolumesResponse) {} // rpc GetCapacity (GetCapacityRequest) returns (GetCapacityResponse) {} // , GetCapacity Snapshotting rpc ControllerGetCapabilities (ControllerGetCapabilitiesRequest) returns (ControllerGetCapabilitiesResponse) {} // rpc CreateSnapshot (CreateSnapshotRequest) returns (CreateSnapshotResponse) {} // rpc DeleteSnapshot (DeleteSnapshotRequest) returns (DeleteSnapshotResponse) {} // rpc ListSnapshots (ListSnapshotsRequest) returns (ListSnapshotsResponse) {} }
( kubernetes-csi-controller.proto ) - عقدة CSI مسؤولة عن مراقبة نشاط الحجم على مضيف Kubernetes.
service Node { // staging- rpc NodeStageVolume (NodeStageVolumeRequest) returns (NodeStageVolumeResponse) {} // staging- rpc NodeUnstageVolume (NodeUnstageVolumeRequest) returns (NodeUnstageVolumeResponse) {} // staging rpc NodePublishVolume (NodePublishVolumeRequest) returns (NodePublishVolumeResponse) {} // rpc NodeUnpublishVolume (NodeUnpublishVolumeRequest) returns (NodeUnpublishVolumeResponse) {} // rpc NodeGetVolumeStats (NodeGetVolumeStatsRequest) returns (NodeGetVolumeStatsResponse) {} // ID rpc NodeGetId (NodeGetIdRequest) returns (NodeGetIdResponse) { option deprecated = true; } // (capabilities) rpc NodeGetCapabilities (NodeGetCapabilitiesRequest) returns (NodeGetCapabilitiesResponse) {} // NodeGetId rpc NodeGetInfo (NodeGetInfoRequest) returns (NodeGetInfoResponse) {} }
( kubernetes-csi-node.proto )
الخلاصة
جلب ظهور CSI ميزة واضحة واضحة لأنظمة التنسيق ومصنعي التخزين. بالإضافة إلى ذلك ، تساعد الواجهات المحددة جيدًا في التنفيذ والاختبار البسيط لـ CSI لكل من المطورين وأنظمة التنسيق المستقبلية. إذا قررت البدء في تنفيذ CSI الخاص بك بعد قراءة هذه المقالة ، فإن Fatih Arslan's
How to write a Container Storage Interface (CSI) plugin هو نقطة بداية جيدة.
المراجع
- مواصفات CSI ؛
- حاويات جانبية في Kubernetes ؛
- تقرير Jie Yu CSI عن KubeCon EU: CloudNativeCon EU 2018 ( وهنا الفيديو من هذا العرض التقديمي - ترجمة تقريبًا) ؛
- وثيقة هندسة CSI
- الوثائق الحالية حول CSI من Kubernetes ؛
- وثائق Kubernetes الموقوفة CSI .
ملاحظة من المترجم
اقرأ أيضا في مدونتنا: