أدوات لمطوري التطبيقات التي تعمل على Kubernetes

أدوات لمطوري التطبيقات التي تعمل على Kubernetes

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

توفر هذه المراجعة معلومات مختصرة حول بعض الأدوات التي تجعل الحياة أسهل للمبرمج الذي يتم تشغيل كوده في pod'ax الخاص بمجموعة Kubernetes.

مساعدين بسيطين

Kubectl-debug

  • الجوهر: أضف الحاوية الخاصة بك إلى Pod وشاهد ما يحدث فيها.
  • GitHub جيثب:.
  • إحصائيات موجزة عن GH: 715 نجمة، 54 التزامًا، 9 مساهمين.
  • اللغة : اذهب .
  • الترخيص: ترخيص أباتشي 2.0.

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

يمكنك أيضًا التبديل إلى حاوية العملية عن طريق التشغيل chroot /proc/PID/root - يمكن أن يكون هذا مناسبًا جدًا عندما تحتاج إلى الحصول على غلاف جذر في حاوية تم تعيينه لها في البيان securityContext.runAs.

الأداة بسيطة وفعالة، لذا يمكن أن تكون مفيدة لكل مطور. لقد كتبنا المزيد عن ذلك في المادة منفصلة.

التواجد عن بعد

  • الجوهر: نقل التطبيق إلى جهاز الكمبيوتر الخاص بك. تطوير وتصحيح الأخطاء محليا.
  • الموقع; GitHub جيثب:.
  • إحصائيات موجزة عن GH: 2131 نجمة، 2712 التزامًا، 33 مساهمًا.
  • اللغة: بايثون.
  • الترخيص: ترخيص أباتشي 2.0.

تتمثل فكرة هذه الأداة الإضافية في إطلاق حاوية تحتوي على التطبيق على كمبيوتر المستخدم المحلي وتوكيل كل حركة المرور من المجموعة إليها والعودة. يسمح لك هذا الأسلوب بالتطوير محليًا بمجرد تحرير الملفات في IDE المفضل لديك: ستكون النتائج متاحة على الفور.

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

لقد شاركنا بالفعل تجربتنا في استخدام Telepresence هنا.

كسينك

  • الجوهر: مزامنة فورية تقريبًا للتعليمات البرمجية مع الحاوية الموجودة في المجموعة.
  • GitHub جيثب:.
  • إحصائيات موجزة عن GH: 555 نجمة، 362 التزامًا، 11 مساهمين.
  • اللغة : اذهب .
  • الترخيص: ترخيص أباتشي 2.0.

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

عند التهيئة مرة واحدة بواسطة الأمر ksync init يتم إنشاء DaemonSet في المجموعة، والذي يُستخدم لمراقبة حالة نظام الملفات الخاص بالحاوية المحددة. على جهاز الكمبيوتر المحلي الخاص به، يقوم المطور بتشغيل الأمر ksync watch، الذي يراقب التكوينات والتشغيل syncthing، الذي يقوم بمزامنة الملفات مباشرة مع المجموعة.

كل ما تبقى هو إرشاد ksync لما يجب مزامنته مع ماذا. على سبيل المثال هذا الأمر:

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

... سيتم إنشاء مراقب اسمه myprojectوالتي سوف تبحث عن جراب مع التسمية app=backend وحاول مزامنة الدليل المحلي /home/user/myproject/ مع الكتالوج /var/www/myproject/ في الحاوية التي تسمى php.

المشاكل والملاحظات على ksync من تجربتنا:

  • يجب استخدامه على العقد العنقودية Kubernetes overlay2 كمحرك تخزين لـ Docker. لن تعمل الأداة المساعدة مع أي شخص آخر.
  • عند استخدام Windows كنظام تشغيل عميل، قد لا يعمل مراقب نظام الملفات بشكل صحيح. تمت ملاحظة هذا الخطأ عند العمل مع أدلة كبيرة - مع عدد كبير من الملفات والأدلة المتداخلة. السادسة الا خمس قضية ذات صلة في مشروع المزامنة، لكن لا يوجد تقدم فيه حتى الآن (منذ بداية شهر يوليو).
  • استخدم الملف .stignore لتحديد المسارات أو أنماط الملفات التي لا تحتاج إلى المزامنة (على سبيل المثال، الدلائل app/cache и .git).
  • افتراضيًا، سيقوم ksync بإعادة تشغيل الحاوية كلما تغيرت الملفات. يعد هذا مناسبًا بالنسبة إلى Node.js، لكنه غير ضروري على الإطلاق بالنسبة لـ PHP. من الأفضل إيقاف تشغيل opcache واستخدام العلم --reload=false.
  • يمكن دائمًا تصحيح التكوين $HOME/.ksync/ksync.yaml.

قرع

  • الجوهر: عمليات التصحيح مباشرة في المجموعة.
  • GitHub جيثب:.
  • إحصائيات موجزة عن GH: 1154 نجمة، 279 التزامًا، 23 مساهمًا.
  • اللغة : اذهب .
  • الترخيص: ترخيص أباتشي 2.0.

