انجام دستی کارهای تکراری برای توسعه دهندگان و مدیران سیستم (System Admin) یکی از چالش برانگیزترین و البته کسلکنندهترین کارهای دنیاست. به همین دلیل است که نیاز به ابزاری که بتواند این کارها را بهصورت خودکار انجام دهد، بسیار ضروری بوده و متخصصین حوزه زیرساخت و سرور از چنین ابزاری استقبال میکنند.
انسیبل یک ابزار متنباز و رایگان است که توسط شرکت RedHat ساخته شده است. هدف اصلی این ابزار، ارائه رویکردی ساده و البته قابل اعتماد برای خودکارسازی کارهایی مانند استقرار اپلیکیشن، بهروزرسانی زیرساختها، مدیریت پیکربندیها، تهیه کردن یا Provisioning کلاود و… است.
از آنجایی که Ansible به ابزار یا نرمافزار خاصی وابسته نیست میتواند در کنار هر مجموعهای مورد استفاده قرار بگیرد و به سادگی پیکربندی شود.
همچنین انسیبل براساس معماری IaC یا Infrastructure as Code کار میکند. در این حالت شما برای مدیریت و تهیه زیرساختهای مورد نظر به جای طی کردن فرایندها به صورت دستی، میتوانید تمام کارها را از طریق اسکریپتها و کدهایی که مینویسید انجام دهید. بنابراین برای کار کردن با انسیبل باید نیازمندیهایتان را به شکل اسکریپت بنویسید.
در این مطلب از وبلاگ همروش قصد داریم شما را با ساختار کاری انسیبل، معماری، ویژگیها و کاربردهای آن آشنا کنیم.
مزیتهای استفاده از Ansible
رایگان بودن
انسیبل یک ابزار متن باز و رایگان است.
کاربری ساده
برای استفاده از ویژگیهای اصلی Ansible نیازی به دانش برنامهنویسی ندارید و با خواندن مستندات، به راحتی میتوانید همه نیازمندیهایتان را پیش ببرید.
قدرتمند
بیشتر شرکتهای نرمافزاری دنیا در حوزه زیرساخت و IT از Ansible استفاده میکنند که نشان از توانمند بودن آن در سناریوهای مختلف است.
منعطف
قابلیت بالا در سفارشیسازی باعث شده تا انسیبل به عنوان یک ابزار منعطف شناخته شود و بتواند در محیطهای توسعه و دیپلوی مختلفی استفاده شود.
بدون وابستگی
برای انجام کارها روی سیستم کلاینت، نیازی به نصب نرمافزار خاصی ندارید و به همین دلیل فرایند خودکارسازی را میتوانید به سادگی پیش ببرید.
بهینه
از آنجایی که انسیبل به تنهایی همه کارها را انجام میدهد و نیازی به نصب ابزارهای جانبی ندارید، میزان مصرف منابع کمی داشته و به راحتی روی سرورهای اقتصادی نصب میشود.
فرایند کاری Ansible به چه صورت است؟
برای اینکه شیوه کاری Ansible را یاد بگیریم، ابتدا نیاز است با اکوسیستم و تکنولوژیهای حاضر در آن آشنا شویم و سپس شیوه تعامل برقرار کردن انسیبل با این موارد را یاد بگیریم.
در اکوسیستم Ansible به صورت کلی دو نوع کامپیوتر وجود دارد: Control Node و Managed Node:
- Control Node: نود کنترل یا Control Node به کامپیوتری گفته میشود که انسیبل روی آن اجرا میشود. در اکوسیستم انسیبل حداقل یک Control Node باید وجود داشته باشد.
- Managed Node: نودهای مدیریت شده یا Managed Node عبارت از هر دستگاهی است که توسط نود کنترل مدیریت میشود.
انسیبل در شروع فرایند کاری خود ابتدا به یک نود متصل میشود. این نود میتواند یک کلاینت، سرور یا هر چیز دیگری باشد که روی شبکه قرار دارد. بعد از متصل شدن، Ansible یک برنامه کوچک (Ansible Module) را از طریق SSH به نود مربوطه ارسال میکند و تا زمان اجرا کامل، برنامه را نزد نود مربوطه نگه میدارد.
البته این نکته را در نظر بگیرید که برای انجام این فرایند، Control Node باید مجوز ورود (Login Access) به هر کدام از Managed Nodeهای مورد نظر را داشته باشد.
SSH Keys مرسومترین روش برای دسترسی به این مجوز و انجام فرایند ورود است، اما میتوان از روشهای دیگری نیز استفاده کرد.
منظور از Ansible Module چیست؟
ممکن است با شنیدن اسم Ansible Module فکر کنید که با موضوع پیچیدهای سروکار دارید، اما در اشتباه هستید. بیشتر کارهایی که مربوط به این موضوع است توسط خود Ansible پیش میرود و کاربر در آنها نقشی ندارد.
ماژول انسیبل ابزاری است که از طریق آن میتوانید وضعیت مورد نظر را پیادهسازی کنید. برای اینکار نیز باید با دستورات و ساختار این فایل آشنا شوید تا بتوانید به صورت بهینه از آن استفاده کنید.
هر ماژول در ساختار انسیبل برای یک Managed Node نوشته خواهد شد و وضعیت اجرایی آن را تحت کنترل خواهد گرفت.
برای مثال اگر یک مدیر سیستم تصمیم بگیرد که روی تمام کامپیوترهای شرکت نرم افزار MySQL 8.0 را نصب کند، میتواند با تعریف یک ماژول انسیبل به صورت خودکار این کار را روی تمام Nodeها (کامپیوترها) انجام دهد. بنابراین دیگر نیازی به نصب این نرمافزار به صورت دستی روی تک تک کامپیوترها نیست.
البته این تنها یک کار ساده بوده و مدیران سیستم با فرایندهای بسیار پیچیدهتری نیز روبرو خواهند شد.
ماژولهای آماده بسیار زیادی در ریپازیتوری Ansible وجود دارد که میتوانید از آنها استفاده کنید و براساس نیازمندیهایتان تغییراتی روی آنها اعمال کنید. همچنین اگر دانش برنامهنویسی داشته باشید، میتوانید ماژولهای خودتان را ایجاد کنید و آنها را با دیگران نیز به اشتراک بگذارید.
معماری Ansible
حال که با کلیت ساختار Ansible آشنا شدیم، نیاز است که به صورت جزئیتر بخشهای مختلف معماری انسیبل را بررسی کنیم.
۱. ماژول
در ارتباط با ماژولها در بالا توضیحاتی را ارائه دادیم و بنابراین نیازی به توضیح بیشتر راجع به این قسمت از انسیبل نیست. اما همانطور که در تصویر بالا مشاهده میکنید، Modules بخشی اساسی در اکوسیستم انسیبل بوده و بدون آن، فرایندها به درستی پیش نخواهند رفت.
۲. پلاگین
درست مانند هر پلتفرم و ابزار دیگری، پلاگین در اینجا نقش توسعه و گسترده کردن امکانات را برعهده دارد. در معماری Ansible نیز پلاگینهایی وجود دارد که کارکرد کلی را توسعه داده و امکانات جدیدی را در اختیار کاربران قرار میدهند. Action، Cache و Callback سه مورد از پلاگینهای اصلی Ansible هستند.
۳. موجودی یا Inventory
تمام کامپیوترها و دستگاههایی که در فرایند کاری انسیبل از آنها استفاده میکنید (Nodeها)، به عنوان موجودی یا Inventory شناخته میشوند. تک تک این موارد به همراه اطلاعاتی مانند آیپی آدرس، دیتابیسها، سرورها و… داخل یک فایل نگهداری شده و انسیبل از طریق این فایل به آنها اشاره میکند.
۴. Playbooks
انسیبل پلیبوک (Ansible Playbook) مانند یک دفترچه راهنما برای انجام کارهاست. هر کدام از این موارد در واقع یک فایل ساده با فرمت YAML هستند که شیوه اجرا شدن Taskها را تعریف میکنند.
یکی از دلایل محبوبیت بالای Ansible وجود چنین سازوکاری برای انجام کارهاست، چرا که به روند اجرایی کارها سرعت میبخشد و هسته اصلی فرایند Automation یا خودکارسازی را تشکیل میدهد.
پلیبوک دستورات لازم را روی تمام نودهایی که درون فایل Inventory وجود دارند، اجرا میکند.
۵. API
در اکوسیستم انسیبل APIهای مختلفی وجود دارد که میتوانند انواع مختلفی از راههای ارتباطی را ایجاد کنند. SSH اصلیترین روش انتقال داده است اما APIهای مختلفی نیز وجود دارند که میتوانند این کار را انجام دهند. برای مثال CallBackها.
۶. CMDB
CMDB دیتابیسی است که مانند یک Data Repository عمل میکند. با استفاده از این سرویس، کاربران میتوانند اطلاعات جمعآوری شده در ساختار Ansible را در قالب یک فایل HTML بهصورت خلاصه مشاهده کنند. البته جدای از HTML فرمتهای دیگری مانند CSV و SQL نیز در دسترس است. نمونهای از خروجی این سرویس را در زیر میتوانید مشاهده کنید:
ویژگیهای Ansible
انسیبل به عنوان برترین ابزار خودکارسازی دارای ویژگیهای منحصر به فردی است که برای آشنا شدن با آنها در ادامه اصلیترین ویژگیها را مطرح خواهیم کرد.
۱. پیکربندی ساده
Ansible به گونهای طراحی شده است که فرایند پیکربندی ساده و یکپارچهای داشته باشد. اگر در حال حاضر در یکی از شاخههای IT فعالیت میکنید، راهاندازی چنین سیستمی بسیار ساده بوده و میتوانید در مدت زمانی کوتاهی، انسیبل را براساس نیازهایتان پیادهسازی و پیکربندی کنید.
همانطور که در مثالهای ذکر شده گفتیم، شما به سادگی میتوانید با استفاده از ساختار Ansible Module، یک نسخه خاص از هر نرمافزاری را روی تعداد زیادی از کامپیوترها به صورت خودکار نصب کنید و نگران انجام آن به صورت دستی نباشید.
از این جهات، پیکربندی و شروع کار با انسیبل بسیار راحت است.
۲. استقرار اپلیکیشن
یکی از ویژگیهای بسیار کاربردی Ansible تسهیل فرایند استقرار اپلیکیشنهاست. این موضوع برای متخصصین DevOps یک خبر خوب است چرا که میتوانند تمام تسکهای لازم برای دیپلوی یک پروژه را از طریق انسیبل به صورت خودکار پیش ببرند.
شما برای انجام این کار نیاز دارید تا لیستی از کارهایی که باید انجام شود را از طریق Playbook نوشته و اجازه دهید Ansible بقیه کارها را برایتان انجام دهد.
۳. ارکستریشن
زمانی که به عبارت «ارکستریشن || Orchestration» اشاره میکنیم اولین تکنولوژی که برای پیادهسازی آن به ذهنمان خطور میکند، کوبرنتیز است. اما در کنار کوبرنتیز، انسیبل نیز میتواند به این فرایند کمک کند. از آنجایی که Ansible یک ابزار برای خودکارسازی کارهاست، شما میتوانید با تعریف یکسری تسک مشخص، در مدیریت، هماهنگی و اجرای سرویسها از این تکنولوژی نیز استفاده کنید. برای مطالعه بیشتر این موضوع میتوانید مقاله «Orchestration, You Keep Using That Word» را مطالعه کنید.
۴. امنیت
انجام تمام امورات امنیتی لازم بسیار وقتگیر بوده و گاهی ممکن است مواردی را از قلم بیاندازیم. از طریق انسیبل میتوانیم عملیاتهای امنیتی را که به صورت مداوم انجام میدهیم، خودکارسازی کرده و آنها را به شکل یک فرایند اتوماتیک انجام دهیم.
۵. تهیه سرویس
از اصلیترین کاربردهای Ansible در Provision یا تهیه یا تامین کردن زیرساخت است. شما میتوانید به صورت خودکار سرور یا منابع ابری مورد نیاز را تهیه کنید و اجازه ندهید که اپلیکیشنتان براثر نبود منابع کافی از کار بیافتد.
جمعبندی
پیادهسازی یک سیستم برای انجام کارها به صورت خودکار عمدتا چالش برانگیز بوده و برخی از مجموعهها در توسعه آن به مشکل بر میخورند. Ansible کلیدیترین تکنولوژی برای حل این چالش است.
Ansible یک ابزار قدرتمند برای پیادهسازی اتوماسیون بوده و براساس کاری که انجام میدهد یکی از ضروریترین تکنولوژیهایی است که در شرکتهای IT و ارائهدهنده زیرساخت باید مورد استفاده قرار بگیرد.
در این مطلب از وبلاگ همروش با چیستی و کاربردهای Ansible آشنا شدیم و همچنین مزایا و معماری آن را معرفی کردیم.