دروس الدمية للمبتدئين: ما هي الدمية وكيفية استخدامها؟
قبل أن نتعلم الدمية، دعونا نفهم:
ما هي إدارة التكوين؟
إدارة التكوين هي عملية الحفاظ على البرامج وأنظمة الكمبيوتر (على سبيل المثال، الخوادم والتخزين والشبكات) في حالة معروفة ومرغوبة ومتسقة. كما يسمح بالوصول إلى سجل تاريخي دقيق لحالة النظام لأغراض إدارة المشروع والتدقيق.
يقوم مسؤولو النظام في الغالب بمهام متكررة مثل تثبيت الخوادم، وتكوين تلك الخوادم، وما إلى ذلك. ويمكن لهؤلاء المحترفين أتمتة هذه المهمة، عن طريق كتابة البرامج النصية.
ومع ذلك، فهي مهمة صعبة عندما يعملون على بنية تحتية ضخمة. تم تقديم أداة إدارة التكوين مثل الدمية لحل مثل هذه المشكلات.
ما هي الدمية؟
دمية هي أداة لإدارة النظام لمركزية وأتمتة عملية إدارة التكوين. تُستخدم الدمية أيضًا كأداة لنشر البرامج. إنه برنامج إدارة تكوين مفتوح المصدر يستخدم على نطاق واسع لتكوين الخادم وإدارته ونشره وتنسيقه لمختلف التطبيقات والخدمات عبر البنية التحتية الكاملة للمؤسسة.
تم تصميم Puppet خصيصًا لإدارة تكوين Linux و Windows أنظمة. إنه مكتوب بلغة روبي ويستخدم أسلوبه الفريد Domain Specific Lاللغة (DSL) لوصف تكوين النظام.
ما هي إصدارات الدمى؟
تأتي الدمية في نسختين:
- دمية مفتوحة المصدر: إنها نسخة أساسية من أداة إدارة تكوين Puppet، والتي تُعرف أيضًا باسم Open Source Puppet. وهو متاح مباشرة من موقع Puppet الإلكتروني ومرخص بموجب نظام Apache 2.0.
- الدمية المؤسسة: إصدار تجاري يوفر ميزات مثل تقارير الامتثال والتنسيق والتحكم في الوصول المستند إلى الأدوار وواجهة المستخدم الرسومية وواجهة برمجة التطبيقات وأدوات سطر الأوامر لإدارة العقد بشكل فعال.
ما الدمية يمكن أن تفعل؟
على سبيل المثال، لديك بنية تحتية تضم حوالي 100 خادم. باعتبارك مسؤول النظام، فإن دورك هو التأكد من أن جميع هذه الخوادم محدثة دائمًا وتعمل بكامل الوظائف.
للقيام بذلك، يمكنك استخدام Puppet، الذي يسمح لك بكتابة كود بسيط يمكن نشره تلقائيًا على هذه الخوادم. وهذا يقلل من الجهد البشري ويجعل عملية التطوير سريعة وفعالة.
تؤدي الدمية الوظائف التالية:
- يتيح لك Puppet تحديد تكوينات مميزة لكل مضيف.
- تتيح لك الأداة مراقبة الخوادم بشكل مستمر للتأكد من وجود التكوين المطلوب أم لا وعدم تغييره. إذا تم تغيير التكوين، فستعود أداة Puppet إلى التكوين المحدد مسبقًا على المضيف.
- كما أنه يوفر التحكم في النظام الذي تم تكوينه بالكامل، بحيث يتم تنفيذ التغيير المركزي تلقائيًا.
- يتم استخدامه أيضًا كأداة نشر حيث يقوم تلقائيًا بنشر البرنامج على النظام. يقوم بتنفيذ البنية التحتية كرمز لأن السياسات والتكوينات مكتوبة كرمز.
دمية DSL ونماذج البرمجة
قبل أن نتعلم Puppet DSL، دعونا نفهم نماذج البرمجة:
نموذج البرمجة هو النمط الذي تستخدمه في برمجة الكمبيوتر.
أربعة أنواع من النماذج هي:
- إلزامي.
- تصريحي.
- وظيفية (والتي تعتبر مجموعة فرعية من هذا النموذج التعريفي)
- وجوه المنحى.
سنركز على الأمر الحتمي والتصريحي.
النماذج الحتمية
يعبر نموذج البرمجة هذا عن منطق الحساب (ما يجب فعله) ويصف تدفق التحكم فيه (كيفية القيام به)
على سبيل المثال:
افترض أنك ذاهب إلى مكتبك، وقمت بحجز سيارة أجرة والبدء في إعطاء التوجيهات خطوة بخطوة للسائق حتى تصل إلى المكتب. إن تحديد ما يجب القيام به وكيفية القيام به هو أسلوب ضروري.
النماذج التصريحية
يعبر نموذج البرمجة هذا عن منطق الحساب (ما يجب فعله) دون وصف تدفق التحكم الخاص به (كيفية القيام به)
على سبيل المثال:
لنفترض أنك ذاهب إلى مكتبك، وقمت بحجز سيارة أجرة أوبر وتحديد الوجهة النهائية (المكتب). تحديد ما يجب فعله وليس كيفية القيام به هو أسلوب تصريحي.
نموذج | ماذا أفعل | كيفية القيام |
---|---|---|
واجب | نعم | نعم |
تصريحي | نعم | لا |
يستخدم Puppet نموذج برمجة تعريفي
يستخدم Puppet أسلوب البرمجة التصريحية.
على سبيل المثال: إنشاء مستخدم على النظام:
يمكن القيام بذلك باستخدام نمط البرمجة الحتمية بواسطة برنامج نصي shell: هنا نحدد كيفية إنشاء المستخدم والأوامر التي يجب استخدامها في نظام التشغيل.
ومع ذلك، يمكن القيام بذلك باستخدام نمط البرمجة التعريفي مع بضعة أسطر فقط من كود الدمية، ولغة مجال الدمية المحددة (DSL)، ولا يزال يحقق نفس النتيجة.
نماذج نشر أدوات إدارة التكوين
هناك نوعان من نماذج النشر لـ أدوات إدارة التكوين :
- نموذج النشر القائم على الدفع: يبدأ بواسطة عقدة رئيسية.
- نموذج النشر القائم على السحب: بدأه الوكلاء.
نموذج النشر القائم على الدفع
في نموذج النشر هذا، يقوم الخادم الرئيسي بدفع التكوينات والبرامج إلى الوكلاء الفرديين. بعد التحقق من الاتصال الآمن، يقوم السيد بتشغيل الأوامر عن بعد على الوكلاء. على سبيل المثال، Ansible ومكدس الملح.
نموذج النشر القائم على السحب.
في نموذج النشر هذا، تتصل الخوادم الفردية بخادم رئيسي، وتتحقق من الاتصال الآمن وتؤسسه، وتقوم بتنزيل التكوينات والبرامج الخاصة بها، ثم تقوم بتكوين نفسها وفقًا لذلك - على سبيل المثال، Puppet وChef.
كيف تعمل الدمية؟
يعتمد Puppet على نموذج نشر السحب، حيث تقوم عقد الوكيل بالتحقق بانتظام بعد كل مرة 1800 ثوانٍ مع العقدة الرئيسية لمعرفة ما إذا كان هناك أي شيء يحتاج إلى التحديث في الوكيل. إذا كان هناك أي شيء يحتاج إلى تحديث، يقوم الوكيل بسحب رموز الدمية الضرورية من السيد وتنفيذ الإجراءات المطلوبة.
دعنا نوضح ذلك بمثال:
على سبيل المثال: رئيسي - إعداد الوكيل:
السيد
جهاز يعمل بنظام التشغيل Linux ومثبت عليه برنامج Puppet master. وهي مسؤولة عن الحفاظ على التكوينات في شكل رموز دمية. العقدة الرئيسية يمكن أن تكون Linux فقط.
الوكلاء
الأجهزة المستهدفة يتم إدارتها بواسطة دمية مع تثبيت برنامج وكيل الدمية عليها.
يمكن تكوين العميل على أي نظام تشغيل مدعوم مثل Linux أو Windows or Solaris أو نظام التشغيل Mac.
ويتم الاتصال بين السيد والوكيل من خلال شهادات آمنة.
التواصل بين السيد والوكيل
الخطوة 1) بمجرد إنشاء الاتصال بين العميل والخادم الرئيسي، يرسل عميل Puppet البيانات حول حالته إلى خادم Puppet الرئيسي. تسمى هذه البيانات "الحقائق": تتضمن هذه المعلومات اسم المضيف وتفاصيل النواة وعنوان IP وتفاصيل اسم الملف وما إلى ذلك...
الخطوة 2) يستخدم Puppet Master هذه البيانات ويقوم بتجميع قائمة بالتكوين الذي سيتم تطبيقه على الوكيل. تُعرف قائمة التكوين التي سيتم تنفيذها على الوكيل باسم a فهرس. يمكن تغيير ذلك مثل تثبيت الحزمة أو ترقيتها أو إزالتها أو إنشاء نظام الملفات أو إنشاء مستخدم أو حذفه أو إعادة تشغيل الخادم أو تغيير تكوين IP وما إلى ذلك.
الخطوة 3) يستخدم الوكيل قائمة التكوين هذه لتطبيق أي تغييرات تكوين مطلوبة على العقدة.
في حالة عدم وجود انحرافات في التكوين، لا يقوم الوكيل بإجراء أي تغييرات في التكوين ويترك العقدة لتعمل بنفس التكوين.
الخطوة 4) بمجرد الانتهاء من ذلك، تعود العقدة إلى مدير الدمية للإشارة إلى أنه تم تطبيق التكوين وإكماله.
كتل الدمية
توفر Puppet المرونة اللازمة لدمج التقارير مع أدوات الجهات الخارجية باستخدام Puppet APIs.
أربعة أنواع من اللبنات الأساسية للعرائس هي
- الموارد
- فصول دراسية
- واضح
- الأقسام
موارد الدمى
موارد الدمى هي اللبنات الأساسية لـ Puppet.
الموارد هي وظائف يحمل في ثناياه عوامل التي تعمل في الجزء الخلفي لأداء العمليات المطلوبة في puppet.
دروس الدمى
يمكن تجميع مجموعة من الموارد المختلفة معًا في وحدة واحدة تسمى الفئة.
بيان الدمية
البيان هو دليل يحتوي على ملفات DSL الدمية. تحتوي هذه الملفات على ملحق .pp. يرمز ملحق .pp إلى برنامج الدمية. يتكون رمز الدمية من تعريفات أو إعلانات لفئات الدمى.
وحدات الدمية
الوحدات عبارة عن مجموعة من الملفات والأدلة مثل البيانات وتعريفات الفئة. إنها الوحدات القابلة لإعادة الاستخدام والقابلة للمشاركة في Puppet.
على سبيل المثال، MySQL وحدة لتثبيت وتكوين MySQL أو وحدة Jenkins لإدارة Jenkins، وما إلى ذلك.
أنواع الموارد الدمية
بشكل عام، يتكون النظام من ملفات، ومستخدمين، وخدمات، وعمليات، وحزم، وما إلى ذلك. وفي Puppet، تسمى هذه الموارد. الموارد هي اللبنات الأساسية في
الدمية. يتم تنفيذ جميع العمليات على عملاء الدمى بمساعدة موارد الدمى.
موارد Puppet هي أدوات جاهزة تُستخدم لأداء مهام وعمليات مختلفة على أي منصة مدعومة. يمكننا استخدام مورد Puppet واحد لأداء مهمة محددة، أو يمكننا استخدام موارد Puppet متعددة معًا لأداء بعض عمليات نشر تكوينات التطبيقات المعقدة.
يمكن أن يكون للموارد أنواع مختلفة. استخدامات الدمية موارد أنواع الموارد من أجل وصف تكوين النظام.
هناك ثلاثة أنواع من أنواع الموارد:
- الدمية الأساسية أو أنواع الموارد المضمنة.
- أنواع الموارد المحددة للدمى.
- أنواع الموارد المخصصة للدمى.
الدمية الأساسية أو أنواع الموارد المضمنة
أنواع الموارد الأساسية أو المضمنة هي أنواع موارد الدمى المضمنة مسبقًا والتي يتم شحنها مع برامج الدمى. تتم كتابة جميع أنواع موارد Puppet الأساسية أو المضمنة وصيانتها بواسطة فريق Puppet.
أنواع الموارد المحددة للدمى
أنواع الموارد المحددة هي أنواع موارد خفيفة مكتوبة بلغة تعريفية للعرائس باستخدام مجموعة من أنواع الموارد الموجودة.
أنواع الموارد المخصصة للدمى
أنواع الموارد المخصصة هي أنواع موارد مخصصة بالكامل مكتوبة بلغة روبي.
دعونا نستكشف أنواع موارد الدمى...
في المحطة الطرفية، اكتب الأمر التالي لعرض قائمة بالأوامر الفرعية ذات الصلة بـ Puppet:
Puppet --help
في حالتنا نحن مهتمون بالأمر الفرعي "مورد"والتي سنستخدمها للعثور على معلومات حول أنواع موارد الدمى المضمنة.
في المحطة الطرفية، اكتب أيًا من الأوامر التالية لعرض قائمة الإجراءات المرتبطة بالأمر الفرعي للدمية "مورد"
Puppet help resource Puppet resource --help
في هذه الحالة ، لدينا مورد كأمر فرعي و -أنواع كعمل.
يحتوي Puppet على 49 نوعًا من الموارد الأساسية المضمنة.
في المحطة الطرفية، اكتب الأمر التالي لعرض قائمة بأنواع موارد الدمى المضمنة المتوفرة:
puppet resource –types
كل نوع يدعم قائمة سمات. توفر هذه السمات وصفًا تفصيليًا يستخدمه Puppet لإدارة المورد.
للتعرف على جميع السمات المرتبطة بنوع مورد الدمية، استخدم الأمر التالي:
puppet describe <resource type name>
ستقوم المعلمات بسرد جميع السمات المتاحة لهذا النوع من الموارد.
دمية تصف الحزمة
من الصعب على الشخص الجديد أن يفهم ويربط بين العديد من ملفات التعليمات البرمجية غير المُدارة. وهنا نحتاج إلى بعض التجميع لربط العمليات معًا. والهدف هو حل مشكلة واحدة، مثل جميع العمليات المطلوبة لتكوين ssh على خادم أو خدمة ntp أو خادم ويب كامل أو خادم قاعدة بيانات من البداية.
ما هي فئات الدمى؟
فئات الدمى هي مجموعة من موارد الدمى المجمعة معًا كوحدة واحدة.
قدمت الدمية دروسًا لجعل الهيكل قابلاً لإعادة الاستخدام وتنظيمه.
أولا، نحتاج إلى تعريف فئة باستخدام بناء جملة تعريف الفئة؛ يجب أن تكون الفئات فريدة ولا يمكن الإعلان عنها إلا مرة واحدة بنفس الاسم:
class <class-name> { <Resource declarations> }
على سبيل المثال:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
لقد قمنا حتى الآن بتعريف الفئة فقط، لكننا لم نستخدمها في أي مكان. وهذا يعني أن هذا الكود الذي كتبناه لن يتم تنفيذه أبدًا ما لم نعلن عن هذه الفئة في مكان آخر.
إعلان الطبقة
لاستخدام فئة محددة في التعليمات البرمجية، استخدم تتضمن الكلمة.
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
دعونا نفهم هذا مع سيناريو حالة حقيقية.
تثبيت تجريبي NTP
أولاً، تأكد من أن حزمة NTP غير موجودة بالفعل على الخادم، لن يقوم الأمر التالي بإرجاع أي شيء إذا لم يكن telnet موجودًا على الخادم:
rpm -qa | grep -i ntp
كما نرى، فإن حزمة NTP موجودة بالفعل على الخادم. لنقم بإزالة حزمة NTP الموجودة:
yum remove ntp
بعد إزالة الحزمة، تأكد من عدم وجود الملف ntp.conf:
ls -lrt /etc/ntp.conf
تأكد من عدم وجود خدمة ntp عن طريق تشغيل الأمر التالي:
systemctl status ntp
قم بإنشاء ملف .pp جديد لحفظ الكود. من سطر الأوامر:
vi demontp.pp
قم بالتغيير إلى وضع الإدراج بالضغط على i من لوحة المفاتيح.
اكتب الكود التالي لإنشاء ملف جديد:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } }
بعد الانتهاء من التحرير: اضغط على esc
لحفظ الملف اضغط على :wq!
الخطوة التالية هي التحقق إذا كان الكود يحتوي على أي أخطاء نحوية، قم بتنفيذ الأمر التالي:
puppet parser validate demontp.pp
تأكد من أنك قمت بالتبديل إلى جذر لتتمكن من إكمال الاختبار دون أي خطأ، وذلك بتنفيذ الأمر:
su root
اختبار هذه هي الخطوة التالية في عملية إنشاء الكود. قم بتنفيذ الأمر التالي لإجراء اختبار الدخان:
Puppet applies demontp.pp --noop
الخطوة الأخيرة هي يجري الدمية في الوضع الحقيقي والتحقق من الإخراج.
puppet apply demontp.pp
لم تقم الدمية بأي شيء لأن الفصل التجريبي كان عادلاً تعريف ولكن ليس معلن.
لذلك، حتى تعلن عن فئة الدمية، لن يتم تطبيق الكود.
دعونا أعلن الطبقة التجريبية داخل نفس الكود باستخدام تضمين اسم الفئة في نهاية الكود:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } } # Class Declaration include ntpconfig
ثانية التحقق إذا كان الكود يحتوي على أي أخطاء نحوية، قم بتنفيذ الأمر التالي:
puppet parser validate demontp.pp
تأكد من أنك قمت بالتبديل إلى جذر لتتمكن من إكمال الاختبار دون أي خطأ، وذلك بتنفيذ الأمر:
su root
الاختبار هذه هي الخطوة التالية في عملية إنشاء الكود. قم بتنفيذ الأمر التالي لإجراء اختبار الدخان:
Puppet apply demontp.pp --noop
الخطوة الأخيرة هي يجري الدمية في الوضع الحقيقي والتحقق من الإخراج.
puppet apply demontp.pp
هذه المرة يتم تطبيق الكود لأنه تم تعريف الفئة ثم الإعلان عنها.
تأكد من وجود ntp.conf الآن:
ls -lrt /etc/ntp.conf
تأكد من بدء تشغيل خدمة ntp عن طريق تشغيل الأمر التالي:
systemctl status ntpd