
منذ عام ونصف ، في 5 مارس 2018 ، أصدرت Google الإصدار الأول من مشروعها المفتوح المصدر لـ CI / CD الذي يدعى
Skaffold ، والذي كان هدفه إنشاء "تطوير بسيط وقابل للتكرار لـ Kubernetes" حتى يتمكن المطورون من التركيز بشكل خاص على التطوير ، و ليس على الإدارة. ما قد يكون موضع اهتمام سكافولد؟ كما اتضح ، لديه بعض الأوراق الرابحة في جعبته ، وبفضل ذلك يمكن أن يصبح أداة قوية لمطور ، وربما مهندس تشغيل. سنتعرف على المشروع وقدراته.
ملحوظة : بالمناسبة ، تحدثنا بالفعل لفترة وجيزة عن سكافولد في نظرتنا العامة للأدوات للمطورين الذين ترتبط حياتهم مع Kubernetes.النظرية. الغرض والميزات
وبصفة عامة ، يحل Skaffold مشكلة التشغيل التلقائي لدورة CI / CD (في مراحل الإنشاء والدفع والنشر) ، وتقديم ملاحظات سريعة للمطور ، أي القدرة على الحصول بسرعة على نتيجة التغييرات البرمجية التالية - في شكل تطبيق محدث يعمل في نظام Kubernetes. ويمكن أن تعمل في محيطات مختلفة (dev ، stage ، إنتاج ...) ، والتي تساعد Skaffold في وصف خطوط الأنابيب المناسبة لبدء التشغيل.
رمز مصدر Skaffold مكتوب في Go ، ويتم توزيعه بموجب رخصة Apache المجانية 2.0 (
GitHub ).
النظر في الوظائف والميزات الرئيسية. الأول يشمل ما يلي:
- تقدم Skaffold أدوات لإنشاء خطوط أنابيب CI / CD.
- يسمح لك بمراقبة التغييرات في التعليمات البرمجية المصدر في الخلفية وبدء العملية التلقائية لبناء التعليمات البرمجية في صور الحاوية ، ونشر هذه الصور في Docker Registry ونشرها على نظام Kubernetes.
- مزامنة الملفات في المستودع مع دليل العمل في الحاوية.
- اختبارات تلقائيا باستخدام حاوية اختبار الهيكل.
- الموانئ إلى الأمام.
- يقرأ سجلات التطبيق قيد التشغيل في الحاوية.
- يساعد في تصحيح أخطاء التطبيقات المكتوبة بلغة Java و Node.js و Python و Go.
الآن عن الميزات:
- Skaffold نفسها لا تحتوي على مكونات جانب الكتلة . أي أنك لست بحاجة إلى تكوين Kubernetes لاستخدام هذه الأداة.
- خطوط أنابيب مختلفة للتطبيق الخاص بك . هل تحتاج إلى طرح الكود في Minikube المحلي أثناء قيامك بالتطوير ، ثم على المسرح أو الإنتاج؟ للقيام بذلك ، يتم توفير ملفات التعريف وتكوينات المستخدم ومتغيرات البيئة والأعلام ، مما يسمح لك بوصف خطوط أنابيب مختلفة لتطبيق واحد.
- CLI. وحدة التحكم فقط وتكوينات في YAML. على الشبكة ، يمكنك العثور على مراجع لمحاولات إنشاء واجهة المستخدم الرسومية التجريبية ، ولكن في الوقت الحالي ، ربما يعني هذا فقط أن شخصًا ما يحتاجها ، ولكن ليس في الحقيقة.
- نمطية . Skaffold ليس مجموعة مستقلة ، ولكنه يسعى إلى استخدام وحدات منفصلة أو حلول موجودة لمهام محددة.
التوضيح الأخير:
- في مرحلة التجميع ، يمكنك استخدام:
- عامل بناء بناء محليًا ، في كتلة باستخدام kaniko أو في Google Cloud Build ؛
- بازيل محليا
- Jib Maven و Jib Gradle محليًا أو على Google Cloud Build ؛
- البرامج النصية بناء مخصصة تعمل محليا. إذا كنت بحاجة إلى تشغيل حل آخر (أكثر مرونة / مألوفة / ...) للتجميع ، فيتم وصفه في البرنامج النصي بحيث يعمل Skaffold ( مثال من الوثائق ). يتيح لك ذلك استخدام أي أداة تجميع يمكن استدعاءها باستخدام برنامج نصي ؛
- في مرحلة الاختبار ، يتم دعم اختبار بنية الحاوية المذكور بالفعل ؛
- للنشر وتقدم:
بفضل هذا ، يمكن أن يطلق على سكافولد نوعًا من
الأطر لبناء CI / CD . فيما يلي مثال لسير العمل عند استخدامه (من وثائق المشروع):

كيف يبدو عمل سكافولد بشكل عام؟
- تراقب الأداة المساعدة التغييرات في الدليل المصدر. في حالة إجراء تعديلات على الملفات ، تتم مزامنتها مع جراب التطبيق في نظام Kubernetes. إذا كان ذلك ممكنا ، دون إعادة تجميع الصورة. خلاف ذلك ، صورة جديدة سوف.
- يتم فحص الصورة المجمعة باستخدام اختبار بنية الحاوية ، ووضع علامات عليها وإرسالها إلى سجل عامل الميناء.
- بعد ذلك ، يتم نشر الصورة - يتم نشرها في كتلة Kubernetes.
- إذا تمت تهيئة الإطلاق باستخدام الأمر
skaffold dev
، skaffold dev
في استلام السجلات من التطبيق ، ويتوقع Skaffold أن تكرر التغييرات جميع الخطوات مرة أخرى.
معالم سكافولد التوضيحالممارسة. محاولة سكافولد
لإثبات استخدام Skaffold ، سأأخذ مثالاً من
مستودع GitHub للمشروع . بالمناسبة ،
يمكنك أن تجد العديد من الأمثلة الأخرى التي تأخذ في الاعتبار مختلف التفاصيل. سيتم تنفيذ جميع الإجراءات محليا في Minikube. التثبيت بسيط ويستغرق بضع دقائق ، ويحتاج kubectl للبدء.
تثبيت سكافولد:
curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 chmod +x skaffold sudo mv skaffold /usr/local/bin skaffold version v0.37.1
لنستنسخ مستودع سكافولد بالأمثلة الضرورية:
git clone https://github.com/GoogleContainerTools/skaffold cd skaffold/examples/microservices
لقد اخترت مثالًا مع اثنين من القرون ، يحتوي كل منها على تطبيق صغير على Go. تطبيق واحد هو الواجهة الأمامية (leeroy-web) ، طلب إعادة التوجيه إلى التطبيق الثاني هو الواجهة الخلفية (تطبيق leeroy). دعونا نرى كيف يبدو:
~/skaffold/examples/microservices
يحتوي leeroy-app و leeroy-web على رمز Go و Dockerfiles البسيط لإنشاء هذا الرمز محليًا:
~/skaffold/examples/microservices
لن أعطي رمز التطبيق - يكفي أن نعرف أن
leeroy-web
تقبل الطلبات
leeroy-app
إلى
leeroy-app
. لذلك ، توجد في ملفات
Deployment.yaml
خدمة فقط
app
(للتوجيه الداخلي). سيتم طرح منفذ جراب
web
إلينا للوصول السريع إلى التطبيق.
skaffold.yaml
تبدو
skaffold.yaml
:
~/skaffold/examples/microservices # cat skaffold.yaml apiVersion: skaffold/v1beta13 kind: Config build: artifacts: - image: leeroy-web context: ./leeroy-web/ - image: leeroy-app context: ./leeroy-app/ deploy: kubectl: manifests: - ./leeroy-web/kubernetes/* - ./leeroy-app/kubernetes/* portForward: - resourceType: deployment resourceName: leeroy-web port: 8080 localPort: 9000
جميع الخطوات المذكورة أعلاه موصوفة هنا. بالإضافة إلى هذا التكوين ، هناك أيضًا ملف ذو إعدادات عمومية -
~/.skaffold/config
. يمكن تحريرها يدويًا أو من خلال CLI - على سبيل المثال ، مثل هذا:
skaffold config set --global local-cluster true
يعين هذا الأمر المتغير العام
local-cluster
إلى
true
، وبعد ذلك لن يحاول Skaffold "دفع" الصور إلى السجل البعيد. إذا كنت تتطور محليًا ، فيمكنك استخدام هذا الأمر لإضافة صور محليًا أيضًا.
رجوع إلى
skaffold.yaml
:
- في مرحلة
build
، نشير إلى أنك بحاجة إلى جمع وحفظ الصورة محليًا. بعد بدء التجميع لأول مرة ، سنرى ما يلي:
// .. Minikube , // ,
كما ترون ، قام سكافولد باختبار الصور بشكل مستقل. بالمناسبة ، يتم دعم العديد من سياسات وضع العلامات. - تم تحديد ما يلي في
context: ./leeroy-app/
التكوين context: ./leeroy-app/
، أي يتم تحديد السياق الذي يتم فيه تجميع الصورة. - في مرحلة النشر ، يتم تحديد أننا سنستخدم kubectl وقناع للبيانات المطلوبة.
PortForward
: على غرار الطريقة التي نعيد توجيه المنافذ بها عادةً باستخدام kubectl port-forward
، نحن نقدم تعليمات Skaffold لاستدعاء هذا الأمر. في هذه الحالة ، يتم إعادة توجيه المنفذ المحلي 9000 إلى 8080 في النشر مع اسم leeroy-web
.
حان الوقت لبدء تشغيل
skaffold dev
: سيقوم الفريق بإنشاء "حلقة تغذية مرتدة" مستمرة ، أي لا يقتصر الأمر على جمع كل شيء وتثبيت في كتلة ، ولكن أيضا يحكي عن حالة قرون في الوقت الراهن ، سوف يراقب التغييرات وتحديث حالة القرون.
هذه هي نتيجة تشغيل
skaffold dev --port-forward
عند إعادة التجميع:

أولاً ، من الواضح أنه يتم استخدام ذاكرة التخزين المؤقت. بعد ذلك - يتم تجميع التطبيق ونشره وإعادة توجيه المنافذ. منذ أن تم تحديد
--port-forward
، قام Skaffold بإعادة توجيه المنفذ إلى
web
، كما هو مطلوب ، لكنه قام بإعادة توجيه
app
وفقًا لتقديره (اختار الأقرب مجانًا). بعد ذلك ، نحصل على السجلات الأولى من التطبيقات.
تحقق الأداء؟
~/skaffold/examples/microservices
تعديل ملف
leeroy-app/app.go
- يستغرق الأمر بضع ثوانٍ ... و:
~/skaffold/examples/microservices
في الوقت نفسه ، جلبت Skaffold نفسها إلى وحدة التحكم نفس الشيء كما كان من قبل ، باستثناء نقطة واحدة: لقد تم طرح
leeroy-app
فقط ، وليس كل ذلك مرة واحدة.
المزيد من الممارسة
تجدر الإشارة إلى أنه عند إنشاء مشروع جديد ، يمكن أن تكون التكوينات لـ Skaffold بمثابة أداة تمهيد باستخدام أمر
init
، وهو أمر مريح للغاية. بالإضافة إلى ذلك ، يمكنك كتابة العديد من التهيئة: التطوير على التهيئة الافتراضية ، ثم طرحها على المسرح باستخدام الأمر "
run
(نفس العملية مثل
dev
، لا تتبع التغييرات فقط) ، باستخدام تهيئة مختلفة.
يحتوي Katacoda على برنامج
تعليمي مع مثال أكثر بساطة. لكنه يوفر رمل جاهز مع Kubernetes ، والتطبيق و Skaffold. خيار رائع إذا كنت مهتمًا بتجربة الأساسيات بنفسك.
إحدى حالات الاستخدام الممكنة لـ Skaffold هي إجراء تطوير على كتلة بعيدة. لا يشعر الجميع بالراحة عند تشغيل Minikube على أجهزتهم الخاصة ، ثم طرح التطبيق وانتظار أدائه المناسب ... في هذه الحالة ، يحل Skaffold المهمة تمامًا ، والتي يمكن تأكيدها ، على سبيل المثال ، من قبل مهندسي Reddit ، الذين كتبناهم بالفعل على مدونتنا.
وفي
هذا المنشور من Weaveworks ، يمكنك العثور على مثال لإنشاء خط أنابيب للإنتاج.
استنتاج
Skaffold هي أداة مناسبة لبناء خطوط الأنابيب التي تتضمن طرح التطبيقات على Kubernetes وتركز بشكل أساسي على احتياجات التطوير. مع ذلك ، من السهل جدًا إنشاء خط أنابيب "قصير" يأخذ في الاعتبار الاحتياجات الأساسية للمطور ، ومع ذلك ، يمكنك ، إذا كنت ترغب في ذلك ، تنظيم عمليات أكثر طموحًا. أحد الأمثلة التوضيحية لاستخدام Skaffold في عمليات CI / CD
هو مشروع اختبار لـ 10 خدمات ميكروية تستخدم إمكانيات Kubernetes و gRPC و Istio و OpenCensus Tracing.
تلقى Skaffold بالفعل ما يقرب من 8000 نجمًا على GitHub ، ويتم تطويره بواسطة Google وهو جزء من
GoogleContainerTools - بشكل عام ، يوجد في الوقت الحالي كل الأسباب التي تدعو إلى الاعتقاد بأن المشروع سيتطور بسعادة بعد ذلك.
PS
اقرأ أيضًا في مدونتنا: