Ansible چیست؟ معرفی ویژگی‌ها و مقایسه با ابزارهای مشابه

انسیبل (Ansible) چیست
Avatar
نویسنده: دریا آزادخواه
سه‌شنبه 22 اردیبهشت 1405
مطالعه: ۱۲ دقیقه ۰ نظر ۲۶۵۷ بازدید

داشتن ابزارهای اتوماسیون سرور و مدیریت زیرساخت از نیازهای اساسی در حوزه DevOps است. یکی از این ابزارها انسیبل، یک پلتفرم منبع‌باز و قدرتمند متعلق به شرکت Red Hat است که برای مدیریت زیرساخت، خودکارسازی کانفیگ سرورها و استقرار برنامه‌ها استفاده می‌شود. مدیریت سرور با ابزار ansible به تیم‌های فناوری اطلاعات کمک می‌کند تا فرایندهای پیچیده را ساده‌سازی کنند. مدیریت زیرساخت و پیکربندی شبکه بدون ابزارهای اتوماسیون تقریبا غیرممکن است. در این مقاله از بخش آموزش شبکه در وبلاگ پارس‌پک، قصد داریم به طور جامع به بررسی این موضوع بپردازیم که انسیبل چیست و چگونه می‌تواند مدیریت سرورها و استقرار نرم‌افزارها را دگرگون کند.

انسیبل (Ansible) چیست؟

انسیبل (Ansible) یک موتور اتوماسیون IT متن‌باز است که انجام فرایندهای زیر را خودکار می‌کند:

  • مدیریت پیکربندی (Configuration Management)
  • استقرار نرم‌افزار (Application Deployment)
  • ارکستراسیون (Orchestration)

این ابزار از معماری بدون عامل (Agentless) بهره می‌برد، به این معنا که برای مدیریت سیستم‌ها نیازی به نصب هیچ نرم‌افزار اضافه‌ای روی گره‌های هدف (Managed Nodes) ندارد و ارتباط خود را از طریق پروتکل‌های استانداردی مانند SSH (برای لینوکس) یا WinRM (برای ویندوز) برقرار می‌کند.

Ansible چگونه کار می‌کند؟

انسیبل با رویکردی متفاوت نسبت به بسیاری از ابزارهای اتوماسیون سرور عمل می‌کند. این ابزار به صورت Agentless (بدون نیاز به عامل) طراحی شده است، به این معنی که نیازی به نصب هیچ نرم‌افزار یا عامل اضافی بر روی نودهای هدف ندارد. برای برقراری ارتباط با سرورها، انسیبل از پروتکل‌های امن و استاندارد شبکه استفاده می‌کند. پس از اتصال، اسکریپت‌های کوچکی را به نودها ارسال کرده، آن‌ها را اجرا می‌کند و پس از اتمام کار، این کدها را پاک می‌کند. این رویکرد باعث می‌شود پیکربندی سرور با ابزار ansible بسیار سبک و سریع باشد. تمام این فرایندها در فایل‌هایی خوانا ذخیره می‌شوند. برای درک بهتر نحوه ذخیره این دستورات می‌توانید مقاله Playbook چیست؟ را مطالعه کنید.

پایداری همیشگی با سرورهای پارس‌پک

سرورهای پیشرفته با زیرساخت‌های قوی در دیتاسنترهای ایران و اروپا با دسترسی کامل برای انجام تغییرات یا مدیریت منابع را از پارس‌پک تهیه کنید. برای مشاهده قیمت و پلن انواع سرورهای ابری، مجازی و اختصاصی روی لینک زیر کلیک کنید:

کاربرد انسیبل چیست؟

این ابزار در بخش‌های مختلفی از چرخه حیات نرم‌افزار کاربرد دارد. در ادامه به صورت خلاصه به مهم‌ترین کاربردهای آن اشاره می‌کنیم:

  • مدیریت پیکربندی: ایجاد یکپارچگی و اعمال تنظیمات یکسان روی سرورها با ابزار ansible به صورت خودکار.
  • استقرار برنامه: خودکار deployment برنامه‌ها از محیط توسعه تا تولید با کمترین دخالت انسانی.
  • هماهنگ‌سازی (IT Orchestration): مدیریت و هماهنگی تسک‌های پیچیده که نیازمند تعامل چندین سرویس هستند.
  • تامین زیرساخت: راه‌اندازی و آماده‌سازی زیرساخت‌های فناوری اطلاعات با رویکرد Infrastructure as Code.

ویژگی‌های Ansible

انسیبل دارای ویژگی‌های منحصربه‌فردی است که آن را از سایر ابزارها متمایز می‌کند. لیست زیر مهم‌ترین ویژگی‌های آن را نشان می‌دهد:

  • بدون عامل (Agentless): عدم نیاز به نصب کلاینت یا نرم‌افزار واسط روی سرورهای هدف.
  • سادگی در استفاده: طراحی مبتنی بر سینتکس خوانا و نزدیک به زبان انسان.
  • ماژولار بودن: استفاده از ansible ماژول‌های متنوع برای انجام عملیات مختلف.
  • امنیت بالا: تکیه بر پروتکل‌های استاندارد امنیتی برای اجرای دستورات.

معماری انسیبل

بررسی معماری انسیبل
معرفی معماری Ansible

معماری این سیستم بسیار سرراست و در عین حال قدرتمند است. در قلب این معماری، گره کنترلی قرار دارد که پیکربندی سرور با ابزار ansible از طریق آن مدیریت می‌شود. فایل‌های Inventory شامل لیستی از ماشین‌های هدف هستند که مشخص می‌کنند دستورات باید روی کدام سرورها اجرا شوند. ماژول‌ها اسکریپت‌هایی هستند که کارهای اجرایی را بر عهده دارند و پلاگین‌ها نیز برای گسترش قابلیت‌های هسته مرکزی ابزار به کار می‌روند.

مزایا و معایب انسیبل

آگاهی از نقاط قوت و ضعف این سیستم به مدیران سیستم در انتخاب ابزار مناسب کمک می‌کند. موارد زیر مزایا و معایب ansible را به صورت خلاصه بیان می‌کنند:

مزایا:

  • استقرار سریع
  • امنیت بالا
  • کاهش سربار روی سیستم‌های هدف
  • قابلیت یکپارچگی با سایر ابزارهای DevOps

معایب:

  • رابط کاربری گرافیکی محدود در نسخه پایه
  • نیاز به دسترسی‌های ریشه‌ای برای انجام برخی تنظیمات پیچیده

مقایسه Ansible با ابزارهای دیگر مدیریت شبکه

مقایسه انسیبل با ابزارهای دیگر مدیریت شبکه
تفاوت Ansible با ابزارهای مدیریت شبکه

همانطور که می‌دانید به جز Ansible ابزارهای دیگری هم برای اتوماسیون و مدیریت شبکه وجود دارند که در ادامه آن‌ها را با Ansible مقایسه می‌کنیم:

مقایسه Ansible و Puppet

Ansible و Puppet هر دو برای مدیریت پیکربندی و اتوماسیون استفاده می‌شوند، اما تفاوت آن‌ها ادر معماریشان است. Ansible به‌صورت Agentless عمل می‌کند و از طریق SSH به سرورها متصل می‌شود، در حالی که Puppet نیاز به نصب Agent روی هر نود دارد. این موضوع باعث می‌شود Ansible در راه‌اندازی سریع‌تر و ساده‌تر باشد، اما Puppet در محیط‌های بزرگ با نیاز به کنترل مداوم، عملکرد پایدارتری ارائه دهد.

از نظر زبان، Ansible از YAML استفاده می‌کند که خوانایی بالایی دارد، اما Puppet از DSL اختصاصی خود استفاده می‌کند که نیاز به یادگیری دارد. در نتیجه، Ansible برای تیم‌هایی که به سرعت بالا نیاز دارند مناسب‌تر است، در حالی که Puppet برای سازمان‌های بزرگ انتخاب بهتری محسوب می‌شود.

تفاوت Ansible با Chef

Chef از نظر معماری شبیه Puppet است و مبتنی بر Agent کار می‌کند، اما تفاوت اصلی آن در زبان و میزان انعطاف‌پذیری است. Chef از Ruby استفاده می‌کند که قدرت بالایی در نوشتن سناریوهای پیچیده دارد، اما در عوض یادگیری و نگهداریش سخت‌تر است. در مقابل، Ansible با استفاده از Playbookهای ساده YAML، امکان پیاده‌سازی سریع سناریوها را فراهم می‌کند. این یعنی اگر سرعت توسعه و سادگی مهم باشد، Ansible بهتر است؛ اما اگر نیاز به سفارشی‌سازی عمیق و منطق پیچیده داشته باشید، Chef ابزار قدرتمندتری خواهد بود.

Ansible در برابر Terraform

این دو ابزار در ظاهر مشابه‌اند، اما در عمل نقش متفاوتی دارند. Terraform برای ایجاد و مدیریت زیرساخت (مثل ساخت VM، شبکه و منابع ابری) استفاده می‌شود، در حالی که Ansible برای پیکربندی و مدیریت داخلی این زیرساخت کاربرد دارد. در بسیاری از پروژه‌های حرفه‌ای، این دو ابزار در کنار هم استفاده می‌شوند. به زبان ساده و خلاصه Terraform زیرساخت را ایجاد می‌کند و Ansible آن را پیکربندی می‌کند.

در نهایت، انتخاب بین این ابزارها به نیاز پروژه بستگی دارد. اگر هدف، راه‌اندازی سریع و مدیریت ساده باشد، Ansible گزینه مناسبی است. اگر زیرساخت بزرگ و نیازمند کنترل مداوم دارید، Puppet یا Chef انتخاب منطقی‌تری هستند. در محیط‌هایی که سرعت اجرا در مقیاس بالا اهمیت دارد، SaltStack عملکرد بهتری ارائه می‌دهد و برای ایجاد زیرساخت، Terraform ابزار اصلی محسوب می‌شود.

برای آشنایی بیشتر با Terraform و کاربردهای آن مطلب زیر را مطالعه کنید:

Terraform چیست؟

جدول مقایسه ابزارها

ابزار نوع معماری زبان / ساختار سطح پیچیدگی مقیاس‌پذیری کاربرد اصلی
Ansible بدون Agent YAML کم متوسط اتوماسیون و پیکربندی
Puppet مبتنی بر Agent DSL اختصاصی بالا بالا مدیریت پیکربندی مداوم
Chef مبتنی بر Agent Ruby بالا بالا پیکربندی پیشرفته و سفارشی
SaltStack Agent / Agentless YAML + Python متوسط تا بالا بسیار بالا اتوماسیون سریع در مقیاس بالا
Terraform بدون Agent HCL متوسط بالا ایجاد و مدیریت زیرساخت

در مقاله زیر به صورت جامع به بررسی ۱۰ مورد از بهترین ابزارهای مانیتورینگ شبکه پرداختیم، برای کسب اطلاعات بیشتر در این زمینه، روی لینک زیر کلیک کنید:

ابزارهای مانیتورینگ شبکه

چه کسانی از انسیبل استفاده می‌کنند؟

طیف وسیعی از متخصصان از این پلتفرم بهره می‌برند. مدیران سیستم‌ها برای خودکارسازی تسک‌های روزمره و مدیریت سرورها از آن استفاده می‌کنند. توسعه‌دهندگان نرم‌افزار برای تسریع فرایند استقرار به آن وابسته‌اند و سایر متخصصان شبکه نیز برای اعمال تغییرات هماهنگ روی تجهیزات از آن بهره می‌گیرند.

آموزش کانفیگ و نصب ansible

برای شروع کار با این ابزار قدرتمند، شما به یک سرور لینوکسی (ترجیحاً توزیع‌های مبتنی بر دبیان مانند Ubuntu 22.04 یا نسخه‌های جدیدتر) نیاز دارید. دسترسی به کاربر non-root با امتیازات sudo و همچنین پیکربندی صحیح ارتباط SSH برای برقراری اتصال میان گره کنترلی و گره‌های مدیریت‌شونده، از الزامات اولیه این مسیر است.

انسیبل به دلیل سادگی در پیاده‌سازی و حذف نیاز به نصب کلاینت‌های پیچیده، انتخاب اول بسیاری از مهندسان دواپس محسوب می‌شود. در ادامه مراحل آموزش کانفیگ و نصب ansible را آموزش می‌دهیم:

۱. نصب Ansible

نصب انسیبل معمولاً بر روی یک سرور مرکزی که نقش «گره کنترلی» (Control Node) را ایفا می‌کند، انجام می‌شود. اگرچه نسخه‌های موجود در مخازن پیش‌فرض توزیع‌ها کارآمد هستند، اما برای دسترسی به آخرین ویژگی‌ها و اصلاحات امنیتی، بهترین روش استفاده از مخازن رسمی PPA (Personal Package Archive) است. برای اضافه کردن مخزن رسمی انسیبل به سیستم خود، از دستور زیر استفاده کنید:

sudo apt-add-repository ppa:ansible/ansible

 

پس از اجرای این دستور و تایید آن با فشردن دکمه Enter، مخازن سیستم شما باید به‌روزرسانی شوند تا بسته‌های جدید شناسایی گردند. سپس می‌توانید با استفاده از پکیج منیجر apt، عملیات نصب را نهایی کنید:

sudo apt update
sudo apt install ansible

یکی از نقاط قوت اصلی این ابزار، تکیه بر پروتکل SSH برای تعامل با گره‌های شبکه است. با وجود اینکه امکان استفاده از احراز هویت مبتنی بر رمز عبور فراهم است، اما توصیه اکید امنیتی و فنی، استفاده از کلیدهای SSH (SSH Keys) است تا فرایند اتوماسیون بدون وقفه و با امنیت حداکثری انجام شود. با اتمام این مرحله، زیرساخت نرم‌افزاری لازم برای مدیریت سرورها در اختیار شماست.

۲. پیکربندی میزبان‌های Ansible

پس از نصب، گام بعدی تعریف سرورهایی است که قصد مدیریت آن‌ها را دارید. انسیبل اطلاعات این سرورها را در فایلی به نام Inventory (فایل hosts) نگهداری می‌کند. این فایل به صورت پیش‌فرض در مسیر /etc/ansible/hosts قرار دارد و باید با دسترسی ریشه ویرایش شود:

sudo nano /etc/ansible/hosts

درون این فایل به طور معمول کدهای نمونه و توضیحات زیادی وجود دارد. برای داشتن یک فایل مرتب و کاربردی، می‌توانید تمام خطوط موجود را با قرار دادن علامت # در ابتدای آن‌ها به حالت کامنت درآورید. ساختار فایل Inventory بسیار منعطف است و به شما اجازه می‌دهد سرورها را گروه‌بندی کنید. در نسخه‌های جدید، استفاده از متغیر ansible_host به جای نسخه قدیمی آن توصیه می‌شود.

در ادامه لیستی از متغیرهای کلیدی برای تعریف سرورها در فایل Inventory آورده شده است:

  • [group_name]: نامی که برای دسته‌بندی مجموعه‌ای از سرورها (مثلاً سرورهای وب یا دیتابیس) انتخاب می‌کنید.
  • Alias: نام مستعاری که برای شناسایی راحت‌تر یک سرور خاص در دستورات به کار می‌رود.
  • ansible_host: آدرس IP دقیق یا FQDN سرور هدف برای برقراری اتصال.
    فرض کنید سه سرور با آی‌پی‌های ۱۹۲.۰.۲.۱ تا ۱۹۲.۰.۲.۳ دارید که می‌خواهید آن‌ها را در گروهی به نام [servers] قرار دهید. برای این کار، قطعه کد زیر را به فایل اضافه کنید:
[servers]
host1 ansible_host=192.0.2.1
host2 ansible_host=192.0.2.2
host3 ansible_host=192.0.2.3

باید توجه داشت که انسیبل به صورت پیش‌فرض تلاش می‌کند با نام کاربری فعلی شما در گره کنترلی، به سرورهای هدف متصل شود. اگر کلیدهای SSH شما برای کاربر root تنظیم شده اما شما با کاربر دیگری در حال کار هستید، اتصال با خطا مواجه می‌شود. برای حل دائمی این موضوع، از ساختار group_vars استفاده می‌کنیم. ابتدا یک دایرکتوری برای نگهداری متغیرهای گروه ایجاد کرده و سپس فایلی با نام گروه خود (در اینجا servers) با فرمت YAML در آن می‌سازیم:

sudo mkdir /etc/ansible/group_vars
sudo nano /etc/ansible/group_vars/servers

درون این فایل، متغیر کاربر اتصال را به صورت زیر تعریف می‌کنیم (دقت کنید که فایل‌های YAML باید با سه خط تیره شروع شوند):

ansible_user: root

این پیکربندی باعث می‌شود انسیبل بداند برای تمام اعضای گروه servers، باید همیشه از کاربر root برای اتصال SSH استفاده کند.

۳. دستورات ساده Ansible

حالا که نصب و پیکربندی میزبان‌ها به اتمام رسیده، زمان آن است که صحت ارتباطات را بررسی کنیم. ساده‌ترین راه برای این کار، استفاده از دستورات Ad-hoc است که به شما اجازه می‌دهد یک تسک واحد را بدون نیاز به نوشتن پلی‌بوک‌های پیچیده اجرا کنید. برای تست پینگ و اطمینان از در دسترس بودن تمام سرورهای تعریف شده در Inventory، دستور زیر را وارد کنید:

ansible -m ping all

در خروجی این دستور، اگر تنظیمات کلید SSH و فایل hosts صحیح باشد، برای هر سرور عبارت SUCCESS را به همراه پاسخ pong مشاهده خواهید کرد. شما می‌توانید این دستور را محدود به یک گروه خاص (مثلاً servers) یا حتی یک هاست واحد (مثلاً host1) کنید.

در ادامه، توضیح مختصری درباره دو ماژول پرکاربرد در دستورات اولیه آورده شده است:

  • ماژول ping: این ماژول برخلاف پینگ معمولی ICMP، توانایی انسیبل برای اتصال به سرور، اجرای کد پایتون و دریافت پاسخ را تست می‌کند.
  • ماژول shell: این ماژول قدرتمند به شما اجازه می‌دهد هر دستور استانداردی را در محیط شل سرورهای هدف اجرا کرده و خروجی را مستقیماً در ترمینال خود ببینید.
    به عنوان مثال، اگر بخواهید وضعیت حافظه رم را در سرور host1 بررسی کنید، می‌توانید از ماژول shell با آرگومان -a استفاده کنید:
ansible -m shell -a 'free -m' host1

خروجی این دستور دقیقاً همان چیزی خواهد بود که اگر به صورت دستی به آن سرور SSH می‌کردید و دستور free -m را می‌زدید، مشاهده می‌کردید؛ با این تفاوت که انسیبل این کار را برای شما مدیریت و مدیریت‌پذیر کرده است.

جمع‌بندی

در این مقاله به بررسی کامل انسیبل پرداختیم و دیدیم که چگونه می‌تواند با حذف فرایندهای تکراری، مدیریت زیرساخت را بهینه‌سازی کند. با بهره‌گیری از معماری ساده و یادگیری آسان، این ابزار به یکی از اصلی‌ترین ارکان خودکارسازی تبدیل شده است.

سوالات متداول

آیا یادگیری Ansible برای افراد مبتدی سخت است؟

خیر، به دلیل استفاده از یک زبان ساده برای نوشتن دستورات، یادگیری آن در مقایسه با سایر ابزارها بسیار سریع‌تر و آسان‌تر است.

تفاوت اصلی Ansible با ابزارهای مشابه در چیست؟

مهم‌ترین تفاوت این است که نیازی به نصب هیچ‌گونه نرم‌افزار جانبی روی ماشین‌های هدف ندارد.

آیا می‌توان از این ابزار برای مدیریت سرورهای ویندوزی استفاده کرد؟

بله، این پلتفرم قابلیت‌های خاصی از جمله برقراری ارتباط با سیستم‌عامل‌های مختلف از جمله ویندوز را جهت انجام خودکارسازی را دارد.