ansible چیست؟ انسیبل یک ابزار متنباز و قدرتمند برای مدیریت و پیکربندی خودکار زیرساختهای فناوری اطلاعات است که به توسعهدهندگان و تیمهای عملیات کمک میکند وظایف پیچیده را بهصورت ساده و بدون نیاز به کدنویسی گسترده اجرا کنند. ansible را میتوان راهکاری دانست که با استفاده از پروتکل SSH و بدون نیاز به نصب عامل (Agent) روی سیستمهای مقصد، امکان مدیریت هزاران سرور را فراهم میسازد.
در مسیر آموزشansible، یاد میگیرید چگونه فرایندهایی مانند استقرار نرمافزار، بهروزرسانی سیستمها و هماهنگی بین سرویسها را بهصورت خودکار انجام دهید. سادگی در نصب، انعطافپذیری بالا و قابلیت یکپارچهسازی با ابزارهایی مانند Docker و سیستمهای دواپس، انسیبل را به انتخابی محبوب برای شرکتها و سازمانها تبدیل کرده است. در ادامه با ما همراه باشید تا بدانیم که Ansible چیست؟ و همه نکات مهم مربوط به این ابزار را بررسی کنیم.
Ansible چیست؟
انسیبل یک ابزار متنباز و رایگان برای خودکارسازی مدیریت پیکربندی و استقرار نرمافزار است که با زبان Python نوشته میشود و از طریق پروتکل SSH ارتباط برقرار میکند. در آموزش ansible باید بدانید که این ابزار نیازی به نصب عامل (Agent) روی گرههای هدف ندارد. این ویژگی، انسیبل را برای فرآیندهای دواپس و پروژههایی مانند خرید VPS یا اجرای کانتینرها بسیار سبک و کارآمد میسازد.
از آنجا که ansible یک راهکار ساده، امن و مقیاسپذیر برای تیمهای فناوری اطلاعات محسوب میشود، ادامه این مقاله برای آشنایی عمیقتر با نصب Ansible، معماری آن و نحوه کار عملی بسیار کاربردی خواهد بود.
انسیبل چگونه کار می کند؟
همانطور که KodeKloud توضیح داده، انسیبل ابزاری متنباز در حوزه خودکارسازی IT است که با استفاده از یک سینتکس ساده مبتنی بر YAML، مجموعهای از دستورها و وظایف را به سیستمهای مقصد ارسال میکند. این فرآیند شامل پیکربندی، استقرار نرمافزار و هماهنگی سرویسها بهصورت خودکار است. ارتباط انسیبل با میزبانها از طریق پروتکل SSH انجام میشود، بنابراین نیازی به نصب عامل (Agent) روی سرورهای مقصد نیست.
این ویژگی که به آن Agentless گفته میشود، نصب Ansible و راهاندازی آن را نسبت به ابزارهای مشابه سریعتر میکند. تمام وظایف در قالب Playbook تعریف میشوند. این فایلهای متنی مجموعهای از Taskها، ماژولها و متغیرها را شامل میشوند. هدف این است که سیستمها در وضعیت مطلوب یا Desired State باقی بمانند، بدون تغییرات غیرضروری، تا عملیات در مقیاس وسیع با کمترین خطا انجام شود.
معماری Ansible
Red Hat معماری ansible چیست را شامل بخشهای اصلی زیر معرفی میکند:
Control Node: دستگاهی که انسیبل بر روی آن اجرا میشود و نقش مرکز صدور فرمانها و مدیریت کلیه عملیات را بر عهده دارد
Managed Nodes: سرورهایی که از طریق SSH مدیریت میشوند و نیاز به نصب عامل روی آنها نیست.
Inventory: فایلی که لیست سرورها و گروهبندی آنها را ذخیره میکند، معمولاً در قالب YAML یا INI.
Modules, Playbooks و Plugins: ماژولها وظایف خاص را اجرا میکنند، Playbookها شامل مجموعهای از Taskها هستند و پلاگینها قابلیتهای اضافی را فراهم میکنند.
Idempotent: قابلیت اجرای مکرر یک Playbook بدون ایجاد تغییرات غیرضروری.
کاربرد انسیبل چیست؟
انسیبل ابزاری همهکاره برای خودکارسازی است که از مدیریت پیکربندی تا استقرار نرمافزار را پوشش میدهد. این ابزار در آموزش ansible بهعنوان یک راهکار قدرتمند برای هماهنگی هزاران سرور معرفی میشود. مدیریت پیکربندی باعث میشود تمام سیستمها در وضعیت مشخص باقی بمانند.
استقرار نرمافزار، چه یک وبسرور ساده و چه خوشههای پیچیده، با دقت و سرعت انجام میشود. انسیبل توانایی ادغام با ابزارهای CI/CD و فناوریهای کانتینرسازی را دارد و برای شرکتها یا سازمانهایی که از زیرساختهای ابری یا خرید VPS استفاده میکنند، راهکاری کارآمد جهت کاهش خطاها و افزایش بهرهوری به شمار میآید.
برای آشنایی بیشتر با کانتینرسازی میتوانید به موضوع داکر چیست مراجعه کنید.
ویژگیهای Ansible
مهمترین ویژگیهای ansible چیست شامل موارد زیر است:
- Agentless بودن و استفاده از پروتکل SSH
- سادگی یادگیری و استفاده حتی برای مبتدیان
- قابلیت Idempotent برای جلوگیری از تغییرات غیرضروری
- قابلیت هماهنگی و ادغام با ابزارهای حوزه دواپس نظیر Jenkins و GitLab CI/CD
- مقیاسپذیری بالا از چند سرور کوچک تا هزاران سرور در ابر
- انعطافپذیری در مدیریت پیکربندی، استقرار نرمافزار و اجرای اسکریپتها
مراحل نصب ansible
در ادامه مقاله مراحل نصب آن ذکر میشوند:
پیش نیازها
برای دنبال کردن این آموزش، به موارد زیر نیاز دارید:
یک Ansible Control Node سیستمی است که بهعنوان نقطه مرکزی مدیریت عمل میکند و از طریق پروتکل SSH، ارتباط و کنترل میزبانهای انسیبل (Ansible hosts) را بر عهده دارد. کنترلنود شما میتواند سیستم محلی یا یک سرور اختصاصی برای اجرای انسیبل باشد. این آموزش فرض میکند که کنترلنود شما یک سیستم Ubuntu 20.04 است. مطمئن شوید کنترلنود شما دارای موارد زیر باشد:
- یک کاربر غیر روت با دسترسی sudo: برای ایجاد کاربر جدید میتوانید به مراحل ۲ و ۳ موجود در راهنمای تنظیمات اولیه سرور در Ubuntu 20.04 مراجعه و آنها را اجرا کنید. اگر از یک سرور راهدور به عنوان کنترلنود استفاده میکنید، حتما تمام مراحل آن راهنما را انجام دهید؛ این مراحل شامل پیکربندی فایروال با ufw و فعالکردن دسترسی خارجی برای کاربر غیر روت است که امنیت سرور راهدور شما را تضمین میکند.
یک جفت کلید SSH که با این کاربر مرتبط باشد. - یک یا چند میزبان Ansible: میزبان انسیبل هر ماشینی است که کنترلنود شما برای خودکارسازی آن پیکربندی شده باشد. این آموزش فرض میکند میزبانهای شما سرورهای Ubuntu 20.04 راهدور هستند. مطمئن شوید که هر میزبان:
- کلید عمومی SSH کنترلنود را به فایل authorized_keys یک کاربر سیستم اضافه کرده باشد. این کاربر میتواند روت یا یک کاربر معمولی با دسترسی sudo باشد.
گام 1: نصب Ansible
برای شروع استفاده از انسیبل بهعنوان ابزاری برای مدیریت زیرساخت سرور، باید نرمافزار آن را روی ماشینی که نقش کنترلنود دارد نصب کنید.
روی کنترلنود، ابتدا مخزن PPA رسمی پروژه را به لیست منابع سیستم اضافه کنید:
sudo apt-add-repository ppa:ansible/ansible
وقتی پیام تأیید ظاهر شد، ENTER را فشار دهید. سپس شاخص بستههای سیستم را بهروز کنید تا پکیجهای موجود در این مخزن جدید شناسایی شوند:
sudo apt update
پس از این بهروزرسانی، میتوانید نرمافزار نصب Ansible را اجرا کنید:
sudo apt install ansible
اکنون کنترلنود شما همه نرمافزارهای لازم برای مدیریت میزبانها را دارد. در ادامه یاد میگیریم چگونه میزبانها را به فایلInventory کنترلنود اضافه کنیم تا قابل کنترل باشند.
گام 2: تنظیم فایل Inventory
فایل Inventory شامل اطلاعات مربوط به میزبانهایی است که با انسیبل مدیریت میکنید. این فایل میتواند شامل یک تا چند صد سرور باشد و میزبانها را میتوان در گروهها و زیردستهها سازماندهی کرد. همچنین میتوانید متغیرهایی را در Inventory تنظیم کنید که فقط برای میزبانها یا گروههای خاص معتبر باشند، تا در Playbookها و قالبها استفاده شوند. بعضی متغیرها حتی نحوه اجرای Playbook را تحت تأثیر قرار میدهند؛مثل متغیر ansible_python_interpreter که کمی بعد خواهیم دید.
برای ویرایش Inventory پیشفرض، فایل /etc/ansible/hosts را روی کنترلنود باز کنید:
sudo nano /etc/ansible/hosts
توجه: انسیبل به طور پیشفرض یک فایل Inventory در مسیر /etc/ansible/hosts ایجاد میکند، اما شما میتوانید در هر مسیر دلخواه نیز فایل Inventory اختصاصی خود را بسازید. در این حالت هنگام اجرای دستورات یا Playbookها باید مسیر فایل را با پارامتر -i مشخص کنید. استفاده از Inventory اختصاصی برای هر پروژه، خطر اجرای اشتباهی Playbook روی گروه نادرست را کاهش میدهد.
فایل Inventory پیشفرض شامل مثالهایی است که میتوانید بهعنوان الگو استفاده کنید. نمونه زیر گروهی به نام [servers] را با سه سرور مختلف تعریف میکند که هر کدام یک نام مستعار دارند. حتما IPها را با IP واقعی میزبانهای خود جایگزین کنید:
]servers[ server1 ansible_host=203.0.113.111 server2 ansible_host=203.0.113.112 server3 ansible_host=203.0.113.113 ]all:vars[ ansible_python_interpreter=/usr/bin/python3
زیردسته [all:vars] متغیر ansible_python_interpreter را تنظیم میکند تا همه میزبانهای این Inventory از Python 3 به جای Python 2.7 استفاده کنند؛ چون Python 2.7 در نسخههای جدید اوبونتو وجود ندارد.
پس از ویرایش، فایل را ذخیره و خارج شوید (CTRL+X، سپس Y و ENTER).
برای مشاهده Inventory میتوانید اجرا کنید:
ansible-inventory --list -y
این دستور ساختار Inventory را نمایش میدهد که شامل گروهها، میزبانها و متغیرهای آنهاست.
گام 3: تست اتصال
بعد از تنظیم Inventory، وقت آن است که بررسی کنید آیا انسیبل میتواند به سرورها متصل شده و از طریق پروتکل SSH دستورات را اجرا کند.
در این آموزش از حساب روت استفاده میشود، چون معمولا تنها حساب فعال در سرورهای تازهراهاندازیشده است. اگر روی میزبانها کاربر sudo معمولی دارید، بهتر است از آن استفاده کنید.
با دستور زیر اتصال را تست کنید:
ansible all -m ping -u root
این دستور با ماژولping داخلی انسیبل، موارد زیر را بررسی میکند:
- دسترسیپذیری میزبانها
- معتبر بودن اعتبارنامههای SSH
- امکان اجرای ماژولهای انسیبل با Python
اگر عملیات موفق باشد، خروجی حاوی عبارت ”ping”: “pong” نمایش داده میشود.
گام 4: اجرای دستورات Ad-Hoc (اختیاری)
وقتی اتصال با موفقیت برقرار شد، میتوانید دستورات آنی (Ad-Hoc) یا Playbookها را بر روی سرورها اجرا کنید.
مثلا برای بررسی فضای دیسک همه سرورها:
ansible all -a "df -h" -u root
برای نمونه، جهت نصب جدیدترین نسخه ویرایشگر vim روی تمام میزبانها میتوانید از دستور زیر استفاده کنید:
ansible all -m apt -a "name=vim state=latest" -u root
همچنین این امکان وجود دارد که تنها میزبانها یا گروههای مشخصی را هدف قرار دهید، مانند مثال زیر:
ansible servers -a "uptime" -u root
نحوه کار با انسیبل
انسیبل یک نرمافزار متنباز خودکارسازی IT مبتنی بر خط فرمان است که با زبان Python نوشته شده است. این ابزار توانایی پیکربندی سیستمها، استقرار نرمافزار و خودکارسازی فرآیندهای پیچیده ـ از جمله آموزش ansible ـ را در قالب جریانهای کاری سازمانی فراهم میکند.
هر دو نسخه – نسخه جامعهمحور (Community Ansible) و نسخه سازمانی (Ansible Automation Platform)- بر پایه یک معماری مشابه ساخته شدهاند:
- Control node: دستگاه یا سروری که انسیبل روی آن نصب شده و اجرای دستوراتی همچون Playbookها از طریق آن انجام و کنترل میگردد.
- Managed nodes: دستگاههایی هستند که کنترلنود با آنها تعامل دارد و بدون نصب هیچ عامل (Agent) رویشان عمل میکند. انسیبل ماژولهای کوچک مورد نیاز را به آنها منتقل کرده و اجرا میکند. سپس آنها را پاک کرده و اتصال را با استفاده از پروتکل SSH یا WinRM برقرار میکند. این ویژگی Agentless بودن، نصب Ansible و نصب Ansible را ساده و سبک میسازد.
ماژولها طوری طراحی شدهاند که بتوانند بدون ایجاد تغییرات غیرضروری، وضعیت سیستم را به وضعیت مطلوب (desired state) برسانند. به همین دلیل انسیبل قابلیت Idempotent بودن دارد؛ یعنی اجرای مکرر یک Playbook تنها زمانی تغییری اعمال میکند که لازم باشد وگرنه وضعیت سیستم بدون تغییر باقی میماند.
برای مدیریت دستگاههایی که امکان اجرای مستقیم ماژولها را ندارند (مثل برخی روترها یا تجهیزات شبکهای)، انسیبل تنها با کنترلنود تعامل دارد. در نسخه سازمانی، با استفاده از فناوریهایی همچون automation mesh میتوان وظایف را به گرههای اجرا (execution nodes) توزیع کرد تا مقیاسپذیری در محیطهای پیچیده حفظ شود.
در مرحله اتصال:
- انسیبل ابتدا فایل Inventory را بررسی میکند تا بداند کدام میزبانها را مدیریت کند.
- سپس با استفاده از اطلاعات اعتبارسنجی (مانند کلیدهای SSH یا روشهای دیگر) به آنها متصل شده و وظایف را اجرا میکند.
- اگر نیاز باشد، انسیبل میتواند به منابعی مانندVault (برای مدیریت امن رمزها)، سیستمهای احراز هویت مرکزی مانند LDAP یا Kerberos و حتی راهکارهای ابری مانند AWS،Azure یا Google Cloud نیز متصل شود.
سخن آخر
در این مقاله با جزئیات دیدیم که ansible چیست، چگونه کار میکند و چه مزایایی در حوزه دواپس دارد. انسیبل با معماری ساده و Agentless بودن، فرآیند نصب Ansible و مدیریت سرورها چه فیزیکی، چه ابری یا حتی خرید VPS را بسیار سریع و امن میکند. استفاده از پروتکل SSH، پشتیبانی از ماژولهای متعدد و قابلیت Idempotency، آن را به ابزاری قابل اعتماد برای خودکارسازی زیرساختها تبدیل کرده است. همکاری آن با ابزارهایی مانند داکر و Jenkins، شرایط را برای اجرای فرآیندهای پیشرفته و قابل توسعه مهیا میکند. انسیبل برای تیمهایی که به دنبال سرعت، امنیت و کاهش خطا هستند، انتخابی ایدهآل است.
سوالات متداول
۱. چرا از انسیبل استفاده کنیم؟
انسیبل به دلیل Agentless بودن، راهاندازی سریع و سازگاری با پروتکل SSH، نیازی به نصب نرمافزار اضافی روی میزبانها ندارد. این موضوع باعث کاهش هزینه، افزایش امنیت و سادگی مدیریت سرورهایی مثل خرید VPS یا سرورهای ابری میشود.
۲. Ansible چگونه کار می کند؟
انسیبل از روی کنترلنود با مراجعه به فایل Inventory، لیست میزبانها را یافته و از طریق SSH به آنها متصل میشود. سپس ماژولهای لازم را اجرا میکند و وضعیت سیستم را به حالت مطلوب میرساند؛بدون تغییرات اضافی.
۳. آیا Ansible فقط برای سرورها استفاده می شود؟
خیر. علاوه بر سرورها، انسیبل میتواند تجهیزات شبکه، سرویسهای ابری، پایگاهدادهها، کانتینرها و حتی اپلیکیشنها را مدیریت و خودکارسازی کند. همین انعطافپذیری آن را به ابزاری محبوب در دواپس تبدیل کرده است.