خارطة طريق DevOps الديناميكية › مشاريع عملية 4 / 6 السابق التالي

مشروع من البداية إلى النهاية: HiveBox

مشروع من البداية إلى النهاية: HiveBox

يحبّ الجميع تقريبًا العسل، ونحن في DevOps Hive نحبّه أيضًا ونُقدّر دور النحل في كوكبنا! لأنّ النحل أساسي للناس والكوكب. ولهذا السبب، سيكون مشروعنا العملي الرئيسي في خارطة الطريق هذه من أجل النحل!

في هذا المشروع العملي المتكامل من البداية إلى النهاية، سنوظّف التقنية والبرمجيات مفتوحة المصدر لبناء واجهة برمجية (API) لتتبّع بيانات المستشعرات البيئية من openSenseMap، وهي منصّة لبيانات المستشعرات المفتوحة يمكن للجميع المشاركة فيها.

في هذا المشروع، ستغطّي موضوعات كثيرة:

  • إنتاج البرمجيات.
  • التخطيط الرشيق.
  • ضمان الجودة وبوابات الجودة.
  • الشيفرة والبرمجة.
  • نظام التشغيل.
  • حاويات Docker.
  • Kubernetes والسحابة.
  • القابلية للملاحظة والمراقبة.
  • التكامل/التسليم/النشر المستمر.
  • الأتمتة والبنية التحتية كشيفرة.

تلميح

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


المقاربة

يتبع هذا المشروع العقلية الديناميكية بأسلوب MVP ذاتها المستخدمة في خارطة الطريق، والتي تهدف إلى تغطية دورة حياة تطوير البرمجيات (SDLC) كاملة. وهذا يعني أنّ كل مرحلة من مراحل هذا المشروع ستغطّي جميع جوانب مجالات DevOps، مثل التخطيط والبرمجة والحاويات والاختبار والتكامل المستمر والتسليم المستمر والبنية التحتية وغيرها.

يعمل هذا المشروع على أفضل وجه في وضع الاقتران (Pairing)، حيث يكون لديك شخص آخر يساعدك متى تعثّرت (مثل موجّه أو ما شابه). لكن إن لم يتوفر ذلك، فعُد دائمًا إلى الوحدة ذات الصلة (Related Module) حيث تجد تفاصيل أكثر قد تساعدك في المشروع.

نصائح

ملاحظة

تُعالَج كل مرحلة من هذا المشروع تدريجيًّا كجزء من وحدات خارطة الطريق. لكنها أيضًا مستقلّة، ويمكنك العمل عليها إن كانت لديك المعرفة المطلوبة لكل مرحلة.

تحذير

تذكّر أنّ الهدف هو تنفيذ المشروع وتعلّم أفضل الممارسات الصناعية في مجال DevOps! فمجرد تطبيق هذا المشروع دون فهم المشكلات المراد حلّها لن يساعدك على أن تصبح مهندس DevOps!

الهدف

شكل توضيحي: معمارية HiveBox. يهدف هذا المشروع إلى بناء نظام حقيقي من الشيفرة إلى البنية التحتية وكل ما بينهما، على مراحل متكرّرة.

هدف هذا المشروع هو بناء واجهة برمجية RESTful قابلة للتوسّع حول openSenseMap، لكن مخصّصة لمساعدة مربّي النحل في أعمالهم. وينبغي أن يكون ناتج الواجهة بصيغة JSON. ستبدأ بتنفيذ أساسي ثم توسّع النظام كاملًا ليتعامل مع آلاف الطلبات في الثانية. لكن تذكّر دائمًا أنّ لكل قرار كلفة.

Happy DevOpsing


المرحلة 1

وحدة خارطة الطريق: مرحبًا بك في عالم DevOps

1.1 الانطلاق

  • افهم دورك في هذا المشروع وكيف تعمل مع الفرق الأخرى (افترض أنك في فريق ولا تتصرّف كما لو كنت تعمل منفردًا!).
  • راجع معلوماتك عن إدارة مشاريع البرمجيات (تلميح: ما هي إدارة المشاريع الرشيقة؟).
  • حدّد منهجية أجايل التي ستستخدمها، مثل Scrum أو Kanban أو Scrumban (يُوصى بـ Kanban لهذا المشروع).
  • تجنّب تضخّم النطاق! اجعله يعمل، ثم اجعله صحيحًا، ثم اجعله سريعًا!
  • لا تنسَ! أنت مدير نفسك!

1.2 التحضير


المرحلة 2

وحدة خارطة الطريق: الأساسيات - جوهر DevOps

2.1 الأدوات

  • Git
  • VS Code
  • Docker

2.2 الشيفرة

  • نفّذ متطلّبات الشيفرة في تفريع مستودع GitHub الخاص بمشروعك (الذي أنشأته في المرحلة 1).

المتطلّبات:

  • كإصدار أوّلي لتطبيق HiveBox، استخدم الإصدار الدلالي v0.0.1.
  • أنشئ دالة تطبع إصدار التطبيق الحالي. ولا تحتاج إلا لطباعة الإصدار ثم الخروج.

2.3 الحاويات

  • أنشئ Dockerfile للمشروع.
  • ابنِ صورة Docker وشغّلها محليًّا.

2.4 الاختبار

  • محليًّا، شغّل حاوية التطبيق وتأكّد من أنها تُرجع القيمة الصحيحة.
  • تأكّد من توفير توثيق حول كيفية اختبار التطبيق.

المرحلة 3

وحدة خارطة الطريق: الانطلاق - إرساء القاعدة

3.1 الأدوات

3.2 الشيفرة

المتطلّبات:

الإصدار:

  • نقطة النهاية: /version
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • تُرجع إصدار التطبيق المنشور.

درجة الحرارة:

  • نقطة النهاية: /temperature
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • تُرجع متوسط درجة الحرارة الحالي استنادًا إلى بيانات جميع صناديق senseBox.
    • تأكّد من أنّ البيانات لا يزيد عمرها على ساعة واحدة.

3.3 الحاويات

3.4 التكامل المستمر

  • أنشئ سير عمل GitHub Actions للتكامل المستمر (CI).
  • أضف خطوة لفحص الشيفرة وDockerfile.
  • أضف خطوة لبناء صورة Docker.
  • أضف خطوة لاختبارات الوحدة.
  • أعدّ إجراء GitHub لبطاقة تقييم OpenSSF وأصلح أي مشكلات يُبلغ عنها.

3.5 الاختبار

  • في خط أنابيب CI، استدعِ نقطة النهاية /version وتأكّد من أنها تُرجع القيمة الصحيحة.

المرحلة 4

وحدة خارطة الطريق: التوسّع - بناء القشرة

4.1 الأدوات

  • Kind
  • Kubectl

4.2 الشيفرة

المتطلّبات:

عام:

  • ينبغي أن يكون صندوق senseBox قابلًا للضبط عبر متغيّرات البيئة (env vars).

المقاييس:

  • نقطة النهاية: /metrics
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • تُرجع مقاييس Prometheus الافتراضية الخاصة بالتطبيق.

درجة الحرارة:

  • نقطة النهاية: /temperature
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • أضف حقل "status" استنادًا إلى قيمة متوسط درجة الحرارة.
      • أقل من 10: بارد جدًّا
      • بين 11-36: جيد
      • أكثر من 37: حار جدًّا

4.3 الحاويات

  • أنشئ إعداد KIND ليعمل مع Ingress-Nginx.
  • أنشئ ملفات Kubernetes الأساسية (manifests) لنشر التطبيق.

4.4 التكامل المستمر

4.5 التسليم المستمر

  • أنشئ سير عمل GitHub Actions للتسليم المستمر (CD).
  • أضف خطوة للإصدار عبر دفع صورة Docker ذات إصدار إلى سجل الحاويات (تلميح: استخدم سجل حاويات GitHub).

المرحلة 5

وحدة خارطة الطريق: التحوّل - إتمام البنية

5.1 الأدوات

  • Kind
  • Kubectl

5.2 الشيفرة

  • نفّذ متطلّبات الشيفرة.

المتطلّبات:

عام:

  • التخزين المؤقّت (Cache):
    • أضف طبقة تخزين مؤقّت باستخدام المشروع المتوافق مع Redis وهو Valkey.
    • اضبط دورة التخزين المؤقّت على 5 دقائق. وأثناء كل دورة، ينبغي أن يُحدّث التطبيق الذاكرة المؤقّتة بأحدث نسخة من البيانات.
  • المخزن (Store):
    • أضف طبقة تخزين باستخدام المشروع المتوافق مع S3 وهو MinIO.
    • اضبط دورة التخزين على 5 دقائق. وأثناء كل دورة، ينبغي أن يخزّن التطبيق نسخة أخرى من البيانات.

درجة الحرارة:

  • نقطة النهاية: /temperature
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • ينبغي أن يقرأ التطبيق البيانات من الذاكرة المؤقّتة ما لم تكن البيانات المخزّنة مؤقّتًا قديمة، وفي هذه الحالة ينبغي أن يُحدّث الذاكرة المؤقّتة أولًا.

التخزين المؤقّت:

  • نقطة النهاية: /cache
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • عند استدعاء نقطة النهاية هذه، ينبغي أن تُحدّث البيانات المخزّنة مؤقّتًا مباشرةً على Valkey (خارج الدورة).

المخزن:

  • نقطة النهاية: /store
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • عند استدعاء نقطة النهاية هذه، ينبغي أن تخزّن نسخة جديدة من البيانات مباشرةً على MinIO (خارج الدورة).

المقاييس:

  • نقطة النهاية: /metrics
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • وسّع مقاييس Prometheus بإضافة مقاييس مخصّصة استنادًا إلى منطق الشيفرة.

Readyz:

  • نقطة النهاية: /readyz
  • المعاملات: بلا معاملات.
  • المتطلّبات:
    • تُرجع HTTP 200 إلا في الحالات التالية:
      • %50 + 1 من صناديق senseBox المضبوطة غير قابلة للوصول.
      • أو إن كان المحتوى المخزّن مؤقّتًا أقدم من دورتين (أي أنّ البيانات المخزّنة مؤقّتًا قديمة وأنّ شيئًا ما لا يعمل كما هو متوقّع).
      • أو إن كان المحتوى المخزّن أقدم من دورتين (أي أنّ البيانات المخزّنة قديمة وأنّ شيئًا ما لا يعمل كما هو متوقّع).

5.3 الحاويات

5.4 البنية التحتية كشيفرة

  • انشر وكيل Grafana لجمع السجلات والمقاييس (تلميح: أنشئ حساب Grafana Cloud مجانيًا لاستخدام Loki وGrafana).
  • أنشئ عنقود Kubernetes باستخدام Terraform IaC (تلميح: استخدم الطبقة المجانية من أي مزوّد سحابي أو استخدم محاكيًا محليًّا مثل Floci).

5.5 التكامل المستمر

  • أنشئ اختبارًا من البداية إلى النهاية (تلميح: Venom، مجموعة اختبارات تصريحية).
  • شغّل عنقود KIND، وانشر التطبيق والبنية التحتية، ثم شغّل اختبار البداية إلى النهاية.

5.6 التسليم المستمر

  • طبّق أفضل الممارسات في CD.

المرحلة 6

وحدة خارطة الطريق: التحسين - واصل التحسّن

هذه المرحلة عبارة عن تحسينات حرّة يحدّدها المستخدم، أي أنّ التحسينات قد تتعلّق بأي جزء من المشروع.

في ما يلي بعض الاقتراحات الموصى بها بشدّة:

  • انشر التطبيق بأسلوب GitOps التصريحي باستخدام Argo CD.
  • استعدّ للإنتاج بإعداد DNS (ExternalDNS) والشهادات (Cert-Manager).
  • أتمت تحديثات الاعتماديات باستخدام Dependabot.
  • انقل جميع الخدمات الخارجية (مثل Grafana.com وTerraform Cloud) إلى عنقود Kubernetes باستخدام حلول مفتوحة المصدر.

وفي ما يلي بعض الاقتراحات الإضافية:

  • أعدّ Kyverno للسياسة كشيفرة (Policy as Code).
  • ابنِ عناقيد Kubernetes متعدّدة البيئات (Dev وStage وProd) باستخدام Terraform وKustomize.
  • استخدم TestKube لتنفيذ اختبارات أفضل.
  • طوّر Kubernetes Operator للتعامل مع عمليات التطبيق (تلميح: مقدّمة إلى Kubernetes Operators).

المرحلة 7

وحدة خارطة الطريق: مشروع التخرّج

في هذه المرحلة، ستصمّم وتنفّذ مشروعك الخاص على غرار مشروع HiveBox، لكن بفكرة وحزمة تقنيات تختارها أنت. اطّلع على صفحة مشروع التخرّج لمزيد من التفاصيل.