آموزش انسیبل ( Ansible )؛ ساخت گروه در مخزن Ansible
در مقالات قبلی تلاش کردیم تا به طور مفصل، داکر و دستورات آن را برایتان توضیح دهیم. حال میخواهیم در این مقاله و سری مقالات بعدی به یکی دیگر از تواناییهای مهندسان دواپس ( devops ) بپردازیم؛ با آموزش انسیبل همراه ما باشید.
تصور کنید سرویس بسیار بزرگی متشکل از چندین ماشین مجازی در اختیار دارید و نیاز است در هر کدام از ماشینها یک دستور اجرا کنید، یک خط از یک فایل را تغییر دهید یا حتی یک فایل را بر روی هر کدام اجرا کنید و…؛ اصولا این عمل، اتفاق زمانگیر و فرسایشیای خواهد بود و ممکن است در انجام آنان اشتباهات مختلفی صورت بگیرد. همچنین در صورتی که نیاز باشد تا یک زنجیره از اتفاقات داخل هر کدام از سرور ها اجرا شود این مشکلات چند برابر شده و زمان انجام آنها نیز بیشتر میشود.
ممکن است این سوال برایتان پیش بیاید که Ansible چیست و چه کاربردی دارد؟ انسیبل یکی از جمله ابزارهایی است که مهندس devops (دواپس) از آن برای حل این مشکل استفاده میکنند. این ابزار، اتفاقاتی را که برای دستیابی به اهدافی معین نیاز داریم را در چندین سرور یا ماشین مجازی به صورت دسته بندی و هدفمند از داخل تنها یک سرور انجام میدهد.
انسیبل ابزاری قابل اطمینان و سازگار که مقیاس پذیری را در زیرساخت قابل قبول ( ansible infrastructure ) شبکهی شما فراهم می کند و میتوانید مدیریت پیکر بندی ( configuration management ) پایگاه داده ، ذخیره سازی ، مجازی سازی ، فایروال ها و دیگر ابزارهای شبکه را با استفاده از انسیبل خودکار کنید. در این مقاله قصد داریم آموزش فارسی ansible را برای ساخت مخزن باهم دنبال کنیم. با ما همراه باشید.
آنچه خواهید خواند
در این آموزش، به صورت مختصر به معرفی انسیبل و نحوه ی نصب آن بر روی ویندوز خواهم پرداخت. اگر بخواهم یک تعریف ساده داشته باشم در واقع انسیبل یک ابزار تنظیم خودکار و اتوماسیون ( automation ) زیرساختی است که بر پایه ی پایتون نوشته شده و از پایتون استفاده می کند. انسیبل از SSH برای برقراری ارتباط بین ابزارهای شبکه استفاده می کند و نیازی به نصب Agent بر روی کلاینت ندارد ، همچنین انسیبل از Playbook ها برای انجام کار اتوماسیون ( automation ) بهره می برد.
برای دسترسی آسانتر شما عزیزان به مطالب این مقاله، عناوین آن را در ادامه برایتان لیست کردهایم:
- انسیبل چطور کار میکند؟
- آموزش انسیبل ؛ دستورات در انسیبل چطور وارد میشوند؟
- تنظیمات اولیه برای شروع کار با انسیبل چیست ؟
- اینونتوری یا مخزن در انسیبل چیست ؟
- آموزش انسیبل ؛ چگونه در مخزن انسیبل گروه بسازیم
- ساخت گروه از گروههای مخزن انسیبل
- سخن پایانی در این قسمت از آموزش انسیبل
انسیبل چطور کار میکند؟
در ابتدا برای معرفی انسیبل ، عنوان کنیم که انسیبل از داخل یک سرور یا ماشین مجازی و از طریق پلتفرمهای ssh و winrm به سایر ماشینهای مجازی متصل میشود. در نهایت دستوراتی که به انسیبل صادر میکنیم را در داخل آن سرور ها انجام داده و نتیجه را به ما اعمال میکند. سروری که اجرا کنندهی نرم افزار انسیبل است با نام ” سرور مدیر” شناخته شده و میتواند به هر تعداد از سرور که نیاز داریم دستورات و اتفاقات مورد نیاز ما را اعلام کند.
SSH در واقع یک پروتکل طراحی شده برای برقراری اتصال امن میان کاربر و سرور (Server) است؛ بدین صورت که ما در اتصال با پروتکل SSH قبل از ارسال هر اطلاعات آنها را رمزنگاری نموده و در سمت مقابل رمز گشایی می نماییم. البته این کار توسط خود سیستم و بدون دخالت کاربر انجام می پذیرد؛ پیشنهاد میکنیم برای حفظ امنیت سایت خود پس از خرید یک هاست و سرور مناسب از یک نمایندگی هاست معتبر به مقاله ssh چیست مراجعه کنید تا آموزش افزایش امنیت سرور با تغییر پورت ssh را به درستی فرا بگیرید.
هاست در زبان انگلیسی (Host) به معنای میزبان است که به بخشی از سرور گفته میشود. یک سرور میتواند به چندین قسمت تقسیم شود (تقسیمبندی مجازی) که به هر قسمت آن، هاست گفته میشود. یعنی هر بخش از این سرور به عنوان یک هاست از یک وبسایت میزبانی میکند. برای راهاندازی یک وبسایت در فضای اینترنت بعد از طراحی قالب سایت، باید به دنبال تهیهی یک هاست مناسب برای خود باشید.
آموزش انسیبل ؛ دستورات در انسیبل چطور وارد میشوند؟
در مفهوم نرم افزار انسیبل برای اجرا و انجام یک اتفاق، از سری ابزاری به نام ماژولها استفاده میکنیم. مثلا در زمان تعمیر ماشین خود با یک مشکل مواجه میشوید؛ اصولا اولین کاری که میکنید آن است که ابزار مورد نظر برای انجام آن کار را برداشته و با آن ابزار، تلاش میکنید تا آن مشکل را برطرف کنید. در انسیبل نیز همین موضوع صادق است و برای انجام هر فعالیتی باید از ابزار مربوط به همان کار استفاده کنیم. به طور مثال، برای اجرای یک اسکریپت داخل سرور های هدف، از ماژول script و برای اجرای یک دستور در شل از ماژول shell استفاده میکنیم.
Configuration Files:
مسیر پیشفرض فایل کانفیگ Ansible در مسیر etc/ansible/ansible.cfg/ هست که میتوان مسیر دیگری نیز مشخص نمود. Playbooks در زمان اجرای کانفیگ های Ansible را از این فایل دریافت مینماید.
به طور کلی، الگوی کلی وارد کردن دستور در نرم افزار انسیبل به شکل زیر است:
ansible TARGET -i INVENTORY -m MODULE -a ‘ARGUMENTS’
- در سطر بالا در قسمت TARGET قسمتی از اینونتوری و یا مخزن مورد انتخاب ما در انسیبل انتخاب میشود.
- در قسمت INVENTORY فایل مخزن مورد نظر که دستور مورد نظر ما در آن اجرا میشود قرار خواهد گرفت.
- در قسمت MODULE ماژول یا ابزار مورد نظر ما از انسیبل که قرار است از آن استفاده کنیم وارد میشود.
- در قسمت ARGUMENTS آرگومانتها یا اجزای اجرایی و دستورات نوع استفاده از ابزار مورد نظر خود را وارد میکنیم.
تنظیمات اولیه برای شروع کار با انسیبل چیست ؟
در اولین قدم برای آموزش انسیبل ، پس از نصب انسیبل ، نیاز است تا کلید rsa سرور هاست بر روی تمامی نودها گذاشته شود تا انسیبل بدون نیاز به وارد کردن رمز عبور بتواند به سرور وارد شود. (هر چند در صورت نیاز میتوانیم رمز عبور ssh را به انسیبل در قسمت مخزن تعریف کنیم تا با آن رمز عبور وارد شود) سپس باید کاربری که به عنوان کاربر انسیبل تعیین میشود را در گروه کسانی قرار دهیم که دسترسی root دارند و همچنین اتصال و انجام دستور روت برای این یوزر را بدون استفاده از پسورد فراهم آوریم تا انسیبل بدون مشکل دستورات و اتفاقات مورد نظر خود را انجام دهد و بتوانیم از همه ابزار در آن استفاده کنیم.
اینونتوری یا مخزن در انسیبل چیست ؟
اولین موضوعی که بعد از شروع آموزش انسیبل به آن برمیخوریم، مخزن انسیبل است. این فایل به شکلی ساخته شده است که در آن سرور های تحت ارتباط با انسیبل تعریف شده و گروه بندی میشوند. همچنین نوع ارتباط، روش ارتباط، نوع سیستم عامل و تمامی عناوین تاثیر گذار در اتصال انسیبل به سرور ها در این قسمت گذاشته شده و به انسیبل فهمانده میشوند.
این فایل بدین صورت ساخته میشود که ابتدا در آن سرور ها و نودهای هدف را به تفکیک تعیین و تشریح کرده و سپس در قسمتهای دیگر این فایل، هاستهای تعریف شده را گروه بندی میکنیم و حتی بعد از آن نیز میتوانیم گروههایی بزرگتر از آنچه در مرحله قبل ساختهایم بسازیم.
آموزش اتصال به هاست
در همین مراحل ابتدایی، نوع تعریف هاست و یک سری از قسمتهای مورد نظر برای اتصال به هاست را مورد بررسی قرار میدهیم:
در ابتداییترین قسمت این فایل، نام هاست مورد نظر را در ابتدای کار وارد میکنیم؛ بدین صورت که مثلا هاست اول را با نام host-1 در ابتدای خط به روش زیر مینویسیم:
host-1
در قسمت بعدی، آیپی و یا آدرس این هاست را با فاصله نسبت به این قسمت با الگو ansible_host=IP (IP نمایانگر آدرس آیپی سرور میباشد) وارد میکنیم، به این صورت:
host-1 ansible_host=10.0.0.5
در قسمت بعد میتوانیم نوع ارتباط خودمان با هاست مورد نظر را تعیین کنیم. مثلا در صورتی که سرور مقصد از سیستم عامل لینوکس ( linux ) استفاده میکند ارتباط ما با این سرور از طریق ssh بوده و در صورتی که سرور مقصد از سیستم عامل ویندوز استفاده میکند از راه ارتباطی winrm استفاده میکنیم. این قسمت به روش زیر تعریف میشود:
host-1 ansible_host=10.0.0.5 ansible_connection=ssh
در اصل لینوکس پایینترین سطح اجزای نرم افزاری یک سیستم به شمار میرود. به خاطر داشته باشید که اگر این بخش آسیب ببیند سایر نرم افزار ها هم قابل استفاده نخواهند بود.
وارد کردن نام کاربری مورد استفاده در انسیبل
در قسمت بعد یوزر یا نام کاربری که انسیبل از آن استفاده میکند تا اتفاقات مورد نظر خود در سرور هاست را انجام دهد وارد میکنیم. مثلا در مثال مطرح شده از کاربر root استفاده میکنیم و قسمت مورد نظری که باید در آن تعریف شود به نام ansible_user را به شرح زیر پر مینماییم:
host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=root
جز ۵ مورد بالا قسمتهای بسیار زیادی قابل تعیین در قسمت تعریف هاستها میباشد اما در نظر داشته باشید که تنها این ۴ مورد ابزار کافی برای ساخت فایل انسیبل را در اختیار ما قرار میدهد. از آنجایی که این مقاله برای آموزش انسیبل و آشنایی بیشتر با آن ساخته شده است از توضیحات بیشتر سر باز زده و به ادامه توضیحات کلی درباره انسیبل میپردازیم. برای آشنایی با مزایا و کاربرد انسیبل پیشنهاد میکنیم در ابتدا مقالهی انسیبل Ansible چیست را مطالعه کرده و سپس این مقاله را دنبال کنید.
در قسمت دیگری از فایل مخزن یا اینونتوری میتوانیم هاستهای تعریف شده را در دسته بندیهای مختلف قرار دهیم. در هنگام استفاده از دستور انسیبل نیز میتوانیم نام گروه را معرفی کرده و اتفاق مورد نظر خود را بر روی گروهی از سرور ها انجام دهیم.
به طور مثال فکر کنید چند هاست با الگوی زیر در یک فایل مخزن گزارش شده اند:
host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=root
host-2 ansible_host=10.0.0.6 ansible_connection=ssh ansible_user=root
host-3 ansible_host=10.0.0.7 ansible_connection=ssh ansible_user=root
host-4 ansible_host=10.0.0.8 ansible_connection=ssh ansible_user=root
آموزش انسیبل ؛ چگونه در مخزن انسیبل گروه بسازیم
حال یک گروه از این هاستها بر روی خود وب سرور داشته و گروه دیگری از این هاستها بر روی خود دیتا بیس دارند و گروهی نیز اپلیکیشن را بر عهده دارند.
مثلا سرور دیتابیس در هاست ۱ و ۳ قرار داشته و سرور اپلیکیشن در هاست ۲ و سرور وب سرور در هاست ۴ قرار داشته باشد. در حالت زیر میتوانیم یگ گروه از هاستهای بالا را تعریف کنیم که هر دو دیتا بیس باشند.
به صورت زیر میتوان یک گروه در مخزن انسیبل ایجاد کرد:
[database]
host1
host3
و فایل کلی اینونتوری ما با توجه به توضیح بالا میتواند به حالت زیر ساخته شود:
host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=root
host-2 ansible_host=10.0.0.6 ansible_connection=ssh ansible_user=root
host-3 ansible_host=10.0.0.7 ansible_connection=ssh ansible_user=root
host-4 ansible_host=10.0.0.8 ansible_connection=ssh ansible_user=root
[database]
host1
host3
[webserver]
host4
[app]
host2
(در نظر داشته باشید که گروهها میتوانند تنها یک عضو داشته باشند و این موضوع هیچ اشکالی ندارد حتی اگر برای تغییر نام یک هاست باشد.)
آموزش انسیبل ؛ ساخت گروه از گروههای مخزن انسیبل
نوع دیگر از گروهها آن است که گروهی ساخته شود و زیر شاخههایش گروههای دیگری باشند.
در این صورت برای تعریف این گروهها از عبارتی همچون عبارت زیر استفاده میکنیم:
[GROUP:children]
به این صورت که ابتدا داخل کروشه عبارت گروه خود را تایپ کرده و سپس : گذاشته و در نهایت عبارت children را استفاده میکنیم تا اجازه داشته باشیم در این گروه، از گروههای دیگر نیز استفاده کنیم.
به طور مثال برای این که گروهی به اسم all متشکل از تمامی هاستهای مثال قبل را داشته باشیم بدین صورت این گروه را معرفی میکنیم:
[all:children]
database
webserver
app
در نتیجه فایل نهایی مخزن ما به صورت زیر خواهد بود:
host-1 ansible_host=10.0.0.5 ansible_connection=ssh ansible_user=root
host-2 ansible_host=10.0.0.6 ansible_connection=ssh ansible_user=root
host-3 ansible_host=10.0.0.7 ansible_connection=ssh ansible_user=root
host-4 ansible_host=10.0.0.8 ansible_connection=ssh ansible_user=root
[database]
host1
host3
[webserver]
host4
[app]
host2
[all:children]
database
webserver
app
سخن پایانی در این قسمت از آموزش انسیبل
این مقاله، قسمت اول از سری آموزشهای کاربردی انسیبل است که قصد داریم به صورت هفتگی آن را پیش ببریم. امیدواریم که این آموزش انسیبل شما را راهنمایی کرده باشد. در صورتی که انتقاد یا پیشنهادی درباره این سری مقالات دارید، میتوانید با تیم آراز در میان بگذارید تا به آنان پاسخ دهیم و یا در مقالات بعدی به آنان بپردازیم.
Playbook چیست ؟ آیا شما هم با این پرسش رورو شدهاید؟ ما مقالهای دیگر را به طور اختصاصی به این موضوع اختصاص دادهایم. اگر دوست دارید دربارهی ansible playbook بیشتر بدانید و خود را در زمینهی کاربرد انسیبل به سطح بالاتری برسانید، توصیه میکنیم فرصت مطالعهی مقالهی پلی بوک انسیبل را از دست ندهید.