تم تصميم هذه الأداة لتصحيح الأخطاء مباشرة في القرون. الأداة المساعدة بسيطة وتسمح لك بشكل تفاعلي بتحديد مصحح الأخطاء المطلوب (انظر أدناه) ومساحة الاسم + جراب، والتي تحتاج إلى التدخل فيها. المدعومة حاليا:

  • التعمق - لتطبيقات Go؛
  • GDB - عبر جهاز التحكم عن بعد المستهدف + إعادة توجيه المنفذ؛
  • إعادة توجيه منفذ JDWP لتصحيح أخطاء تطبيقات Java.

على جانب IDE، يتوفر الدعم فقط في VScode (باستخدام توسع)، ومع ذلك، فإن خطط العام الحالي (2019) تشمل Eclipse وIntellij.

لتصحيح أخطاء العمليات، يقوم Squash بتشغيل حاوية مميزة على عقد المجموعة، لذا يجب عليك أولاً التعرف على الإمكانيات الوضع الآمن لتجنب المشاكل الأمنية.

حلول متكاملة

دعنا ننتقل إلى المدفعية الثقيلة - المزيد من المشاريع "واسعة النطاق" المصممة لتلبية العديد من احتياجات المطورين على الفور.

NB: في هذه القائمة، بالطبع، هناك مكان لأداةنا مفتوحة المصدر werf (المعروف سابقًا باسم dapp). ومع ذلك، فقد كتبنا بالفعل وتحدثنا عنه أكثر من مرة، وبالتالي قررنا عدم إدراجه في المراجعة. ولمن يرغب في التعرف أكثر على إمكانياته، ننصح بقراءة/الاستماع إلى التقرير “werf هي أداتنا لـ CI / CD في Kubernetes".

مساحة التطوير

  • الجوهر: لأولئك الذين يريدون بدء العمل في Kubernetes، ولكنهم لا يريدون التعمق في أدغاله.
  • GitHub جيثب:.
  • إحصائيات موجزة عن GH: 630 نجمة، 1912 التزامًا، 13 مساهمًا.
  • اللغة : اذهب .
  • الترخيص: ترخيص أباتشي 2.0.

حل من الشركة التي تحمل الاسم نفسه، والذي يوفر مجموعات مُدارة مع Kubernetes لتطوير الفريق. تم إنشاء الأداة للمجموعات التجارية، ولكنها تعمل بشكل رائع مع أي مجموعات أخرى.

عند تشغيل الأمر devspace init في كتالوج المشروع سيتم تقديمك (بشكل تفاعلي):

  • تحديد مجموعة Kubernetes العاملة،
  • استخدام الموجودة Dockerfile (أو إنشاء واحدة جديدة) لإنشاء حاوية بناءً عليها،
  • حدد مستودعًا لتخزين صور الحاوية، وما إلى ذلك.

بعد كل هذه الخطوات التحضيرية، يمكنك البدء في التطوير عن طريق تشغيل الأمر devspace dev. سيقوم ببناء الحاوية، وتحميله إلى المستودع، ونشر النشر إلى المجموعة وبدء إعادة توجيه المنفذ ومزامنة الحاوية مع الدليل المحلي.

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

وأخيراً الفريق devspace deploy يقوم بطرح التطبيق والبنية التحتية المرتبطة به إلى المجموعة، وبعد ذلك يبدأ كل شيء في العمل في وضع القتال.

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

أدوات لمطوري التطبيقات التي تعمل على Kubernetes
الهندسة المعمارية والمراحل الرئيسية للعمل مع DevSpace

بالإضافة إلى ذلك، من السهل إضافة مكون محدد مسبقًا (على سبيل المثال، MySQL DBMS) أو مخطط Helm إلى المشروع. اقرأ المزيد في توثيق - الأمر ليس معقدًا.

سكافولد

  • الموقع; GitHub جيثب:.
  • إحصائيات موجزة عن GH: 7423 نجمة، 4173 التزامًا، 136 مساهمًا.
  • اللغة : اذهب .
  • الترخيص: ترخيص أباتشي 2.0.

تدعي هذه الأداة المساعدة من Google أنها تغطي جميع احتياجات المطور الذي سيتم تشغيل كوده بطريقة ما على مجموعة Kubernetes. البدء في استخدامه ليس سهلاً مثل devspace: لا يوجد تفاعل ولا اكتشاف للغة وإنشاء تلقائي Dockerfile لن يقدموها لك هنا.

ومع ذلك، إذا كان هذا لا يخيفك، فإليك ما يسمح لك Skaffold بفعله:

  • تتبع تغييرات التعليمات البرمجية المصدر.
  • قم بمزامنتها مع حاوية الكبسولة إذا كانت لا تتطلب التجميع.
  • اجمع الحاويات باستخدام التعليمات البرمجية، إذا كانت اللغة مترجمة، أو قم بتجميع العناصر وحزمها في حاويات.
  • يتم فحص الصور الناتجة تلقائيًا باستخدام اختبار هيكل الحاوية.
  • وضع علامات على الصور وتحميلها إلى Docker Registry.
  • نشر تطبيق في مجموعة باستخدام kubectl أو Helm أو kustomize.
  • تنفيذ إعادة توجيه المنفذ.
  • تصحيح أخطاء التطبيقات المكتوبة بلغات Java وNode.js وPython.

يتم وصف سير العمل في الأشكال المختلفة بشكل صريح في الملف skaffold.yaml. بالنسبة للمشروع، يمكنك أيضًا تحديد العديد من ملفات التعريف التي يمكنك من خلالها تغيير مراحل التجميع والنشر جزئيًا أو كليًا. على سبيل المثال، للتطوير، حدد صورة أساسية مناسبة للمطور، وللعرض والإنتاج - صورة بسيطة (+ استخدام securityContext الحاويات أو إعادة تعريف المجموعة التي سيتم نشر التطبيق فيها).

يمكن إنشاء حاويات Docker محليًا أو عن بعد: في جوجل كلاود بناء أو في مجموعة باستخدام كانيكو. يتم أيضًا دعم Bazel وJib Maven/Gradle. بالنسبة لوضع العلامات، يدعم Skaffold العديد من الاستراتيجيات: من خلال تجزئة الالتزام git، والتاريخ/الوقت، ومجموع sha256 للمصادر، وما إلى ذلك.

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

  • تنفيذ الأوامر في سياق الحاوية مع تتبع حالات الخروج والتحقق من إخراج النص للأمر.
  • التحقق من وجود الملفات في الحاوية ومطابقة السمات المحددة.
  • التحكم في محتويات الملف باستخدام التعبيرات العادية.
  • التحقق من البيانات الوصفية للصورة (ENV, ENTRYPOINT, VOLUMES الخ).
  • التحقق من توافق الترخيص.

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

أدوات لمطوري التطبيقات التي تعمل على Kubernetes
المراحل الرئيسية لعملية سقالة

بشكل عام، لا تسمح لك الأداة بالتجريد من بيانات Kubernetes ولا تتمتع بأي تفاعلية، لذلك قد يبدو من الصعب إتقانها. ولكن هذه أيضًا ميزتها - حرية أكبر في العمل.

حدائق خارجية

  • الموقع; GitHub جيثب:.
  • إحصائيات موجزة عن GH: 1063 نجمة، 1927 التزامًا، 17 مساهمًا.
  • اللغة: تايب سكريبت (من المخطط تقسيم المشروع إلى عدة مكونات، بعضها سيكون في Go، وأيضًا إنشاء SDK لإنشاء الوظائف الإضافية في TypeScript/JavaScript وGo).
  • الترخيص: ترخيص أباتشي 2.0.

مثل Skaffold، يهدف Garden إلى أتمتة عمليات تسليم كود التطبيق إلى مجموعة K8s. للقيام بذلك، تحتاج أولاً إلى وصف بنية المشروع في ملف YAML، ثم تشغيل الأمر garden dev. سوف تفعل كل السحر:

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

التركيز الرئيسي لاستخدام هذه الأداة هو مشاركة مجموعة بعيدة مع فريق التطوير. في هذه الحالة، إذا تم بالفعل تنفيذ بعض خطوات البناء والاختبار، فسيؤدي ذلك إلى تسريع العملية بأكملها بشكل كبير، حيث سيكون Garden قادرًا على استخدام النتائج المخزنة مؤقتًا.

يمكن أن تكون وحدة المشروع عبارة عن حاوية، أو حاوية Maven، أو مخطط Helm، أو بيان لـ kubectl apply أو حتى وظيفة OpenFaaS. علاوة على ذلك، يمكن سحب أي من الوحدات من مستودع Git البعيد. قد تحدد الوحدة أو لا تحدد الخدمات والمهام والاختبارات. يمكن أن تحتوي الخدمات والمهام على تبعيات، بحيث يمكنك تحديد تسلسل نشر خدمة معينة وتنظيم إطلاق المهام والاختبارات.

يوفر Garden للمستخدم لوحة تحكم جميلة (حاليًا في الحالة التجريبية)، الذي يعرض الرسم البياني للمشروع: المكونات، وتسلسل التجميع، وتنفيذ المهام والاختبارات، واتصالاتها وتبعياتها. مباشرة في المتصفح، يمكنك عرض سجلات جميع مكونات المشروع والتحقق من ما يخرجه مكون معين عبر HTTP (إذا تم الإعلان عن مورد دخول له بالطبع).

أدوات لمطوري التطبيقات التي تعمل على Kubernetes
لوحة للحديقة

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

اختتام

بالطبع، لا تقتصر قائمة الأدوات اللازمة لتطوير وتصحيح التطبيقات في Kubernetes على ذلك. هناك العديد من الأدوات المساعدة المفيدة والعملية التي تستحق الذكر، إن لم تكن مقالة منفصلة، ​​على الأقل. أخبرنا بما تستخدمه، وما هي المشاكل التي واجهتها وكيف قمت بحلها!

PS

اقرأ أيضًا على مدونتنا:

المصدر: www.habr.com

إضافة تعليق