تصور کنید مدیر سیستمی با چندین سرور کار میکند. وقتی یکی از سرورها با مشکل مواجه میشود، مدیر سیستم میتواند به راحتی آن را رفع کند اما وقتی که چندین سرور به صورت همزمان از دسترس خارج میشوند، شرایط پیچیده می گردد. در این شرایط Puppet میتواند بسیار مفید باشد.
با استفاده از Puppet، میتوانید کد سادهای بنویسید و آن را در سرورهایی که مشکل دارند، مستقر نمایید. پس از اجرای کد، تمام سرورها در عرض چند ثانیه به وضعیت فعال قبلی خود برگردانده میشوند یا در وضعیت دلخواه جدید قرار می گیرند. همچنین پاپت میتواند برای پیادهسازی نرمافزار و افزودن امنیت نیز استفاده شود. تمام این موارد از طریق کدهای ساده قابل انجام است.
تصویر(1)
این مقاله موضوعات زیر در خصوص Puppet را پوشش میدهد:
- Puppet چیست؟
- اجزای Puppet
- Puppet چگونه کار میکند؟
- شرکتهایی که از Puppet استفاده می کنند.
- نوشتن Manifest در Puppet
Puppet چیست؟
Puppet یک ابزار مدیریت پیکربندی است که اطمینان حاصل می کند تمام سیستمها به صورت مطلوب و مطابق انتظار کانفیگ شده باشند.
همچنین میتوانید از پاپت به عنوان یک ابزار استقرار استفاده نمایید زیرا قادر است نرمافزار را به صورت خودکار در سیستم مستقر کند. با استفاده از Puppet، امکان پیاده سازی زیرساخت به صورت کد وجود دارد که میتوانید توسط آن محیط را تست نموده و اطمینان حاصل کنید پیادهسازی به درستی انجام شده باشد. به واسطه پاپت، فرآیند استقرار نرمافزار بهبود یافته و از خطاهای انسانی کاسته میشود.
در ادامه به اجزای مختلف Puppet پرداخته می شود.
اجزای Puppet
تصویر(2)
محیط پاپت میتواند به دو بخش اصلی محیط سرور (که در تصویر بالا نشان داده شده است) و کلاینت تقسیم گردد. در محیط سرور اصلی، یک مخزن Puppet Master وجود دارد که تمام فایلهای پیکربندی در آن ذخیره می شوند.
- Manifest، کد پیکربندی کلاینتها می باشد.
- Template، کد و دادهها را ترکیب کرده و سند نهایی را تولید میکند.
- File، محتوای استاتیکی هستند که میتوانند توسط کلاینتها دانلود شوند.
- Module، مجموعهای از Manifest ،template و File ها می باشد.
- Certificate authority به اختصار CA (مرجع صدور گواهی دیجیتال)، این امکان را برای master فراهم می کند تا گواهیهای ارسالی توسط کلاینت را امضا نماید.
Puppet client، دستگاهی است که نیاز به پیکربندی دارد و شامل Agent و Factor می باشد. Agent به صورت مداوم با سرور master تعامل میکند تا اطمینان حاصل نماید که گواهیها به طرز مناسب بروزرسانی میشوند. Factor وضعیت فعلی کلاینت را جمعآوری کرده و از طریق Agent آن را به سرور ارسال میکند.
هم اکنون که در خصوص اجزا پاپت اطلاعات کسب کردید، در ادامه به نحوه کار Puppet پرداخته می شود.
Puppet چگونه کار میکند؟
تصویر(3)
Puppet دارای معماری node اصلی-فرعی است. کلاینت ها در سراسر شبکه پخش شدهاند و با محیط اصلی-فرعی که ماژولهای پاپت در آن وجود دارند، ارتباط برقرار میکنند. Agent در سمت کلاینت، یک گواهینامه با شناسه خود را به سرور ارسال میکند. سپس سرور آن گواهینامه را امضا کرده و به کلاینت بازمیگرداند. این احراز هویت امکان ارتباط امن بین کلاینت و master را فراهم میکند.
factor وضعیت کلاینت ها را جمعآوری کرده و آنها را به master ارسال می نماید. براساس این اطلاعات، master نسبت به کامپایل و ترجمه manifest ها به کاتالوگ اقدام نموده و آنها را برای کلاینت ها می فرستد. سپس agent هر کلاینت، manifest ها را در دستگاه خود اجرا میکند و یک گزارش توسط کلاینت تولید میشود که تغییرات انجام شده را تشریح کرده و آن را به master ارسال می نماید.
این فرآیند در فواصل زمانی منظم تکرار می شود تا اطمینان حاصل گردد که سیستم تمام کلاینت ها بروز باشد.
شرکتهایی که از Puppet استفاده می کنند
در ادامه با برخی از شرکت هایی که از پاپت برای مدیریت زیرساخت خود استفاده می کنند آشنا خواهید شد. احتمالا با آگاهی از این شرکت ها، میزان علاقه شما نسبت به درک Puppet افزایش خواهد یافت.
برخی از این شرکتها عبارتند از:
- Spotify
- AT&T
- Staples
- AON
- The U.S. Air Force
این شرکتها به دلایل مختلف پاپت را به کار می گیرند. به عنوان مثال، Staples از Puppet به عنوان ابزار مدیریت پیکربندی جهت خودکارسازی مدیریت ابر خصوصی و عملیات IT استفاده می کند. این مورد موجب یکپارچگی شده و باعث می شود تیمهای IT زمان بیشتری را برای نوآوری داشته باشند.
نوشتن Manifest در Puppet
Manifest به فایلهای استفاده شده برای پیکربندی یک node (گره) گفته می شود. این manifest ها به کاتالوگ کامپایل و ترجمه خواهند شد و در کلاینت اجرا می گردند. Manifest به زبان Ruby نوشته شده و دارای پسوند .pp می باشد.
پنج مرحله کلیدی برای نوشتن یک manifest به شرح ذیل است:
- ایجاد - Manifest توسط مدیر سیستم نوشته میشود.
- کامپایل - Manifest به کاتالوگ کامپایل میشود.
- استقرار - کاتالوگ روی سیستم کلاینت مستقر میشود.
- اجرا - کاتالوگ توسط agent در کلاینت اجرا میشود.
- پایان - کلاینت به حالت موردنظر پیکربندی می گردد.
تمامی manifest ها باید نحوه نگارش مشترکی داشته باشند:
Resourcetype { ‘title’ :
Attribute_name1 => attribute_value
Attribute_name2 => attribute_value
}
در اینجا، نوع منبع میتواند یک پکیج، فایل یا سرویس باشد.
- 'title' (عنوان) به نام نوع منبع اشاره دارد.
- Attribute_name1 نام ویژگی است که مقدار آن باید تغییر یافته یا تنظیم شود (به عنوان مثال: IP، ensure).
- Attribute_value مقدار جدیدی برای ویژگی مربوطه است (به عنوان مثال: present، start).
یک manifest میتواند شامل چند نوع منبع باشد. کلمه کلیدی "default"، منیفست را روی تمام کلاینت ها اعمال میکند. به عنوان مثال:
Node default {
file { ‘/etc/sample’ :
Content => “this is a sample manifest”
}
service { ‘httpd’ :
ensure => installed
}
}
منبع اول ما مسیر یک فایل '/etc/sample' است.
محتوای مشخص شده، در فایل نوشته میشود. اگر فایل وجود نداشته باشد، ابتدا فایل ایجاد می گردد. منبع بعدی، سرویس Apache است که باید در node کلاینت نصب شود. manifest روی دستگاه کلاینت مستقر می گردد. هم اکنون کلاینت فایلی به نام 'sample' در پوشه 'etc' دارد و سرویس Apache نیز نصب خواهد شد.
نتیجه گیری
Puppet یک ابزار مدیریت پیکربندی است که به شرکتها کمک میکند فرایند مدیریت و پیکربندی سیستمها را سادهتر و بهینهتر انجام دهند. با استفاده از پاپت میتوان فایلها، پکیج ها و سرویسهای مورد نیاز را به صورت اتوماتیک پیکربندی کرده و تغییرات را به سرعت و همگام اعمال نمود. این ابزار باعث بهبود عملکرد، امنیت سیستمها و کاهش هزینه میشود.