فهم سكافولد

1. الأهداف

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

في هذا الدليل التعليمي، ستتعرّف على بعض المفاهيم الأساسية لـ Skaffold، وستستخدمه لأتمتة حلقة التطوير الداخلية، ثم نشر تطبيق.

ويمكنك إجراء ما يلي:

  • ضبط Skaffold وتفعيله للتطوير على الجهاز
  • إنشاء تطبيق golang بسيط وتشغيله
  • إدارة نشر التطبيقات على الجهاز باستخدام Skaffold
  • عرض بيانات البيان ونشر تطبيقك

2. قبل البدء

جارٍ تحضير مساحة العمل

  1. افتح محرِّر Cloud Shell من خلال الانتقال إلى عنوان URL التالي:
https://shell.cloud.google.com

السماح بملفات تعريف الارتباط التابعة لجهات خارجية انقر على "الموقع الإلكتروني لا يعمل" ثم على "السماح بملفات تعريف الارتباط".

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. إذا لم يسبق لك إجراء ذلك، استنسِخ مصدر التطبيق في النافذة الطرفية باستخدام الأمر التالي:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
  1. انتقِل إلى دليل المستودع المُنشئ من النسخة:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
  1. اضبط مساحة عمل Cloud Shell على الدليل الحالي من خلال تنفيذ الأمر التالي:
cloudshell workspace .

تحضير مشروعك

  1. تأكَّد من إعداد مشروعك على Google Cloud بشكلٍ صحيح من خلال تنفيذ الأمر التالي:
gcloud config set project {{project-id}}

3- بدء استخدام Skaffold

  1. شغِّل الأمر التالي لإنشاء ملف إعدادات 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
  1. افتح الملف 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. يُرجى ملاحظة أنّه تم ضبط عدد النُسخ المكرّرة للتطبيق هنا على ثلاثة، ما يؤدي إلى إلغاء الإعداد الأساسي.

  1. افتح الملف التالي app > main.go في لوحة IDE. هذا تطبيق golang بسيط يكتب سلسلة إلى stdout كل ثانية.
  2. يُرجى ملاحظة أنّ التطبيق يعرض أيضًا اسم مجموعة Kubernetes التي يعمل فيها.

عرض ملف Dockerfile

  1. افتح الملف app > Dockerfile في لوحة IDE. يحتوي هذا الملف على تسلسل من التعليمات لإنشاء صورة حاوية التطبيق لملف main.go، ويتمّ الإشارة إليه في ملف skaffold.yaml ذي المستوى الأعلى.

7- التطوير باستخدام Skaffold

ضبط بيئة Kubernetes

  1. شغِّل الأمر التالي للتأكّد من تشغيل مجموعة Kubernetes المحلية وضبطها:
minikube start

قد يستغرق ذلك عدّة دقائق. من المفترض أن ترى النتيجة التالية إذا بدأت المجموعة بنجاح:

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  1. نفِّذ الأمر التالي لإنشاء مساحات أسماء Kubernetes لكل من dev وstaging وprod:
kubectl apply -f namespaces.yaml

من المفترض أن يظهر لك الناتج التالي:

namespace/dev created
namespace/staging created
namespace/prod created

استخدام Skaffold لتطوير التطبيقات على الجهاز

  1. شغِّل الأمر التالي لإنشاء التطبيق ونشره في مجموعة Kubernetes محلية تعمل في Cloud Shell:
skaffold dev

من المفترض أن تظهر لك عملية إنشاء حاوية التطبيق، والتي قد تستغرق دقيقة واحدة، ثم يتكرر ناتج التطبيق كل ثانية:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx

يُرجى العِلم أنّ اسم الحِزمة الدقيقة سيختلف عن الإخراج العام الوارد أعلاه.

إجراء تغييرات على التطبيق

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

  1. افتح الملف app > main.go في لوحة IDE، وغيِّر سلسلة الإخراج:
"Hello world from pod %s!\n"

إلى:

"Hello Skaffold world from pod %s!\n"

بعد إجراء التغيير، من المفترض أن ترى Skaffold تعيد إنشاء الصورة وإعادة نشرها في المجموعة، مع ظهور التغيير في الإخراج في نافذة وحدة التحكّم.

  1. الآن، في الملف "app > main.go" في لوحة IDE أيضًا، غيِّر السطر:
time.Sleep(time.Second * 1)

إلى

time.Sleep(time.Second * 10)

من المفترض أن يظهر لك مرة أخرى أنّه تمت إعادة إنشاء التطبيق وإعادة نشره، مع ظهور سطر الإخراج مرة كل 10 ثوانٍ.

إجراء تغييرات على إعدادات Kubernetes

بعد ذلك، عليك إجراء تغيير على إعدادات Kubernetes، وسيتم إعادة نشر Skaffold تلقائيًا مرة أخرى.

  1. افتح الملف base > deployment.yaml في بيئة التطوير المتكاملة (IDE) وغيِّر السطر:
replicas: 1

إلى

replicas: 2

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

  1. الآن، قم بتغيير نفس السطر في الملف base > deployment.yaml مرة أخرى إلى:
replicas: 1

من المفترض أن تتم إزالة إحدى مجموعات الوحدات من الخدمة لتبقى مجموعة واحدة فقط.

  1. أخيرًا، اضغط على Ctrl-C في نافذة المحطة الطرفية لإيقاف تطوير Skaffold على الجهاز.

قطع إصدار

بعد ذلك، ستنشئ إصدارًا من خلال إنشاء صورة إصدار ونشرها في مجموعة.

  1. شغِّل الأمر التالي لإنشاء الإصدار:
skaffold build --file-output artifacts.json

سيؤدي هذا الأمر إلى إنشاء الصورة النهائية (إذا لزم الأمر) وعرض تفاصيل الإصدار في ملف artifacts.json.

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

  1. نفِّذ الأمر التالي لعرض محتوى ملف artifacts.json:
cat artifacts.json | jq

لاحِظ أنّ الملف يحتوي على مرجع للصورة التي سيتم استخدامها في عملية النشر النهائية.

النشر في مرحلة الاختبار

  1. شغِّل الأمر التالي لنشر الإصدار باستخدام ملف staging الشخصي:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail

بعد اكتمال عملية النشر، من المفترض أن يظهر لك ناتج من مجموعتَي وحدات معيّنتَين مشابه لما يلي:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
  1. اضغط على Ctrl-C في نافذة وحدة التحكّم الطرفية لإيقاف إخراج Skaffold.
  2. نفِّذ الأمر التالي لمراقبة تطبيقك أثناء تشغيله في المجموعة:
kubectl get all --namespace staging

من المفترض أن تظهر لك اسمان مختلفان للوحدة الأساسية، لأنّ الملف الشخصي staging للتطبيق يحدّد أنّه يجب أن يكون هناك نسختان في عملية النشر.

النشر في قناة الإصدار العلني

  1. الآن، نفِّذ الأمر التالي لنشر الإصدار باستخدام الملف الشخصي prod:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail

بعد اكتمال عملية النشر، من المفترض أن يظهر لك ناتج من ثلاث وحدات pod مشابه لما يلي:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
  1. اضغط على Ctrl-C في النافذة الطرفية لإيقاف إخراج Skaffold.

من المفترض أن تظهر لك ثلاثة أسماء وحدات pod مختلفة، لأنّ ملف التكوين prod للتطبيق يحدّد أنّه يجب أن تكون هناك ثلاث نُسخ طبق الأصل في عملية النشر.

  1. نفِّذ الأمر التالي لمراقبة تطبيقك أثناء تشغيله في المجموعة:
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:

تنظيف

  1. نفِّذ الأمر التالي لإيقاف المجموعة المحلية:
minikube delete