همیشه تقاضا برای راهاندازی سرویسها و نرمافزارهای جدید در یک سازمان وجود دارد. فرآیند راهاندازی ممکن است وظیفهای بسیار خستهکننده به نظر برسد، به خصوص در سازمان های بزرگ که چالش ها بیشتر است. برای حل این مشکل، یک ابزار مدیریت پیکربندی به نام Chef معرفی شد که مدیریت زیرساخت را ممکن می سازد اما شاید بپرسید «چف چیست؟» در انتهای این مقاله، شما به پاسخ این سوال خواهید رسید.
قبل از اینکه به تعریف چف پرداخته شود، لطفا به مثال زیر توجه نمایید تا درک بهتری از این ابزار پیدا کنید.
فرض کنید یک مدیر سیستم مسئول حفظ وضعیت تمام سیستمها در شبکه باشد. ممکن است سیستم های زیادی نیاز به مدیریت و نگهداری داشته باشند، به همین دلیل اگر یکی از آنها down شود، مشکلی نیست و آن یک سیستم قابل مدیریت است اما اگر چند مشکل در چندین سیستم به طور همزمان رخ دهد و تنها یک فرد برای بررسی وجود داشته باشد، حفظ و نگهداری همزمان تمامی سیستمها، به یک مشکل جدی و بزرگ تبدیل میشود.
اگر محیط سیستمهای مختلف با یکدیگر همگام (sync) بودند، حل مشکل بسیار آسان تر می شد. اتوماسیون نیز می تواند موجب تسهیل فرایند مربوطه گردد. Chef در این بخش وارد عمل میشود.

تصویر(1)
Chef چیست؟
Chef یک ابزار مدیریت پیکربندی متنباز است که از زبان Ruby برای توسعه اجزای ساختارهای اساسی مانند رسپیها (recipes) و cookbook ها استفاده میکند. چف یک ابزار اتوماسیون است که زیرساخت (infrastructure) را به کد تبدیل می نماید. تمرکز آن روی نوشتن کد به جای استفاده از فرایندهای دستی است. این ویژگی باعث میشود تا Chef بتواند به راحتی سیستمهای متعددی را مدیریت و پیکربندی نماید. با استفاده از چف، امکان تست کد و استقرار پیوسته وجود دارد.
چف از پلتفرمهای مختلفی همچون AWS، Google Cloud Platform، OpenStack و SoftLayer و... پشتیبانی میکند.

تصویر(2)
مدیریت پیکربندی در Chef
در این بخش به یک مثال دیگر جهت درک بهتر مدیریت پیکربندی (Configuration Management) پرداخته می شود. فرض کنید در شرکت خود به عنوان مدیر سیستم فعالیت میکنید و وظیفه دارید تا فردا نسبت به آپدیت نرم افزار بیشتر از 100 سیستم اقدام کنید. به نظر نمیرسد ایده خوبی باشد که این کار را به صورت دستی انجام دهید زیرا ممکن است باعث بروز خطا شود و در صورتی که هنگام آپدیت، سیستمی با مشکل مواجه شود، نمی توانید آن را به نسخه قبلی بازگردانید. در اینجا، ابزار مدیریت پیکربندی به عنوان یک عامل نجات وارد عمل میشود.
مدیریت پیکربندی یک تکنیک است که تمام اطلاعات مربوط به سختافزارها، نرمافزارها و زیرساختهای یک سازمان را ثبت می نماید. Configuration Management نقش مهمی در مدیریت زیرساختهای پیچیده ایفا میکند. ابزارهای مربوطه کمک میکنند تا وظایفی که خسته کننده و زمانبر هستند را به صورت خودکار انجام دهید. ابزارهای مدیریت پیکربندی، قابلیت استقرار خودکار (automated deployments) را در صورت وقوع حوادث ناخواسته، برای بازیابی سرویسهای یک سرور فراهم میکنند.
چرا از Chef استفاده میشود؟
همانطور که قبلاً نیز اشاره شد، چف برای خودکارسازی فرآیند آماده سازی زیرساخت استفاده میشود. چف به افزایش سرعت فرآیند راهاندازی و تحویل نرمافزار کمک میکند. چف به عنوان یک ابزار DevOps، در بهبود فرایند پیکربندی و مدیریت سرورهای شرکت نیز بسیار مفید است.
در ادامه چند ویژگی مهم از چف آورده شده است که به محبوبیت بالای آن کمک میکند:
- چف به راحتی میتواند تعداد زیادی سرور را با تعداد کارمند کمتر مدیریت کند.
- امکان استمرار فرآیند استقرار، از ساخت تا آزمایش را میسر می سازد.
- میتوان از سیستم عامل های مختلف مانند لینوکس، FreeBSD و ویندوز برای مدیریت چف استفاده کرد.
- میتوان آن را با چندین ارائهدهنده مهم خدمات ابری یکپارچه سازی کرد.
- یک سرور Chef میتواند به عنوان مرکزی برای انتشار تمام سیاستها (policy) استفاده شود.
- چف یک ابزار قابل اعتماد و پایدار برای پیادهسازیهای بزرگ است.
- همچنین به مدیریت ریسک در تمام مراحل استقرار کمک میکند.
حالا که میدانید چف چیست و چرا به این اندازه مهم است، در ادامه به معماری و اجزای Chef پرداخته می شود.
معماری و اجزای چف
معماری چف را میتوان به سه بخش تقسیم کرد:
1. Workstation
2. Chef Server
3. Nodes (گره ها)
در این قسمت به بررسی کامل هر سه مورد پرداخته می شود:

