انسیبل برای دوآپس – قسمت صفرم

مدتهاست که من این پست را منتشر کرده‌ام. با گذر زمان هم دانش من نسبت به این ابزار هیجان انگیز افزون شده و هم تغییراتی که طی این مدت در وبلاگ ایجاد کردم باعث شده که از آن پست خیلی احساس رضایت نکنم و لاجرم یک دوره آموزش انسیبل جدید تهیه و خدمت شما ارائه کنم:

چرا انسیبل؟

  • زیبایی در سادگی است – All-in-one Simplifying Automation
انسیبل در عین سادگی میتواند کلیه پروسه اتوماتیزه کردن سناریوهای مختلف را بعهده بگیرد. به این دلیل که انسیبل با پایتون نوشته شده و همزمان همه قابلیتهای یک زبان برنامه نویسی عمومی را از پایتون به ارث برده است. این ویژگی منحصر به فرد امکانی فراهم آورده که با استفاده از یکی از هزاران ماژول نوشته شده از جامعه متن‌باز پایتون، ماژول خودمان را بنوسیم. در هنگام نگارش انسیبل بیش از ۳۰۰۰ ماژول رسمی را پشتیبانی میکند: Web, Database, Network, Cloud, Cluster, Monitoring, Windows(Really?), Stroage و غیره …
  • فرآیند یادگیری – 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 دارد.

پیشنیازها

    1. پایتون – Python
    2. پای‌پیپ – Pypip
    3. ویرچوال باکس – VirtualBox
    4. وایگرانت – Vagrant

در قسمت اول مقدمات شروع دوره را آماده میکنیم. با طراحی یک محیط مجازی برای آموزش انسیبل شروع خواهیم کرد و بعد از این در قمست دوم با معماری انسیبل آشنا خواهیم شد. در قمست سوم با پلی بوکها و مباحث پیرشفته مربوط به پلی‌بوک نویسی آشنا خواهیم گشت. در بخش چهارم ساختار پلی‌بوکها انسیبل را خواهیم آموخت. در بخش پنجم تا حدودی با پابلیک کلاد (Public Clouds) و همچنین کانتیرنها (Containers) و استفاده از انسیبل در این نوع زیرساختها آشنا خواهیم شد و در نهایت در بخش ششم خواهیم دید که پیرامون انسیبل چه در گذر است.

شروع بخش اول

پراویژنینگ محیط آزمایشگاه با Virtualbox و Vagrant

در این دوره آموزشی ما یک محیط مجازی با وایگرانت تهیه کرده‌ایم. در این محیط سه سرور اوبونتو و سه سرور سنت‌او‌اس به عنوان اعضای اینوتوری(در ادامه اینوتوری را توضیح خواهیم داد) هاستهای انسیبل و همچنین یک سرور اوبونتو به عنوان کنترلر در نظر گرفته‌ایم. اگر قبلا از ابزار وایگرانت بهره نبرده‌اید پیشنهاد میکنم به این پست مراجعه کنید و با این ابزار آشنا شوید.

نصب انسیبل – ‌Best Practice
  • پیشنیازهای انسیبل – Ansible Requirements
  • پایتون ۲ و یا پایتون ۳ – Python2 vs Python3
  • سیستم عامل و انتخابها – OS and Options
  • پای‌پیپ و انسیبل – PyPip and Ansible
  • ویرچوال انو و انسیبل – Virtualenv and Ansible

انسیبل با زبان پایتون توسعه داده شده است. دانش پایتون کمک شایانی به استفاده از انسیبل خواهد کرد.
در هنگان نصب انسیبل پایتون یا بصورت پیشفرض برای شما نصب شده و یا همزمان با انسیبل به عنوان پیش نیاز نصب خواهد شد.
برای نصب انسیبل سه روش عمومی در دسترس است:

anisble-installation-options

استفاده از هر کدام از روشهای یاد شده یک اسنیبل کارا را در اختیار ما خواهد گذاشت و هر یک از روشها در محیطهای منحصر به فرد برتری یا کاستی نسبت به یک دیگر خواهند داشت. در این دوره ما از روش پای‌پیت استفاده میکنیم.
قسمت بیشتری از کدهای انسیبل با پایتون۲ نوشته شده است، اگرچه در زمان نگارش این پست بخش مهمی از ریپازیتوری انسیبل با پایتون سه تلفیق شده. به هر حال اگر از ورژن بزرگتر از ۲.۵.۲ استفاده میکنید انسیبل به طور کامل از پایتون ۳ پیشتیبانی میکند.
انسیبل بر روی همه توزیعهای لینوکس قابل نصب شدن است. بجز این بر روی همه سیستم عاملهای 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)]

کانفیگ فایل انسیبل به صورت استاندارد به ترتیب در سه مسیر بدنبال کانفیگ فایل خود میگردد.

  1. دایرکتوری جاری
    ./anisble.cfg
  2. دایرکتوری Home یا تیلدا
    ~/.ansible.cfg
  3. دایرکتوری کانفیگ‌ های سیستم
    /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)]

محتوای بخش اول


دیدگاه‌ها

6 پاسخ به “انسیبل برای دوآپس – قسمت صفرم”

  1. Anisble Tower هم میگید؟

    1. بله تاور هم در حد معرفی میگم.

  2. Good post. I learn something totally new and challenging on blogs I stumbleupon every day. It will always be interesting to read through articles from other writers and use a little something from other sites.

  3. […] از قسمت صفرم، در قسمت اول در مورد اینونتوریها(Inventories) به تفصیل صحبت […]

  4. […] قسمت صفرم از این سری آموزش انسیبل محیط آزمایشگاه را فراهم آوردیم […]

پاسخی بگذارید

%d وب‌نوشت‌نویس این را دوست دارند: