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



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

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

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


Kubectl-التصحيح


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

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

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

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

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


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

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

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

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

Ksync


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

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

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

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

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

... ستنشئ مراقبًا يسمى myproject ، والذي سيبحث عن جراب مع app=backend label app=backend ومحاولة مزامنة الدليل المحلي /home/user/myproject/ مع الدليل /var/www/myproject/ في الحاوية المسماة php .

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

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

قرع


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

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

  • delve - للتطبيقات على الذهاب ؛
  • GDB - من خلال الهدف البعيد + ميناء الشحن.
  • إعادة توجيه منفذ JDWP لتصحيح تطبيقات Java.

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

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

حلول متكاملة


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

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

DevSpace


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

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

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

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

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

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

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

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


العمارة والمعالم مع DevSpace

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

Skaffold


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

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

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

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

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

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

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

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

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


معالم في سكافولد

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

حديقة


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

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

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

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

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

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


لوحة للحديقة

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

استنتاج


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

PS


اقرأ أيضًا في مدونتنا:

Source: https://habr.com/ru/post/ar462707/


All Articles