1. الأهداف
Skaffold هي أداة تتولى سير العمل لإنشاء تطبيقك ونشره ونشره. ويمكنك استخدام Skaffold لإعداد مساحة عمل للتطوير المحلي بسهولة، وتبسيط عملية التطوير الداخلية، ودمجه مع أدوات أخرى، مثل Kustomize وHelm للمساعدة في إدارة بيانات Kubernetes.
في هذا البرنامج التعليمي، تستوعب بعض المفاهيم الأساسية لبرنامج Skaffold، وتستخدمه لأتمتة حلقة التطوير الداخلية، ثم انشر أحد التطبيقات.
وسوف تقوم بما يلي:
- إعداد Skaffold وتفعيله للتطوير المحلي
- إنشاء تطبيق Golang بسيط وتشغيله
- إدارة نشر التطبيقات المحلية باستخدام Skaffold
- عرض البيانات ونشر التطبيق
2. قبل البدء
جارٍ تحضير مساحة العمل
- افتح محرِّر Cloud Shell من خلال الانتقال إلى عنوان URL التالي:
https://shell.cloud.google.com
السماح بملفات تعريف الارتباط التابعة لجهات خارجية انقر على "الموقع لا يعمل". ثم "السماح بملفات تعريف الارتباط".
- إذا لم يسبق لك إجراء ذلك، استنسِخ مصدر التطبيق في النافذة الطرفية باستخدام الأمر التالي:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- تغيير إلى دليل المستودع المنسوخ:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- يمكنك ضبط مساحة عمل Cloud Shell على الدليل الحالي من خلال تنفيذ الأمر التالي:
cloudshell workspace .
جارٍ تحضير مشروعك
- تأكَّد من ضبط مشروعك على Google Cloud بشكلٍ صحيح من خلال تنفيذ الأمر التالي:
gcloud config set project {{project-id}}
3- بدء استخدام Skaffold
- شغِّل الأمر التالي لإنشاء ملف إعداد Skaffold ذي المستوى الأعلى،
skaffold.yaml
:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- افتح الملف "
skaffold.yaml
" في جزء IDE. هذا هو ملف الإعداد ذو المستوى الأعلى الذي يحدد مسار سكافولد.
لاحظ تنسيق YAML الشبيه بـ Kubernetes والأقسام التالية في YAML:
build
deploy
profiles
تحدد هذه الأقسام كيفية إنشاء التطبيق ونشره، بالإضافة إلى تحديد الملفات الشخصية لكل هدف نشر.
يمكنك قراءة المزيد من المعلومات حول القائمة الكاملة لمراحل سكافولد في المستندات ضمن "مراحل مسار سكافولد".
4. إنشاء
يحتوي القسم build
على الإعدادات التي تحدِّد طريقة إنشاء التطبيق. في هذه الحالة، يمكنك الاطّلاع على إعدادات كيفية التعامل مع علامات git
، بالإضافة إلى قسم artifacts
الذي يحدِّد صور الحاويات التي تتألف منها التطبيق.
بالإضافة إلى ذلك، يمكنك في هذا القسم الاطّلاع على مرجع Dockerfile
الذي سيتم استخدامه لإنشاء الصور. بالإضافة إلى ذلك، يتيح Skaffold أدوات إنشاء أخرى، مثل Jib
وMaven
وGradle
وBuildpacks
وBazel
المتوافقة مع السحابة الإلكترونية والنصوص البرمجية المخصّصة. يمكنك الاطِّلاع على مزيد من المعلومات عن هذه الإعدادات في مستندات إصدار Skaffold.
5- النشر
يحتوي القسم deploy
على إعدادات تحدِّد كيفية نشر التطبيق. في هذه الحالة، يمكنك الاطّلاع على مثال لعملية نشر تلقائية تهيئ Skaffold لاستخدام أداة Kustomize
.
توفّر الأداة Kustomize
وظيفة إنشاء بيانات Kubernetes من خلال دمج مجموعة من ملفات YAML المكوّنة من المكوّنات الشائعة (ضمن دليل base
) مع "تراكب" واحد أو أكثر. تتوافق عادةً مع هدف واحد أو أكثر للنشر، عادةً ما يكون ذلك لمطوّري البرامج والاختبار والتقسيم المرحلي والإنتاج أو ما شابه ذلك.
في هذا المثال، يمكنك رؤية تركيبَين لثلاثة أهداف، dev، وstaging، وprod. سيتم استخدام تراكب dev أثناء التطوير المحلي وتراكبات المراحل والإنتاج عند النشر باستخدام Skaffold.
6- ملفات التعريف
يتضمّن القسم profiles
إعدادات تحدِّد إعدادات الإنشاء والاختبار والنشر للسياقات المختلفة. عادةً ما تكون السياقات المختلفة بيئات مختلفة في مسار نشر التطبيقات، مثل staging
أو prod
في هذا المثال. هذا يعني أنّه يمكنك بسهولة إدارة البيانات التي يجب أن يختلف محتواها حسب البيئات المستهدفة المختلفة، بدون تكرار الإعدادات النموذجية.
يمكن للإعداد في قسم profiles
أن يحل محل أي عناصر أو تصحيحها من الإعدادات الرئيسية (مثل الأقسام build
أو test
أو deploy
).
كمثال على ذلك، افتح الملف overlays > prod > deployment.yaml
. لاحظ أنه تم تكوين عدد النسخ المتماثلة للتطبيق هنا ليكون ثلاثة، مما يُلغي الإعداد الأساسي.
التنقل في رمز مصدر التطبيق.
- افتح الملف التالي
app > main.go
في جزء IDE. هذا تطبيق golang بسيط يكتب سلسلة إلىstdout
كل ثانية. - يُرجى العلم أنّ التطبيق يُخرج أيضًا اسم مجموعة Kubernetes التي يتم تشغيلها.
عرض الملف الشامل
- افتح الملف "
app > Dockerfile
" في جزء IDE. يحتوي هذا الملف على سلسلة من الأوامر لإنشاء صورة حاوية التطبيق للملفmain.go
، وتتم الإشارة إليه في ملفskaffold.yaml
ذي المستوى الأعلى.
7. التطور مع سكافولد
ضبط بيئة Kubernetes
- شغِّل الأمر التالي للتأكّد من أنّ مجموعة Kubernetes المحلية تعمل وتم ضبطها:
minikube start
قد يستغرق ذلك عدة دقائق. من المفترض أن ترى النتيجة التالية إذا بدأت المجموعة بنجاح:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- شغِّل الأمر التالي لإنشاء مساحات اسم Kubernetes لـ
dev
وstaging
وprod
:
kubectl apply -f namespaces.yaml
من المفترض أن يظهر لك الناتج التالي:
namespace/dev created namespace/staging created namespace/prod created
استخدام سكافولد للتنمية المحلية
- شغِّل الأمر التالي لإنشاء التطبيق ونشره في مجموعة Kubernetes محلية تعمل في Cloud Shell:
skaffold dev
من المفترض أن يظهر لك تشغيل عملية إنشاء حاوية التطبيق، وقد يستغرق ذلك دقيقة، ثم يتم تكرار ناتج التطبيق كل ثانية:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
يُرجى العِلم أنّ اسم المجموعة الدقيق سيختلف عن الاسم العام الوارد أعلاه.
إجراء تغييرات على التطبيق
والآن بعد أن تم تشغيل التطبيق في مجموعة Kubernetes المحلية، يمكنك إجراء تغييرات على الرمز، وسيُعيد Skaffold إنشاء التطبيق وإعادة نشره تلقائيًا في المجموعة.
- افتح الملف
app > main.go
في جزء IDE، وغيِّر سلسلة الإخراج:
"Hello world from pod %s!\n"
إلى:
"Hello Skaffold world from pod %s!\n"
عندما تجري التغيير، يجب أن ترى سكافولد يُعيد إنشاء الصورة ويعيد نشرها في المجموعة، مع ظهور التغيير في الإخراج في النافذة الطرفية.
- الآن، أيضًا في ملف "app > main.go" في جزء IDE، غيِّر السطر:
time.Sleep(time.Second * 1)
إلى
time.Sleep(time.Second * 10)
مرة أخرى، سترى التطبيق قد تمت إعادة تصميمه وإعادة نشره، مع ظهور سطر المخرجات مرة كل 10 ثوانٍ.
إجراء تغييرات على إعدادات Kubernetes
بعد ذلك، ستُجري تغييرًا على إعدادات Kubernetes، وسيعيد Skaffold تلقائيًا نشر التغييرات.
- افتح الملف
base > deployment.yaml
في بيئة التطوير المتكاملة (IDE) وغيِّر السطر:
replicas: 1
إلى
replicas: 2
بعد إعادة نشر التطبيق، من المفترض أن يظهر لك مجموعتان قيد التشغيل، وسيكون لكل منهما اسم مختلف.
- الآن، قم بتغيير نفس السطر في الملف
base > deployment.yaml
مرة أخرى إلى:
replicas: 1
من المفترض أن تظهر إحدى المجموعات التي تمت إزالتها من الخدمة بحيث تتبقّى مجموعة واحدة فقط.
- أخيرًا، اضغط على
Ctrl-C
في النافذة الطرفية لإيقاف تنمية "سكافولد" المحلية.
قصّ إصدار
بعد ذلك، يمكنك إنشاء إصدار من خلال إنشاء صورة إصدار ونشره في مجموعة.
- نفِّذ الأمر التالي لإنشاء الإصدار:
skaffold build --file-output artifacts.json
سيؤدي هذا الأمر إلى إنشاء الصورة النهائية (إذا لزم الأمر) وإرسال تفاصيل الإصدار في ملف artifacts.json
.
إذا أردت استخدام أداة مثل Cloud Deploy (النشر في السحابة الإلكترونية) للنشر في مجموعاتك، يتضمّن هذا الملف معلومات الإصدار. وهذا يعني أن العناصر غير قابلة للتغيير في مسار الحياة.
- شغِّل الأمر التالي للاطّلاع على محتوى ملف
artifacts.json
:
cat artifacts.json | jq
لاحِظ أنّ الملف يحتوي على مرجع للصورة التي سيتم استخدامها في عملية النشر النهائية.
النشر على مراحل
- شغِّل الأمر التالي لنشر الإصدار باستخدام ملف
staging
الشخصي:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
بعد اكتمال النشر، من المفترض أن تظهر لك النتائج من مجموعتَين متشابهتَين على النحو التالي:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- اضغط على Ctrl-C في النافذة الطرفية لإيقاف إخراج Skaffold.
- شغِّل الأمر التالي لمراقبة عمل التطبيق في المجموعة:
kubectl get all --namespace staging
من المفترض أن يظهر لك اسمان مختلفان لمجموعات صغيرة، لأنّ الملف الشخصي staging
الخاص بالتطبيق يحدِّد أنّه يجب أن تكون هناك نسختان طبق الأصل في عملية النشر.
النشر في قناة الإصدار العلني
- شغِّل الآن الأمر التالي لنشر الإصدار باستخدام ملف
prod
الشخصي:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
بعد اكتمال النشر، من المفترض أن تظهر لك النتائج من ثلاث مجموعات تتشابه مع ما يلي:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- اضغط على Ctrl-C في النافذة الطرفية لإيقاف إخراج Skaffold.
من المفترَض أن تظهر لك ثلاثة أسماء مختلفة لمجموعات متسلسلة، لأنّ الملف الشخصي prod
الخاص بالتطبيق يحدِّد أنّ هناك ثلاث نُسخ مطابقة في عملية النشر.
- شغِّل الأمر التالي لمراقبة عمل التطبيق في المجموعة:
kubectl get all --namespace prod
من المفترض أن تظهر لك نتيجة تحتوي على أسطر مشابهة لما يلي تعرض عملية نشر المنتج:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
ومن المفترض أن تظهر أيضًا ثلاث مجموعات تطبيقات قيد التشغيل.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. تهانينا!
تهانينا! لقد أكملت التمرين المعملي Understanding Skaffold
وتعلمت كيفية إعداد Skaffold واستخدامه في التطوير المحلي ونشر التطبيقات.
الخطوة التالية:
متابعة تعلم المزيد حول سكافولد:
تنظيف
- شغِّل الأمر التالي لإيقاف تشغيل المجموعة المحلية:
minikube delete