تقريبا. العابرة. : كتب المقال سكوت لوي ، كبير مهندسي تكنولوجيا المعلومات الذي ألف / شارك في تأليف سبعة كتب مطبوعة (في المقام الأول لبرنامج VMware vSphere). يعمل حاليًا في شركة VMware التابعة لها ، هيبتو (التي تم الاستحواذ عليها في عام 2016) ، وهي متخصصة في الحوسبة السحابية و Kubernetes. يُعد النص نفسه بمثابة مقدمة سهلة الفهم لإدارة التكوين ل Kubernetes باستخدام تقنية Kustomize ، المضمنة مؤخرًا مع K8s.
Kustomize هي أداة تتيح للمستخدمين "تخصيص ملفات YAML بسيطة وخالية من القوالب لأغراض متعددة ، وترك YAML الأصلي سليمًا وقابل للاستخدام" (يتم استعارة الوصف مباشرةً من
مستودع kustomize على GitHub ). يمكن تشغيل Kustomize مباشرة ، أو بدءًا من Kubernetes 1.14 ، استخدم
kubectl -k
للوصول إلى وظائفها (على الرغم من اعتبارًا من Kubernetes 1.15 ، فإن ثنائي منفصل أحدث من الميزات المضمنة في kubectl).
( ملاحظة : مع الإصدار الأخير من Kubernetes 1.16 ، يتم دعم kustomize أيضًا في أداة kubeadm.) في هذا
المنشور ، أريد أن أعرض القراء على أساسيات kustomize.
في أبسط أشكاله / تطبيقاته ، يعد kustomize مجرد مجموعة من الموارد (ملفات YAML التي تحدد كائنات Kubernetes: عمليات النشر والخدمات وما إلى ذلك) بالإضافة إلى قائمة الإرشادات حول التغييرات التي يلزم إجراؤها على هذه الموارد. تمامًا مثلجعل استخدام مجموعة التعليمات الموجودة في
Makefile
، ويقوم Docker
Dockerfile
حاوية بناءً على إرشادات من
Dockerfile
، يستخدم
kustomization.yaml
لتخزين الإرشادات حول التغييرات التي يريد المستخدم إجراؤها على مجموعة الموارد.
فيما يلي مثال لملف
kustomization.yaml
:
resources: - deployment.yaml - service.yaml namePrefix: dev- namespace: development commonLabels: environment: development
لن أحاول التحدث عن جميع الحقول الممكنة في ملف
kustomization.yaml
(هذا مكتوب جيدًا
هنا ) ، لكنني سأقدم شرحًا موجزًا لمثال محدد:
- يشير حقل
resources
إلى ما سوف يتغير (أي الموارد). في هذه الحالة ، سيبحث عن موارد في service.yaml
deployment.yaml
service.yaml
و service.yaml
في دليله (إذا لزم الأمر ، يمكنك تحديد مسارات كاملة أو نسبية). namePrefix
حقل namePrefix kustomize لإضافة بادئة محددة (في هذه الحالة ، dev-
) إلى سمة name
جميع الموارد المحددة في حقل resources
. وبالتالي ، إذا كان هناك name
في Deployment له قيمة nginx-deployment
Publishing ، فإن kustomize سيجعل نشر dev-nginx-deployment
.- يرشد حقل
namespace
kustomize لإضافة مساحة الاسم المحددة إلى جميع الموارد. في هذه الحالة ، ستنشر النشر والخدمة في مساحة اسم development
. - وأخيرًا ، يحتوي حقل
commonLabels
على مجموعة من التسميات التي سيتم إضافتها إلى جميع الموارد. في مثالنا ، ستخصص kustomize تسمية للموارد مع environment
الاسم development
القيمة.
إذا كان المستخدم يعمل
kustomize build .
في الدليل الذي يحتوي على ملف
kustomization.yaml
والموارد الضرورية (أي ، مثل
kustomization.yaml
و
service.yaml
files) ، ثم في الخرج ، سيتلقى النص بالتغييرات المسجلة في
kustomization.yaml
.
تقريبا. العابرة. : توضيح من وثائق المشروع للاستخدام "البسيط" ل kustomizeيمكن إعادة توجيه الإخراج إذا كنت بحاجة إلى تنفيذ التغييرات:
kustomize build . > custom-config.yaml
الإخراج حاسم (مع نفس الإدخال ، سيتم الحصول على نفس الإخراج) ، لذلك لا يمكنك حفظ النتيجة في ملف. بدلاً من ذلك ، يمكنك نقلها على الفور إلى أمر آخر:
kustomize build . | kubectl apply -f -
يمكن أيضًا الوصول إلى
kubectl -k
عبر
kubectl -k
(منذ الإصدار 1.14 من Kubernetes). ومع ذلك ، ضع في اعتبارك أنه يتم تحديث حزمة kustomize منفصلة بشكل أسرع من دمجها في kubectl (على الأقل هذا هو الحال مع إصدار Kubernetes 1.15).
قد يسأل القراء: "لماذا كل هذه الصعوبات ، إذا كان يمكنك تحرير الملفات مباشرة؟". سؤال رائع في المثال الخاص بنا ، من
الممكن حقًا تعديل ملفات
service.yaml
و
service.yaml
مباشرةً ، ولكن ماذا لو كانت مفترق مشروع شخص آخر؟ تغيير الملفات مباشرة يجعل من الصعب (إن لم يكن من المستحيل على الإطلاق) إعادة الشوكة عند إجراء تغييرات على المصدر / المصدر. يتيح لك استخدام kustomize تركيز هذه التغييرات في ملف
kustomization.yaml
، وترك الملفات الأصلية سليمة وبالتالي يسهل إعادة تحويل الملفات المصدر إذا لزم الأمر.
فوائد kustomize تصبح واضحة في حالات الاستخدام أكثر تعقيدا. في المثال أعلاه ،
kustomization.yaml
والموارد في نفس الدليل. ومع ذلك ، يدعم kustomize سيناريوهات الاستخدام عندما يكون هناك تكوين أساسي والعديد من المتغيرات ، والمعروفة أيضًا باسم
التراكبات . على سبيل المثال ، أراد المستخدم استخدام النشر والخدمة لـ nginx ، والتي استخدمتها كمثال ، وإنشاء إصدارات تطوير أو إنتاج (أو متغيرات) لهذه الملفات. للقيام بذلك ، سوف يحتاج إلى التراكبات المذكورة أعلاه ، وفي الواقع ، الموارد الأساسية نفسها.
لتوضيح فكرة التراكبات
والموارد الأساسية ، افترض أن الأدلة لديها البنية التالية:
- base - deployment.yaml - service.yaml - kustomization.yaml - overlays - dev - kustomization.yaml - staging - kustomization.yaml - prod - kustomization.yaml
في
base/kustomization.yaml
يستخدم المستخدمون ببساطة حقل
resources
للإعلان عن الموارد التي يجب تمكينها.
في كل ملف من
overlays/{dev,staging,prod}/kustomization.yaml
يشير المستخدمون إلى التكوين الأساسي في حقل
resources
، ثم يشيرون إلى التغييرات المحددة
لهذه البيئة . على سبيل المثال ، قد يبدو
overlays/dev/kustomization.yaml
سابقًا:
resources: - ../../base namePrefix: dev- namespace: development commonLabels: environment: development
في الوقت نفسه ، قد يكون
overlays/prod/kustomization.yaml
مختلفًا تمامًا:
resources: - ../../base namePrefix: prod- namespace: production commonLabels: environment: production sre-team: blue
عندما يبدأ المستخدم
kustomize build .
في دليل
overlays/dev
، ستنشئ kustomize خيار تطوير. إذا قمت بتشغيل
kustomize build .
في دليل
overlays/prod
- تحصل على خيار الإنتاج. وكل هذا - دون إجراء أي تغييرات على الملفات
(الأساسية) الأصلية ، وكل هذا - بطريقة تعريفية وحتمية. يمكنك الالتزام بالدلائل الأساسية للتكوين والتراكب مباشرة لنظام التحكم في الإصدار ، مع العلم أنه على أساس هذه الملفات ، يمكنك إنتاج التكوين المطلوب في أي وقت.
تقريبا. العابرة. : توضيح من وثائق المشروع لاستخدام التراكبات في kustomizeKustomize يمكن أن تفعل أكثر
بكثير مما هو موضح في هذه المقالة. ومع ذلك ، آمل أن يكون بمثابة مقدمة جيدة.
موارد إضافية
هناك العديد من المقالات والمنشورات الجيدة حول kustomize. إليك بعض منها وجدت أنها مفيدة بشكل خاص:
تقريبا. العابرة. : يمكنك أيضًا تقديم المشورة إلى مجموعة الروابط المنشورة كموارد على موقع الأداة المساعدة ، والمجموعة اللاحقة من مقاطع الفيديو التي تحتوي على أحدث التقارير حول kustomize.إذا كانت لديك أسئلة أو اقتراحات لتحسين هذه المواد ، فأنا منفتح دائمًا على التعليقات. يمكنك الاتصال بي على
Twitter أو على
قناة Kubernetes Slack . المتعة تعديل مظاهرك مع تخصيص!
PS من المترجم
اقرأ أيضًا في مدونتنا: