مدتهاست که من این پست را منتشر کردهام. با گذر زمان هم دانش من نسبت به این ابزار هیجان انگیز افزون شده و هم تغییراتی که طی این مدت در وبلاگ ایجاد کردم باعث شده که از آن پست خیلی احساس رضایت نکنم و لاجرم یک دوره آموزش انسیبل جدید تهیه و خدمت شما ارائه کنم:
چرا انسیبل؟
-
زیبایی در سادگی است – All-in-one Simplifying Automation
-
فرآیند یادگیری – Lower Learning Curve
سرعت یادگیری انسیبل هم نسبتا آسان است. نصب آسان و تنظیمات اولیه در عین سادگی بسیار هوشمندانه طراحی شدهاند. در کمتر از ۱۰ دقیقه ممکن است که انسیبل را نصب و پیکربندی کرد و اولین دستور ad-hoc را برای تعداد n سرور اجرا کرد و روزمرگیهایی را مثل تنظیم ساعت، رمز عبور یوزر روت و بروزرسانی پکیجهای سرور و غیره را اتوماتیزه کرد.
همچنین سینتکس و روال کار با انسیبل بسیار ساده و قابل فهم است. به همین دلیل فرآیند یادگیری را راحت میکند. فایلها فرمت YAML دارند. YAML یک زبان declarative استاندارد است که بصورت گسترده در ابزارهای مختلف مورد استفاده قرار میگیرد از همین رو بسیار ملموس و قابل درک است. به انضمام اینکه همچنان زبان پایتون در کنار انسیبل برای ساختن ماژولهای سفارشی به تواناییهای این ابزار میافزاید.
-
زیرساخت تغییرپذیر – Mutable Infrastrucure
در گذشته اتوماتیزه کردن و همگرایی زیرساختها به روش سنتی مستلزم هزینه انرژی و زمان زیادی بود. با فرآیند نسبت مدرن Infrastructure as code محیطهای قابل مدیریت توسط مدیران سیستم (Sysadmin) بطور قابل ملاحظهای تغییر کردهاند. این تغییرات هزینه بر و باعث بروز پیچیدگی در بین تیمها میشوند. انسیبل بخوبی با محیطهای چند کاربره و متداخل تطبیق داده میشود و بصورت یکپارچه و اتوماتیزه ایفای نقش میکند. همچنین تغییر یا مهاجرت از یک محیط به محیط دیگر با انسیبل دیگر دراماتیک نیست. برای مثال مهاجرت از AWS به Azure یا از On-Premises به GCP.
-
فقط کنترلر انسیبل – No Agent
انسیبل نیازی به عامل و عواملی در سرورها یا Endpoints ندارد. تنها پیشنیازهای انسیبل بجز یک کنترلگر انسیبل، دسترسی SSH برای سرورهای لینوکس و WINRM برای سرورهای ویندوزی است. پلیبوک تنظیمات دلخواه را به سروها مشخص شده در اینوتوری ارسال میکنند. حتی در برخی موارد دستورات بصورت ad-hoc اجرا میشوند. بطور کل مدل Agentless تعاملات و اسباب تنظیم سریعتری نسبت به مدل server-client دارد.
پیشنیازها
-
- پایتون – Python
- پایپیپ – Pypip
- ویرچوال باکس – VirtualBox
- وایگرانت – Vagrant
در قسمت اول مقدمات شروع دوره را آماده میکنیم. با طراحی یک محیط مجازی برای آموزش انسیبل شروع خواهیم کرد و بعد از این در قمست دوم با معماری انسیبل آشنا خواهیم شد. در قمست سوم با پلی بوکها و مباحث پیرشفته مربوط به پلیبوک نویسی آشنا خواهیم گشت. در بخش چهارم ساختار پلیبوکها انسیبل را خواهیم آموخت. در بخش پنجم تا حدودی با پابلیک کلاد (Public Clouds) و همچنین کانتیرنها (Containers) و استفاده از انسیبل در این نوع زیرساختها آشنا خواهیم شد و در نهایت در بخش ششم خواهیم دید که پیرامون انسیبل چه در گذر است.
شروع بخش اول
پراویژنینگ محیط آزمایشگاه با Virtualbox و Vagrant
در این دوره آموزشی ما یک محیط مجازی با وایگرانت تهیه کردهایم. در این محیط سه سرور اوبونتو و سه سرور سنتاواس به عنوان اعضای اینوتوری(در ادامه اینوتوری را توضیح خواهیم داد) هاستهای انسیبل و همچنین یک سرور اوبونتو به عنوان کنترلر در نظر گرفتهایم. اگر قبلا از ابزار وایگرانت بهره نبردهاید پیشنهاد میکنم به این پست مراجعه کنید و با این ابزار آشنا شوید.
نصب انسیبل – Best Practice
- پیشنیازهای انسیبل – Ansible Requirements
- پایتون ۲ و یا پایتون ۳ – Python2 vs Python3
- سیستم عامل و انتخابها – OS and Options
- پایپیپ و انسیبل – PyPip and Ansible
- ویرچوال انو و انسیبل – Virtualenv and Ansible
انسیبل با زبان پایتون توسعه داده شده است. دانش پایتون کمک شایانی به استفاده از انسیبل خواهد کرد.
در هنگان نصب انسیبل پایتون یا بصورت پیشفرض برای شما نصب شده و یا همزمان با انسیبل به عنوان پیش نیاز نصب خواهد شد.
برای نصب انسیبل سه روش عمومی در دسترس است:
استفاده از هر کدام از روشهای یاد شده یک اسنیبل کارا را در اختیار ما خواهد گذاشت و هر یک از روشها در محیطهای منحصر به فرد برتری یا کاستی نسبت به یک دیگر خواهند داشت. در این دوره ما از روش پایپیت استفاده میکنیم.
قسمت بیشتری از کدهای انسیبل با پایتون۲ نوشته شده است، اگرچه در زمان نگارش این پست بخش مهمی از ریپازیتوری انسیبل با پایتون سه تلفیق شده. به هر حال اگر از ورژن بزرگتر از ۲.۵.۲ استفاده میکنید انسیبل به طور کامل از پایتون ۳ پیشتیبانی میکند.
انسیبل بر روی همه توزیعهای لینوکس قابل نصب شدن است. بجز این بر روی همه سیستم عاملهای Unix از جمله BSD و FreeBSD و همینطور MacOSx نیز قابل نصب میباشد. ویندوز ۱۰ نیز با بهرهگیری از پروتوکل OpenSSH از انسیبل پشتیبانی میکند.
پایپیپ این امکان را به ما میدهد که یک ورژن مشخص از انسیبل را نصب کنیم. مثلا
pip install ansible>=2.5.2
بهره گرفتن از ویرچوال انو این امکان را فراهم میکنید که همزمان کدهای انسیبل را با ورژنهای مختلف در اختیار داشته باشیم.
virtualenv venv25 source venv25/bin/activate pip install ansible==2.5.2 deactivate virtualenv venv27 source venv27/bin/activate pip install ansible==2.7.2
به جز این استفاده کردن از پایپیپ و ویرچوآلانو این امکان را میسر میکند که محیط انسیبل Cross-Platfrom باشد و کاربران لینوکس، مکاواس و ویندوز قادر به مشارکت در توسعه پروژه پیش رو را داشته باشند.
تنفیذ کانفیگ انسیبل
ansible --version ansible 2.9.10 config file = /Users/ashkan/Documents/Projects/ansible/ansible.cfg configured module search path = ['/Users/ashkan/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /Users/ashkan/Documents/Projects/ansible/venv/lib/python3.8/site-packages/ansible executable location = /Users/ashkan/Documents/Projects/ansible/venv/bin/ansible python version = 3.8.0 (v3.8.0:fa919fdf25, Oct 14 2019, 10:23:27) [Clang 6.0 (clang-600.0.57)]
کانفیگ فایل انسیبل به صورت استاندارد به ترتیب در سه مسیر بدنبال کانفیگ فایل خود میگردد.
- دایرکتوری جاری
./anisble.cfg
- دایرکتوری Home یا تیلدا
~/.ansible.cfg
- دایرکتوری کانفیگ های سیستم
/etc/ansible/ansible.cfg
البته حالت صفرم استفاده از متغیر ANSIBLE_CONFIG
است. توجه داشته باشید که در بالا بر اساس اولیت مرتب شده اند. یعنی دایرکتوری جاری اولیت بالاتری از دایرکتوری Home و دایرکتوری Home اولویت بالاتری نسبت به دایکتوری کانفیگ فایلهای سیتم دارد.
انسیبل بجر کانفیگ فایلها بدنبال هاست هم هست. بصورت پیشفرض در دایرکتوری کانفیگ فایلهای سیستم بدنبال فایلی است به اسم /etc/ansible/hosts
. اما این معمولا از این فایل برای مرتب کردن سرورها استفاده نمیکنند. و دلیل آن مرتب نگه داشتن آنها در ریپازیتوری پروژه است. در این دوره آموزش ما در زیر دایرکتوری هر درست فایل مربوط به hosts
را ایجاد میکنیم و با هر بار اجرای انسیبل آن را به عنوان آرگومان اینتوری پاس خواهیم داد.
آزمایشگاه صفرم
برای شروع درس عملی در آزماشیگاه صفرم در ابتدا محیط آموزشی را آماده میکنیم. برای اینکار لطفا ریپازیتوری دوره را از این آدرس کلون و یا درخواست دانلود زیپ بفرمایید.
وارد پوشه کلون شده بشوید و اطمینان حاصل کنید که Vagrant را دانلود و بر روی سیستمتان نصب کردهاید.
vagrant --version Vagrant 2.2.9
سپس به Vagrant اجازه دهید که محیط آموزشیتان را تهیه کند.
vagrant up
لطفا در صورت نیاز به داکیومنت Vagrant یا پستهای قبلی من در خصوص این ابزار مراجعه کنید.
برای اینکه این محیط بهتر عمل کند ما از انسیبل استفاده میگیریم که:
- سرورهای CentOS و Ubuntu را بعد از نصب برای اولین بار بروز رسانی کند
- پایتون۳ و پایپیپ را نصب کند
- کلید عمومی RSA و یا DSA را در همه هاستها Authorized کند
- سرور
8.8.8.8
را به عنوان DSN Resolver تنظیم کند
این توضیحات برای این در اینجا آورد شد که به سوال احتمالی شما در خصوص مقصود از اجرای این پلیبوک انسیبل را پاسخ بدهیم. اگر تا انتهای دوره در خدمت شما باشیم، با جزئیات تمام موارد را پوشش خواهیم داد.
مطمئن شوید که پایتون۳ نصب شده دارید:
python --version Python 3.8.0
از حضور پایپیت هم اطمینان حاصل فرمایید:
pip --version pip 20.1.1 from /Users/ashkan/Documents/Projects/ansible/venv/lib/python3.8/site-packages/pip (python 3.8)
بعد از این یک ویرچوال انو جدید ایجاد کنید. ما در این دوره نام venv
را برای این در نظر میگیریم:
virtualenv venv Using base prefix '/Library/Frameworks/Python.framework/Versions/3.8' New python executable in /private/tmp/venv/bin/python3 Also creating executable in /private/tmp/venv/bin/python Installing setuptools, pip, wheel... done.
یقینا این ویرچوال انو را فعال خواهیم کرد:
$ source venv/bin/activate
و بعد از این ansible را نصب خواهیم کرد.
pip install ansible==2.9.10
ansible --version ansible 2.9.10 config file = /Users/ashkan/Documents/Projects/ansible/ansible.cfg configured module search path = ['/Users/ashkan/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /Users/ashkan/Documents/Projects/ansible/venv/lib/python3.8/site-packages/ansible executable location = /Users/ashkan/Documents/Projects/ansible/venv/bin/ansible python version = 3.8.0 (v3.8.0:fa919fdf25, Oct 14 2019, 10:23:27) [Clang 6.0 (clang-600.0.57)]
Anisble Tower هم میگید؟
بله تاور هم در حد معرفی میگم.