أخبار التقانات الحديثة
تعرّف على منصة Kubernetes لإدارة الحاويات
العدد 151 | شباط (فبراير)-2020

بقلم محمد بشار الدسوقي
مهندس معلوماتية

مع تطوُّر التطبيقات وتنوُّع منصات العمل التي تعمل عليها هذه التطبيقات ظهر تعريف مصطلح جديد أُطلق عليه "حاوية container"؛ وهي مجموعة من التطبيقات المُحتواة بطريقة تبقيها معزولة عن النظام المُضيف لها أو الذي تعمل عليه، بحيث تتيح للمطورين تحزيم وتغليف التطبيق مع كافة أجزائه واعتمادياته ومكتباته وشحنها كلها كتلة واحدة. وقد صُمِّمت الحاوية في اﻷصل لتمكِّن المطورين ومديري النظم من تطوير وإنتاج التطبيقات بصورة سهلة وقابلة للتكرار. وأصبحت الحاويات أكثر شيوعًا منذ إطلاق مشروع Docker للحاويات في عام 2013، وصارت التّطبيقات التي تعمل ضمن الحاويات أكثر انتشارًا، فأحدث ذلك حاجة لوجود مدير ومنسّق لهذه الحاويات وما تحويه من تطبيقات، فكان Kubernetes هو المفتاح الأساسي الذي ساهم في نجاح ثورة الحاويات بفضل قدرته على محو عوائق الإدارة وتنسيق عمل الحاويات.

 

ما هي عملية تنسيق أو تنظيم الحاويات Container Orchestration؟

تدعم الحاويات مفهوم "فصل الاهتمام أو العزل" على غرار البيئات الافتراضيّة (virtual machine)، لكن بكلفة أقل ومرونة أعلى. وساعدت على إيجاد مفهوم جديد لآلية تطوير ونشر وصيانة التطبيقات. ففي بنية الحاويات تُحزَّم مختلف الخدمات التي يعتمد عليها تطبيق ما لتشغيله ضمن حاويات منفصلة، وتُنشر في مجموعة من الأجهزة الفعليّة أو الوهميّة. وهذا هو بالضبط ما استدعى ضرورة وجود منسّق بين هذه الحاويات، فكان Kubernetes الأداة التي وفرت أتمتة النّشر والإدارة والتوسّع والتّوصيل للتطبيقات القائمة على الحاوية.

ما هو Kubernetes؟

هو مشروع مفتوح المصدر لتنسيق وتنظيم الحاويات، ازدادت أهميته ليصبح الأكثر شهرة في هذا المجال؛ فهو يتيح نشرَ وإدارةَ التطبيقات التي تعتمد على عدد من الحاويات multi-container applications. يتعامل Kubernetes في معظم الأحيان مع حاويات Docker (التي تعتبر الحاوية الأكثر شعبيّة)، ويمكن أن يتعامل أيضًا مع أي نظام حاويات يتوافق مع معايير Open Container Initiative (OCI)، وكان لاختفاء القيود على استعمال Kubernetes إضافة إلى كونه مفتوح المصدر دورٌ كبير في استعماله بحرية في تشغيل الحاويات وإدارتها (يمكن استعماله في بيئة خاصة أو في البيئة السحابية).

Google و Kubernetes

ولد Kubernetes في مختبرات Google باعتباره تطويرًا لمشروع عُرِف باسم Google Borg، وهو أداة استعملتها الشركة لإدارة الحاويات داخليًّا. عرّفت الشركة مشروعها الجديد بأنه مشروع مفتوح المصدر عام 2014، ويعزى ذلك لأهمية استعماله في تشغيل التطبيقات السحابيّة التي تعتمد على بنية الخدمات الموزّعة. تتوجه اهتمامات Google الى اعتماد الحاويات والخدمات مع Kubernetes الذي سيكون له الأثر في تشجيع الزبائن على استعمال خدماتها السحابية (تعمل Kubernetes أيضًا مع خدمات AWS لشركة Amazon و  AZURE لشركة Microsoft). وتعتمد مؤسسة Cloud Native Computing Foundation CNCF حاليًّا مشروع Kubernetes، وتعمل تحت مظلة مؤسسة Linux Foundation.

Kubernetes مقابل Docker ومقابل Docker Swarm