تصویر(3)
1. Workstation
به عبارت ساده تر، Workstation سیستم Admin (مدیر) است. این workstation امکان تعامل با Chef Server و همچنین گرههای چف را فراهم میکند. در این سیستم تمام cookbook ها ایجاد و آزمایش میشوند. فرآیند استقرار cookbook از طریق workstation صورت میگیرد.
همچنین میتوانید از workstation برای دانلود cookbook های ایجاد شده توسط سایر کاربران چف استفاده نمایید. در ادامه چندین مورد دیگر از اجزای مهم workstation آمده است که برای درک بهتر Chef نیاز به آشنایی با آنها دارید:
- Development Kit: کیت توسعه شامل تمام بستههای مورد نیاز برای استفاده از چف است.
- Chef-Repo: مخزن چف یک دایرکتوری از workstation است که در آن تمام cookbook ها وجود دارند و نگهداری میشوند. مخزن چف را میتوان با استفاده از دستور زیر ایجاد نمود:
chef to generate repo repo-name
- Knife: دستور knife به workstation امکان برقراری ارتباط محتوای دایرکتوری Chef-repo با Chef server را میدهد.
- Test Kitchen: یک محیط توسعه برای workstation فراهم میکند که امکان ایجاد و آزمایش cookbook را قبل از توزیع آنها میسر می سازد.
2. Chef Server
Chef Server مرکزی برای workstation و node ها است. تمام cookbook ها، recipe ها و متادیتا ها در اینجا ذخیره میشوند. workstation با استفاده از دستور knife اقدام به ارسال cookbook برای سرور میکند. Node ها نیز با استفاده از Chef client با سرور ارتباط برقرار میکنند. اگر تغییراتی در کد زیرساخت صورت گیرد، باید این تغییرات از طریق Chef Server روی گرهها اعمال شوند.
3. Node ها
Node ها به ماشینهایی اشاره دارند که توسط Chef Server مدیریت یا پیکربندی میشوند و ممکن است سرورهای مجازی، دستگاههای شبکه یا هر نوع دستگاه ذخیرهسازی دیگر باشند. جهت اجرای اقدامات لازم برای رسیدن node به وضعیت مطلوب تعیین شده در cookbook، برنامه Chef client نصب میشود. Chef Client امکان بروزرسانی گرهها را فراهم میکند و به صورت جداگانه روی هر گره اجرا میشود تا آنها را پیکربندی نماید.
نتیجه گیری
چف یک ابزار قدرتمند برای مدیریت پیکربندی سیستمها و اتوماسیون عملیات است. با استفاده از Chef، مدیران سیستم میتوانند فرآیندهای پیکربندی و مدیریت سیستمها را به صورت خودکار و مقیاسپذیر انجام دهند.