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 Build.
5- النشر
يحتوي القسم deploy
على إعدادات تحدّد كيفية نشر التطبيق. في هذه الحالة، يمكنك الاطّلاع على مثال على عملية نشر تلقائية تضبط Skaffold لاستخدام أداة Kustomize
.
توفّر أداة Kustomize
وظيفة إنشاء بيانات Kubernetes من خلال دمج مجموعة من ملفات YAML المكوّنات الشائعة (ضمن الدليل base
) مع "تراكبات" واحدة أو أكثر تتوافق عادةً مع هدف واحد أو أكثر من أهداف النشر، وعادةً ما تكون dev وtest ومراحل وإنتاج أو ما شابه ذلك.
في هذا المثال، يمكنك الاطّلاع على اثنين من التراكبات لثلاثة أهداف، وهي dev وstaging وprod. سيتم استخدام التراكب dev أثناء التطوير على الجهاز، وسيتم استخدام التراكبَين staging وprod عند النشر باستخدام Skaffold.
6- ملفات التعريف
يحتوي القسم profiles
على إعدادات تحدّد إعدادات الإنشاء والاختبار والنشر في سياقات مختلفة. وتكون السياقات المختلفة عادةً بيئات مختلفة في مسار نشر تطبيقك، مثل staging
أو prod
في هذا المثال. وهذا يعني أنّه يمكنك بسهولة إدارة ملفات البيان التي يجب أن تختلف محتوياتها حسب البيئات المستهدفة المختلفة، بدون تكرار إعدادات النموذج الأساسية.
يمكن للإعداد في قسم profiles
أن يحل محل أي عناصر أو تصحيحها من الإعدادات الرئيسية (مثل الأقسام build
أو test
أو deploy
).
على سبيل المثال، افتح الملف overlays > prod > deployment.yaml
. يُرجى ملاحظة أنّه تم ضبط عدد النُسخ المكرّرة للتطبيق هنا على ثلاثة، ما يؤدي إلى إلغاء الإعداد الأساسي.
التنقل في رمز مصدر التطبيق.
- افتح الملف التالي
app > main.go
في لوحة IDE. هذا تطبيق golang بسيط يكتب سلسلة إلىstdout
كل ثانية. - يُرجى ملاحظة أنّ التطبيق يعرض أيضًا اسم مجموعة Kubernetes التي يعمل فيها.
عرض ملف Dockerfile
- افتح الملف
app > Dockerfile
في لوحة IDE. يحتوي هذا الملف على تسلسل من التعليمات لإنشاء صورة حاوية التطبيق لملفmain.go
، ويتمّ الإشارة إليه في ملفskaffold.yaml
ذي المستوى الأعلى.
7- التطوير باستخدام Skaffold
ضبط بيئة 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
استخدام Skaffold لتطوير التطبيقات على الجهاز
- شغِّل الأمر التالي لإنشاء التطبيق ونشره في مجموعة 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"
بعد إجراء التغيير، من المفترض أن ترى Skaffold تعيد إنشاء الصورة وإعادة نشرها في المجموعة، مع ظهور التغيير في الإخراج في نافذة وحدة التحكّم.
- الآن، في الملف "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 على الجهاز.
قطع إصدار
بعد ذلك، ستنشئ إصدارًا من خلال إنشاء صورة إصدار ونشرها في مجموعة.
- شغِّل الأمر التالي لإنشاء الإصدار:
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
بعد اكتمال عملية النشر، من المفترض أن يظهر لك ناتج من ثلاث وحدات pod مشابه لما يلي:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- اضغط على Ctrl-C في النافذة الطرفية لإيقاف إخراج Skaffold.
من المفترض أن تظهر لك ثلاثة أسماء وحدات pod مختلفة، لأنّ ملف التكوين 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 واستخدامه لتطوير التطبيقات على الجهاز ونشرها.
الخطوة التالية:
اطّلِع على مزيد من المعلومات حول Skaffold:
تنظيف
- نفِّذ الأمر التالي لإيقاف المجموعة المحلية:
minikube delete