مقدّمة إلى مكونات نظام CoreOS


محمد هاني صباغ

ما هو CoreOS ؟

CoreOS هي توزيعة لينكس ممتازة أُنشئَت لجعل الأنظمة المنشورة deployments الكبيرة والقابلة للتحجيم على مُختلف البنى التحتية سهلة الإدارة والاستخدام . مُشتقة من نظام Chrome OS. تحتوي CoreOS على نظام إدارة خواديم خفيف وتستخدم حاويات Docker لاحتواء جميع التطبيقات الموجودة. هذا النظام يوفر إمكانية عزل العمليات عن بعضها البعض process isolation بالإضافة إلى توفير إمكانية تمرير التطبيقات عبر العنقود cluster بسهولة.

coreos-wordmark-horiz-color.thumb.png.82

لإدارة هذه العناقيد، تستخدم CoreOS مَخزَنَ قيم مفاتيح موزّع على المستوى العام للنظام (globally distributed key-value store) يُدعى etcd لتمرير الإعدادات بين العقد nodes، هذا المُكون هو أيضًا عبارة عن المنصة التي يتم استخدامها لاكتشاف الخدمات، مما يسمح للتطبيقات أن يتم إعدادها ديناميكيًا بناءً على المعلومات المتوفرة عبر الموارد المُشتركة.

لكي يتم جدولة وإدارة التطبيقات عبر العنقود ككلّ، يتم استخدام أداة تُدعى "fleet”, أداة fleet تخدم كنظام تهيئة أولي init system على امتداد العنقود بأكمله، يُمكن استخدامها لإدارة العمليات داخل العنقود بأكمله. هذا يسهل عملية إعداد التطبيقات عالية التوفر (highly available applications) وإدارة العنقود من مكان واحد. أداة Fleet تفعل ذلك عبر الارتباط بكل نظام systemd موجود داخل كل عقدة محلية منفصلة.

في هذا الدليل، سنعرّفك على بعض المفاهيم الأساسية حولCoreOS بالإضافة إلى تقديم كل واحدٍ من المكونات الداخلية التي تقوم بالسماح للنظام أن يعمل.

تصميم النظام

التصميم العام لـCoreOS يجعلها موجهةً نحو عمل العناقيد والحاويات. النظام المضيف الرئيسي بسيط للغاية ويتخلى عن العديد من المزايا التقليدية للخواديم العادية. في الواقع، CoreOS لا تمتلك نظام إدارة حزم حتّى. عوضًا عن هذا جميع التطبيقات الإضافية يتم تشغيلها كحاويات Docker، وهو الأمر الذي يسمح بعزل الخدمات وإدارتها خارجيًا بالإضافة إلى جعلها محمولة (portable).

عند الإقلاع، تقرأ CoreOS ملف إعداد يتم إنشاؤه بواسطة المستخدم يُدعى "cloud-config” لتنفيذ بعض الإعدادات الأولية. هذا الملف يسمح لـCoreOS أن تتصل بالعقد الأخرى ضمن العنقود وأن تبدأ الخدمات الأساسية بالإضافة إلى إعادة ضبط بعض المُعامِلات (parameters) المهمة. بفضل هذا تصبح CoreOS قادرة على الانضمام لأي عنقود كوحدة عاملة مباشرةً بعد الإنشاء.

عادةً، ملف "cloud-config” سيقوم في أدنى الأحوال بإخبار المُضِيف عن كيفية ضمّ عنقود موجود بالفعل، بالإضافة إلى أنه سيأمر المُضِيف ببدء عمليتين هما etcd و fleet. كل هذه الإجراءات الثلاثة مرتبطة ببعضها البعض فعليًا حيث أنها تسمح للمُضِيف الجديد أن يتصل مع الخواديم الموجودة ويوفر الأدوات الضرورية لضبط وإدارة كل عقدة داخل العنقود. بشكل أساسي، هذه هي المتطلبات اللازمة لربط عقدة تعمل بتوزيعةCoreOS بأي عنقود.

يتم استخدام عفريت (daemon) etcd لتخزين وتوزيع البيانات لكل جهازٍ مضيف داخل العنقود. هذا مفيد لضمان توافق الإعدادات بين الأجهزة، كما أنه يمكن استخدامه كمنصة تستخدمها الخدمات للإعلان عن نفسها. آلية اكتشاف الخدمات هذه يمكن أن يتم استخدامها أيضًا من قبل خدمات أخرى للاستعلام عن المعلومات بهدف ضبط خصائص إعدادات تلك الخدمات

عفريت fleet هو عبارة عن نظام تهيئة أولي موزّع (distributed init system). يقوم بعمله عن طريق الارتباط بنظام التهيئة الأولي systemd في كل جهازٍ مستقل داخل عنقود. وهو يقوم أيضًا بجدولة الخدمات عبر تقييد الأهداف التي يتم إليها نشر الأنظمة المنشورة (deployments) بناءً على مُدخلَات المستخدم. يمكن للمستخدمين معاملة العنقود بأكمله كوحدة واحدة باستخدام fleet عوضًا عن الحاجة للقلق حول كل خادومٍ بمفرده.

بما أنّه أصبحت لديك الآن فكرة عامة عن النظام ككلّ، فسنتعمق بالقليل من التفصيل حول دورِ كلِّ مكونٍ من هذه المكونات.

لمحة عامة على Docker

Docker هو نظام حاويات يستخدم LXC (يُعرف أيضًا باسم "Linux containers") ويستخدم فضاء تسمية النواة (kernel namespacing) بالإضافة إلى cgroups (اختصار لـ"مجموعات التحكم") بهدف عزل العمليات عن بعضها البعض.

عملية العزل تساعد على إبقاء البيئة التشغيلية للتطبيق نظيفة ومرتّبة. ميزة من ميزات هذا النظام هي أنه يجعل عملية توزيع البرمجيات لا تحتاج أيّ جهدٍ يذكر لفعلها. أيّ حاوية Docker يمكن أن يتم تشغيلها على أي منصة بغض النظر تمامًا عن البيئة التي تشغّلها. هذا يعني أنّ حاويةً تم بناءها على جهازٍ محمول يُمكن أيضًا أن يتم تشغيلها بسلاسة على عنقود يعمل على مستوى مراكز إدارة البيانات (data centers).

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

CoreOS تقوم بالاستفادة إلى أقصى حدود من حاويات Docker عبر استخدامها لأي تطبيق خارج مجموعة الحزم الضرورية لعملية التثبيت. هذا يعني أنه تقريبًا يجب أن يتم تشغيل كل شيء داخل حاوية. في حين أنّ هذا النظام يبدو أنه سيكون مُجهِدًا للتعامل معه في البداية، إلّا أنه يجعل عملية مزامنة العناقيد أسهل بكثير. CoreOS مُصممة بشكل أساسي ليتم تضمينها على مستوى العناقيد (مجموعة الخواديم المرتبطة ببعضها البعض وكل واحدٍ منها يُشكل عقدة)، وليس على مستوى الخواديم المنفصلة العادية.

هذا يجعل عملية توزيع الخدمات ونشرها أمرًا سهلًا باستخدام CoreOS. الأدوات والخدمات الموجودة ستسمح لك أنّ تقوم بتشغيل العمليات التي تريدها على أيٍّ من العُقد التي تمتلكها داخل العناقيد. Docker يسمح لهذه الخدمات والمهام أن يتم توزيعها كقطع داخلية الاحتواء عوضًا عن تطبيقات عادية يجب تثبيتها وضبطها على كلٍ عقدة بشكل منفصل.

لمحة عامة على Etcd