لا يمكن القول إنّ Kubernetes يحلّ محل Docker، وإنما يزيد من فعالية استعماله، لكن يمكننا أن نعتبر Kubernetes بديلًا عن بعض التقنيات المستعملة مع Docker مثل Docker Swarm. حيث يُعرَّف Docker Swarm بأنه المنسّق الافتراضي لحاويات Docker. يمكن أن يُستعمل Docker Swarm عوضًا عن Kubernetes في تنسيق الحاويات، لكن شركة Docker Inc. اختارت جعل Kubernetes جزءًا من Docker Community لهذه العملية عوضًا عن Swarm. وكذلك لا يمكن اعتبار Kubernetes مجرد بديل عن Docker Swarm، لأنه أعقد بكثير ويتطلّب مزيدًا من الجهد لإتمام عملية النشر deployment، لكن هذا الجهد يهدف الى توفير عائد كبير على المدى الطويل عن طريق توفير بنية تحتية مرنة وقابلة للإدارة بشكل أفضل. لهذا يمكن أن يكون Docker Swarm خيارًا بسيطًا في عملية تنسيق الحاويات ضمن بيئات التطوير أو في التجمعات الصغيرة للحاويات.

Kubernetes مقابل Mesos

يعتبر مشروع Mesos من شركة Apache من المشاريع المنافسة لمشروع Kubernetes، طوّرته شركة Twitter، وجاء ردًّا على مشروع Google Borg. ومع أن Mesos يقوم بعملية التنسيق بين الحاويات إلا أنّ أهدافه أكبر من ذلك بكثير؛ فهو يهدف إلى أن يكون نوعًا من نظام تشغيل سحابي يمكنه تنسيق المكونات من نوع الحاويات وغير الحاويات، وتحقيقًا لذلك يمكن تشغيل العديد من المنصّات المختلفة داخل Mesos ومن ذلك Kubernetes نفسه.

معمارية Kubernetes وكيف يعمل؟

يُبنى Kubernetes على مجموعة من المفاهيم والأفكار المجرّدة، بعضها معروف ومستعمل وبعضها خاص بمشروع Kubernetes.

عناقيد Kubernetes

يُعرّف عنقود Kubernetes بأنه مجموعة من العقد التي تشغِّل Kubernetes (التطبيق الذي يدير الحاويات في العنقود)، وتوجد عقدة رئيسية Master لإدارة بقية العقد ضمن عنقود Kubernetes والتحكم فيها وإرسال الأوامر. يمكن أن يوجد أكثر من عقدة رئيسية ضمن العنقود بوصفها نوعًا من الإتاحيّة العالية، لكن لا يمكن أن تعمل إلا عقدة رئيسية واحدة في الوقت نفسه؛ فهي المسؤولة عن جدولة الأعمال وإدارة التحكم بوجه عام.

عقدة Kubernetes (nodes and pods)

يمكن أن تكون العقدة ضمن حشد (عنقود) Kubernetes عقدةً فيزيائية أو افتراضية، حيث يتولى Kubernetes تشغيل التطبيق وإدارته (عمليّة النشر). وقد تتعلق عمليّة النشر بنوع العقدة (افتراضية أو فيزيائية) أو لا.

تسمّى أصغر وحدة جزئيّة قابلة تديرها Kubernetes وتستطيع العقد تشغيلها: "pod". ويمثّل كل pod نسخة واحدة من التطبيق الذي يعمل في Kubernetes. ويتكون كل pod من حاوية أو أكثر. وعندما يتعامل Kubernetes مع الحاويات يتعامل معها بناءً على انتمائها إلى pod معيّن، فيستطيع تشغيل أو توقيف الحاويات باعتبارها مجموعة ضمن pod معيّن. وهكذا نستطيع القول إنّ مفهوم pod يركّز انتباه المستعمل على التطبيق نفسه، وليس على الحاويات التي تشغّل التطبيق.

يُنشأ pod معيّن على مجموعة من العقد أو يُلغى منها بحسب الحالة المطلوبة التي يحتاجها المستعمل. ويَستعمل Kubernetes مفهومًا يسمَّى المتحكِّم controller؛ وهو مسؤول عن توسيع أو تقليص أو حتى إلغاء وحدات pod. يمكن اختيار المتحكِّم المناسب للتطبيق المُنشأ؛ فمثلًا يمكن اختيار StatefulSet Controller للتعامل مع التطبيقات التي تحتاج إلى استقرار أو استمرارية، وليست متغيّرة بتغيُّر الاستعمال. أما المتحكّم Deployment Controller فيوفر الموارد المناسبة للتطبيق حسب الاستعمال ديناميكيًّا، ويحدِّث التطبيق إلى نسخة جديدة، أو يتراجع عن النسخة الحاليّة من التطبيق إلى نسخة قديمة تعمل بشكل صحيح إذا ظهرت مشاكل في النسخة الحاليّة.

خدمات Kubernetes

لما كانت وحدات pod تُنشأ وتُلغى بحسب الحاجة، فيجب أن يوجد مفهوم مختلف يعرِّف حياة التطبيق بعيدًا عن التغيرات التي تطرأ على وحدات pods المؤلَّف منها؛ فالتطبيق ينبغي أن يكون مستقرًّا حتى لو تغيّرت وحدات pods التي تشغِّل الحاويات المؤلِّفة للتطبيق، وهذا يستدعي تعريف مفهوم الخدمة حيث تقدِّم Kubernetes خدمةً تصف كيفية وصول وحدات pods عن طريق الشبكة (الاتصال فيما بينها وملاحقة التغييرات الطارئة عليها)؛ فمثلًا وحدات pods التي تعرِّف عمليات back-end ينبغي أن تتعرَّف (تتصل شبكيًّا) بوحدات pods المسؤولة عن عمليات front-end. ولما كانت هذه الوحدات متغيّرة ينبغي أن يوجد متتبع لهذه التغيرات مسؤول عن صحّة عمل هذه الوحدات وتواصلها، وهو ما نسميه بالخدمة Service.

من الوحدات التي لها دور أساسي في عمل Kubernetes المجدوِل Scheduler، الذي يعمل على موازنة الحمل بين العقد، ومن ثَم موازنة الموارد، ويؤثر هذا على أداء التطبيق (يعمل المتحكّم على ضمان عملية الموازنة كما هو مشار إليها في الاعدادات).

توفِّر واجهة التخاطب Ingress API الوصول إلى خدمات عنقود Kubernetes خارجيًّا بواسطة بروتوكول HTTP.

لوحة تحكم Kubernetes

هي أحد المكوِّنات التي تساعد على التعامل مع المكونات الأخرى لعنقود Kubernetes؛ وهي واجهة وب يمكن بواسطتها التعامل مع التطبيقات (نشر التطبيق ومراقبته واستكشاف الأخطاء إن وجدت) وإدارة موارد العنقود. وهذه الواجهة تحتاج الى إضافة، فهي غير موجودة افتراضيًّا ضمن مكونات Kubernetes.

فوائد Kubernetes

أَدخلت Kubernetes مفاهيم وآليات جديدة كانت عاملًا مهمًّا للحث على استكشافه، وفيما يلي الميّزات والفوائد التي نحصل عليها باستعمال Kubernetes:

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

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

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

2) تعمل Kubernetes على تسهيل نشر التطبيقات المعدّة (المضبوطة) سلفًا وفق مخططات Helm. ويعدّ Helm مدير الحزم الأساسي لعنقود Kubernetes؛ فمثلًا يقوم Kubernetes بتشغيل العديد من التطبيقات باعتبارها مجموعة مترابطة من الحاويات. تأتي أهمية Helm هنا بتعريف آليّة “Chart” لوصف كيفية تشغيل التطبيق ضمن مجموعة من الحاويات.

يمكن إنشاء Chart من الصّفر لاستعماله في بناء التطبيق محليًّا، أو استعمال chart جاهزًا من أحد مخازن Helm المعدّ سلفًا ورُفعه على هذا المخزن.

            3) يبسّط Kubernetes إدارة كلٍّ من التخزين وكلمات السر بين الحاويات والموارد الأخرى المتعلّقة بالتطبيق.

            4) يمكن للتطبيقات التي تعمل ضمن Kubernetes أن تُشغَّل في بيئات هجينة (سحابة خاصة Private Cloud، أو سحابة عامة Public Cloud أو الاثنتين معًا).

من أين نحصل على Kubernetes

يتوفّر Kubernetes بأنواع متعددة، منها ما هو مفتوح المصدر، ومنها ما هو مدعوم تجاريًّا على الخدمة السحابية العامة. وأفضل طريقة لمعرفة مكان الحصول عليه هو حالة الاستعمال، فمثلًا إذا كنت ترغب أن تبنيه بنفسك، فهو متوفر بحزمة مفتوحة المصدر على منصّة GitHub، أما إذا كنت تستعمل Docker فإن النّسخ الحديثة منها توفر حزمة Kubernetes، أيضًا عندما تستعمل الخدمات السحابية مثل Google Cloud Platform أو Microsoft Azure أو Amazon جميعها توفّر خدمة Kubernetes.

إن اعتماد تقنية الحاويات قد لا يُحدث تحولًا هائلًا في مؤسستك ما لم تقم بالتحكم بكيفية إدارة ونشر الحاويات؛ إن واحدًا من أشهر أنظمة التشغيل ﻹدارة وتنظيم الحاويات هو Kubernetes.

قد ترغب كذلك بقراءة
تقانات جديدة
أخبار تقانية