1. الأهداف
Kustomize هي أداة تقدّم طريقة خالية من النماذج لتخصيص إعدادات التطبيقات، وتبسيط استخدام التطبيقات الجاهزة. وهي متاحة كأداة مستقلة ومُدمَجة في kubectl من خلال kubectl apply -k
ويمكن استخدامها كواجهة سطر الأوامر المستقلة. للحصول على تفاصيل إضافية، يمكنك قراءة المزيد على kustomize.io.
سوف تتعرّف في هذا البرنامج التعليمي على بعض المفاهيم الأساسية لمنصة Kustomize، وتستخدِمها لإدارة الاختلافات في التطبيقات والبيئات.
وسوف تقوم بما يلي:
- استخدام عميل سطر الأوامر في kustomize
- تجاوز العناصر الشائعة
- تصحيح بُنى yaml أكبر
- استخدام طبقات متعددة من التراكبات
2. جارٍ تحضير مساحة العمل
- يمكنك فتح محرِّر Cloud Shell من خلال الانتقال إلى عنوان URL التالي.
https://ide.cloud.google.com
- في النافذة الطرفية، أنشئ دليل عمل لهذا البرنامج التعليمي.
mkdir kustomize-lab
- التغيير إلى الدليل وإعداد مساحة عمل IDE
cd kustomize-lab && cloudshell workspace .
3- استخدام عميل سطر الأوامر kustomize
ترجع أهمية kustomize إلى القدرة على تركيب ملفات yaml قاعدة Kubernetes وتعديلها بقيم مخصّصة. لتنفيذ هذا الإجراء، يجب إنشاء ملف أساسي يتضمّن تعليمات حول مكان الملفات وما يجب تجاوزه. يتم تضمين 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 لتطبيق الناتج مباشرةً كما في المثال التالي. يؤدي ذلك إلى بث مخرجات أمر الإصدار مباشرةً إلى الأمر kubectlapply.
(عدم التنفيذ - تضمين كمرجع فقط)
kustomize build chat-app/base | kubectl apply -f -
تكون هذه التقنية مفيدة في حال الحاجة إلى إصدار معيّن من برنامج kustomize.
يمكن أيضًا تنفيذ kustomize باستخدام الأدوات المدمجة داخل kubectl. كما في المثال التالي.
(عدم التنفيذ - تضمين كمرجع فقط)
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/publish.yaml الذي أنشأته في الخطوة السابقة. في المقابل، تحتوي رموز التصحيح هذه على متغيّرات بيئة فريدة للمطوّرين والإنتاج.
- تنفيذ ملفات YAML المعروضة في kustomize للدليل الأساسي
أعِد كتابة القاعدة kustomization.yaml وإزالة مساحة الاسم وبادئة الاسم لأنّ هذه هي فقط الإعدادات الأساسية بدون أيّ تغيير. سيتم نقل هذه الحقول إلى ملفات البيئة خلال لحظات.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- تنفيذ ملفات YAML المعروضة في kustomize لدليل المطوّر
يمكنك الآن تنفيذ الصِيَغ الخاصة بمطوّري البرامج والإنتاج من خلال تنفيذ الأوامر التالية في الوحدة الطرفية.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
لاحظ إضافة قسم "patches
" من الملف. ويشير هذا إلى أنّ سياسة kustomize يجب أن تتراكب على هذه الملفات فوق الموارد الأساسية.
- تنفيذ ملفات YAML المعروضة في kustomize لدليل الإنتاج
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- تنفيذ kustomize لدمج الملفات
باستخدام ملفات القاعدة والبيئة التي تم إنشاؤها، يمكنك تنفيذ عملية التثبيت لتصحيح الملفات الأساسية.
شغّل الأمر التالي لـ dev لمشاهدة النتيجة المدمجة.
kustomize build chat-app/dev
تجدر الإشارة إلى أنّ الناتج يحتوي على نتائج مدمجة، مثل التصنيفات من الإعدادات الأساسية ومطوّر البرامج، بالإضافة إلى اسم صورة الحاوية من القاعدة ومتغيّر البيئة من مجلدات مطوّر البرامج.
6- استخدام طبقات متعددة من التراكبات
لدى العديد من المؤسسات فريق يساعد في دعم فرق التطبيقات وإدارة المنصة. كثيرًا ما تريد هذه الفِرق تضمين تفاصيل محدّدة يجب تضمينها في جميع التطبيقات في جميع البيئات، مثل وكيل التسجيل.
في هذا المثال، ستنشئ مجلد وموارد shared-kustomize
سيتم تضمينها في جميع التطبيقات وبغض النظر عن البيئة التي يتم نشرها فيها.
- إنشاء مجلد 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
" كأساس. بعد ذلك، قم بتصحيح النشر الخاص به.yaml في الأعلى. وستتم بعد ذلك تصحيح مجلدات البيئة مرة أخرى.
انسخ الأوامر التالية ونفّذها في الوحدة الطرفية
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- تشغيل kustomize وعرض النتائج المدمجة من أجل dev
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>