مقدمة موجزة ل Kustomize

تقريبا. العابرة. : كتب المقال سكوت لوي ، كبير مهندسي تكنولوجيا المعلومات الذي ألف / شارك في تأليف سبعة كتب مطبوعة (في المقام الأول لبرنامج 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 - تحصل على خيار الإنتاج. وكل هذا - دون إجراء أي تغييرات على الملفات (الأساسية) الأصلية ، وكل هذا - بطريقة تعريفية وحتمية. يمكنك الالتزام بالدلائل الأساسية للتكوين والتراكب مباشرة لنظام التحكم في الإصدار ، مع العلم أنه على أساس هذه الملفات ، يمكنك إنتاج التكوين المطلوب في أي وقت.


تقريبا. العابرة. : توضيح من وثائق المشروع لاستخدام التراكبات في kustomize

Kustomize يمكن أن تفعل أكثر بكثير مما هو موضح في هذه المقالة. ومع ذلك ، آمل أن يكون بمثابة مقدمة جيدة.

موارد إضافية


هناك العديد من المقالات والمنشورات الجيدة حول kustomize. إليك بعض منها وجدت أنها مفيدة بشكل خاص:


تقريبا. العابرة. : يمكنك أيضًا تقديم المشورة إلى مجموعة الروابط المنشورة كموارد على موقع الأداة المساعدة ، والمجموعة اللاحقة من مقاطع الفيديو التي تحتوي على أحدث التقارير حول kustomize.

إذا كانت لديك أسئلة أو اقتراحات لتحسين هذه المواد ، فأنا منفتح دائمًا على التعليقات. يمكنك الاتصال بي على Twitter أو على قناة Kubernetes Slack . المتعة تعديل مظاهرك مع تخصيص!

PS من المترجم


اقرأ أيضًا في مدونتنا:

Source: https://habr.com/ru/post/ar469179/


All Articles