1. الأهداف
Kustomize هي أداة توفّر طريقة لتخصيص إعدادات التطبيقات بدون استخدام نماذج، ما يسهّل استخدام التطبيقات الجاهزة. تتوفّر هذه الأداة كأداة مساعدة مستقلة، وهي مدمجة في kubectl من خلال kubectl apply -k أو يمكن استخدامها كواجهة سطر أوامر مستقلة. للحصول على تفاصيل إضافية، يمكنك الاطّلاع على مزيد من المعلومات على kustomize.io.
في هذا البرنامج التعليمي، ستتعرّف على بعض المفاهيم الأساسية في Kustomize وتستخدمها لإدارة الاختلافات في التطبيقات والبيئات.
عليك إجراء ما يلي:
- استخدام عميل سطر الأوامر kustomize
- تجاهل العناصر الشائعة
- تصحيح بنى yaml الأكبر
- استخدام طبقات متعددة من العناصر المركّبة
2. إعداد مساحة العمل
- افتح محرِّر Cloud Shell من خلال الانتقال إلى عنوان URL التالي
https://ide.cloud.google.com
- في نافذة الوحدة الطرفية، أنشئ دليل عمل لهذا البرنامج التعليمي
mkdir kustomize-lab
- الانتقال إلى الدليل وتحديد مساحة عمل بيئة التطوير المتكاملة
cd kustomize-lab && cloudshell workspace .
3- استخدام عميل سطر الأوامر kustomize
تستمدّ kustomize قوتها من إمكانية تراكب ملفات YAML الأساسية في Kubernetes وتعديلها باستخدام قيم مخصّصة. ولإجراء ذلك، يتطلّب Kustomize ملفًا أساسيًا يتضمّن تعليمات حول مكان الملفات وما يجب تجاوزه. يتم تضمين Kustomize في نظام Kubernetes المتكامل ويمكن تنفيذه من خلال طرق مختلفة.
في هذا القسم، ستنشئ إعدادًا أساسيًا لـ kustomize وتعالج الملفات باستخدام عميل سطر الأوامر المستقل kustomize.
- للبدء، عليك إنشاء مجلد يحتوي على ملفات الإعداد الأساسية
mkdir -p chat-app/base
- إنشاء ملف kubernetes
deployment.yamlبسيط في المجلد الأساسي
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- إنشاء القاعدة
kustomization.yaml
يبحث Kustomize عن ملف باسم kustomization.yaml كنقطة دخول. يحتوي هذا الملف على مراجع إلى ملفات الأساس والاستبدال المختلفة، بالإضافة إلى قيم استبدال معيّنة.
أنشئ ملف kustomization.yaml يشير إلى deployment.yaml كموارد أساسية.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- نفِّذ أمر kustomize على المجلد الأساسي. سيؤدي ذلك إلى إخراج ملفات YAML الخاصة بالنشر بدون أي تغييرات، وهو أمر متوقّع لأنّك لم تتضمّن أي صيغ بعد.
kustomize build chat-app/base
يمكن دمج هذا العميل المستقل مع عميل kubectl لتطبيق الناتج مباشرةً كما في المثال التالي. يؤدي ذلك إلى بث ناتج أمر الإنشاء مباشرةً إلى أمر kubectl apply.
(Do Not Execute - Included for reference only)
kustomize build chat-app/base | kubectl apply -f -
تكون هذه الطريقة مفيدة إذا كان هناك حاجة إلى إصدار معيّن من برنامج kustomize.
بدلاً من ذلك، يمكن تنفيذ kustomize باستخدام الأدوات المدمجة في kubectl نفسها. كما في المثال التالي.
(Do Not Execute - Included for reference only)
kubectl apply -k chat-app/base
4. إلغاء العناصر الشائعة
بعد إعداد مساحة العمل والتأكّد من أنّ kustomize يعمل، حان الوقت لتجاوز بعض القيم الأساسية.
يتم تخصيص الصور ومساحات الأسماء والتصنيفات بشكل شائع جدًا لكل تطبيق وبيئة. بما أنّ هذه الحقول تتغيّر بشكل شائع، يتيح لك Kustomize تعريفها مباشرةً في kustomize.yaml، ما يلغي الحاجة إلى إنشاء العديد من التصحيحات لهذه السيناريوهات الشائعة.
تُستخدَم هذه التقنية غالبًا لإنشاء نسخة معيّنة من أحد النماذج. يمكن الآن استخدام مجموعة أساسية واحدة من الموارد لعمليات تنفيذ متعددة من خلال تغيير الاسم ومساحة الاسم فقط.
في هذا المثال، ستضيف مساحة اسم وبادئة اسم وبعض التصنيفات إلى kustomization.yaml.
- عدِّل ملف
kustomization.yamlليتضمّن التصنيفات ومساحات الأسماء الشائعة.
انسخ الأوامر التالية ونفِّذها في الوحدة الطرفية
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- تنفيذ أمر الإنشاء
يُظهر تنفيذ عملية الإنشاء في هذه المرحلة أنّ ملف YAML الناتج يحتوي الآن على مساحة الاسم والتصنيفات والأسماء التي تبدأ ببادئة في كل من تعريفات الخدمة وعمليات النشر.
kustomize build chat-app/base
لاحظ كيف يحتوي الناتج على تصنيفات ومساحات أسماء غير موجودة في ملف YAML الخاص بعملية النشر. لاحظ أيضًا كيف تم تغيير الاسم من chat-app إلى my-chat-app
(لا يتم نسخ الناتج)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5- تعديل بنى yaml الأكبر
توفّر Kustomize أيضًا إمكانية تطبيق تصحيحات تتراكب مع الموارد الأساسية. تُستخدَم هذه التقنية غالبًا لتوفير اختلاف بين التطبيقات والبيئات.
في هذه الخطوة، ستنشئ أشكالًا مختلفة للبيئة لتطبيق واحد يستخدم الموارد الأساسية نفسها.
- ابدأ بإنشاء مجلدات للبيئات المختلفة
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- اكتب تصحيح المرحلة باستخدام الأمر التالي
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- الآن، اكتب حزمة الإصدار العلني باستخدام الأمر التالي
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
لاحظ أنّ التصحيحات أعلاه لا تحتوي على اسم صورة الحاوية. يتم توفير هذه القيمة في ملف base/deployment.yaml الذي أنشأته في الخطوة السابقة. ومع ذلك، تحتوي هذه التصحيحات على متغيرات بيئية فريدة لكل من بيئة التطوير والإنتاج.
- تنفيذ ملفات kustomize YAML للدليل الأساسي
أعِد كتابة ملف kustomization.yaml الأساسي، وأزِل مساحة الاسم وبادئة الاسم لأنّ هذا هو الإعداد الأساسي فقط بدون أي اختلاف. سيتم نقل هذه الحقول إلى ملفات البيئة في لحظات.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- تنفيذ ملفات kustomize YAML لدليل dev
الآن، نفِّذ الاختلافات في بيئة التطوير والإنتاج من خلال تنفيذ الأوامر التالية في الوحدة الطرفية.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
لاحظ إضافة القسم patches: إلى الملف. يشير ذلك إلى أنّ kustomize يجب أن يضع هذه الملفات فوق الموارد الأساسية.
- تنفيذ ملفات kustomize YAML لدليل prod
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- تشغيل kustomize لدمج الملفات
بعد إنشاء ملفات الأساس والبيئة، يمكنك تنفيذ عملية kustomize لتعديل ملفات الأساس.
نفِّذ الأمر التالي للمطوّرين للاطّلاع على النتيجة المدمجة.
kustomize build chat-app/dev
يُرجى العِلم أنّ الناتج يحتوي على نتائج مدمجة، مثل التصنيفات من الإعدادات الأساسية وإعدادات التطوير، بالإضافة إلى اسم صورة الحاوية من المجلدات الأساسية ومتغيّر البيئة من مجلدات التطوير.
6. استخدام طبقات متعددة من العناصر المركّبة
تضمّ العديد من المؤسسات فريقًا يساعد في دعم فِرق التطبيقات وإدارة المنصة. في كثير من الأحيان، تريد هذه الفِرق تضمين تفاصيل معيّنة يجب تضمينها في جميع التطبيقات على مستوى جميع البيئات، مثل عامل تسجيل الدخول.
في هذا المثال، ستنشئ مجلدًا shared-kustomize وموارد سيتم تضمينها في جميع التطبيقات بغض النظر عن البيئة التي يتم نشرها فيها.
- إنشاء مجلد shared-kustomize
mkdir shared-kustomize
- إنشاء
deployment.yamlبسيط في المجلد المشترك
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- إنشاء ملف kustomization.yaml في المجلد المشترك
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- الإشارة إلى مجلد shared-kustomize من تطبيقك
بما أنّك تريد أن يكون المجلد shared-kustomize هو الأساس لجميع تطبيقاتك، عليك تعديل chat-app/base/kustomization.yaml لاستخدام shared-kustomize كأساس. ثمّ يتم تعديل ملف deployment.yaml الخاص به. بعد ذلك، سيتم تصحيح مجلدات البيئة مرة أخرى فوق ذلك.
انسخ الأوامر التالية ونفِّذها في الوحدة الطرفية
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- تشغيل kustomize وعرض النتائج المدمجة لبيئة التطوير
kustomize build chat-app/dev
يُرجى العِلم أنّ الناتج يحتوي على نتائج مدمجة من قاعدة التطبيق وبيئة التطبيق ومجلدات shared-kustomize. على وجه التحديد، يمكنك الاطّلاع في قسم الحاويات على قيم من جميع المواقع الجغرافية الثلاثة.
(لا تنسخ الناتج)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>