طُوّر etcd بشكل أساسي بهدف توفير مجموعة متوافقة من البيانات على المستوى العام لكلِ واحدٍ من العُقد داخل العنقود، بالإضافة إلى تمكين عملية اكتشاف الخدمات داخل العُقد.

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

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

للتفاعل مع البيانات في etcd، عليك بكل بساطة استخدم واجهة HTTP/JSON البرمجية البسيطة (يمكنك الوصل إليها عبر http://127.0.0.1:4001/v2/keys/ افتراضيًا)، أو يمكنك استخدام أداة موجودة بالفعل تُدعى etcdctl لقراءة البيانات. كلا الطريقتين تعتبران سهلة الاستخدام للتفاعل مع البيانات الموجودة بالمخزن.

من المهم الإدارك أنّ الواجهة البرمجية (API) عبر HTTP قادرة أيضًا على الوصول إلى التطبيقات التي يتم تشغيلها داخل حاويات Docker. هذا يعني أنّ إعدادات الحاويات المستقلة يمكنها أيضًا أن تضع في الحسبان القيم المخزّنة في etcd عند العمل.

لمحة عامة على Fleet

بهدف مزامنة عناقيد CoreOS التي تريد بناءها فعليًا، يتم استخدام أداة تدعى fleet. بسيطة التصميم والاستخدام للغاية، fleet تعمل كنظام تهيئة أولي على امتداد العنقود بأكمله.

كل عقدة مستقلة داخل بيئة عنقودية تتعامل مع نظام تهيئة systemd الأولي الخاص بها. وهو ما يتم استخدامه لتشغيل وإدارة الخدمات على الآلة المحلية. بعبارةٍ أبسط، ما يفعله fleet هو توفير واجهة للتحكم بكلّ أنظمة systemd المحلية الفرعية الموجودة داخل كل عقدة في العنقود.

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

يمكنك أيضًا تحديد شروط وضع الخدمات التي تشغلها. يمكنك أن تفرض على خدمة معينة أن تعمل أو ألّا تعمل على جهاز مُضيف معين اعتمادًا على مكانه أو ما يقوم الجهاز المُضيف فعلًا بتشغيله حاليًا والمزيد. بسبب أنّ fleet يستخدم إمكانيات systemd إلى أقصى الحدود لبدء العمليات المحلية فإنّ كل واحدٍ من الملفات المُختصة بتعريف الخدمات هي في الواقع وحدات لـsystemd (مع بضع خيارات إضافية). يمكنك تمرير ملفات الإعدادات هذه إلى fleet مرة واحدة فقط وبعدها يمكنك إدارتها للعنقود بأكمله.

هذه المرونة تجعل عملية إنشاء إعدادات عالية التوفر (highly available configurations) سهلة للغاية. مثلًا يمكنك أن تطلب أن يتم نشر حاويات خادوم الوب الخاص بك على عُقد (nodes) مختلفة. ويمكنك أيضًا أن تقوم بنشر حاوية مُساعدة فقط في العُقد التي تقوم بتشغيل الحاوية الأمّ.

يمكن استخدام أي عقدة من مجموعة العُقد لإدارة العنقود بأكمله باستخدام أداة fleetctl. هذا يسمح لك بجدولة الخدمات وإدارة العُقد ومشاهدة حالة النظام العامة والمزيد.. برنامج fleetctl سيكون أيضًا واجهتك الرئيسية للتعامل مع العنقود الخاص بك.

الخاتمة

CoreOS ربما تكون مختلفة عن توزيعات لينكس الأخرى التي قد تكون ألفتَها. كل قرار من قرارات تصميم هذه التوزيعة تم اتّخاذه أخذًا بهدف إدارة العناقيد ومحمولية التطبيقات في عين الاعتبار. هذا أنتجَ توزيعةً ممتازة هدفها الرئيسي هو تلبية احتياجات البُنَى التحتية الحديثة وتحجيم التطبيقات بسهولة.

 

ترجمة -وبتصرّف- للمقال An Introduction to CoreOS System Components

 





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن