نصب و راه اندازی Ansible بر روی Ubuntu 18.04

نصب و راه اندازی Ansible بر روی Ubuntu 18.04

مقدمه

سیستم های مدیریت پیکربندی (CMS) برای ساده سازی فرآیند کنترل تعداد زیادی سرور برای مدیران و تیم های اجرایی است.این سیستم ها به شما اجازه می دهند از یک پایگاه مرکزی، سیستم های متعددی را به روشی خودکار کنترل کنید.
با اینکه ابزارهای مدیریت پیکربندی مشهور فراوانی برای سیستم های لینوکس مانند  Chef و  Puppet وجود دارد، اما آن ها معمولا پیچیده‌تر از چیزی هستند که مردم می‌خواهند و یا نیاز دارند. Ansible یک جایگزین عالی برای این گزینه ها است، زیرا یک معماری ساده را ارائه می دهد که نیازمند نصب نرم افزار خاصی روی گره ها ندارد. در این سیستم از SSH (پوسته ی امن) برای انجام وظایف اتوماسیون و YAML برای تعریف اطلاعات تدارکات (provisioning) استفاده می‌شود.
در این راهنما ما به چگونگی نصب و راه اندازی Ansible بر روی Ubuntu 18.04 می‌پردازیم. همچنین برخی مبانی استفاده از این نرم افزار نیز مورد توجه قرار خواهد گرفت.

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

انسیبل ماشین های Client که به آن ها میزبان یا Ansible host گفته می شود را از یک کامپیوتر که  اجزای انسیبل روی آن نصب و پیکربندی گردیده و به آن گره کنترلگر یا Ansible controller node می‌گویند، پیکربندی می‌نماید.

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

Ansible با بهره‌گیری از رویکرد ماژولار، استفاده از ویژگی‌های سیستم اصلی را برای مقابله با سناریوهای خاص آسان می‌کند. ماژول‌ها می‌توانند به هر زبانی نوشته شوند و با JSON استاندارد ارتباط برقرار نمایند. فایل های پیکربندی عمدتا با فرمت سریال سازی داده YAML نوشته می‌شوند. این مورد به دلیل ساختار توضیحی آن و شباهتش به زبان‌های محبوب نشانه‌گذاری است. انسیبل با میزبان‌هایش از طریق ابزارهای command line و یا با رشته دستورالعمل‌های پیکربندی خود که با نام Playbooks  شناخته می‌شوند، تعامل برقرار می‌کند.

پیش نیازهای Ansible

برای ادامه کار جهت نصب و راه اندازی Ansible بر روی Ubuntu 18.04 ، شما به موارد زیر نیاز خواهید داشت:

یک گره کنترل Ansible:

گره کنترل Ansible ماشینی است که ما برای اتصال به میزبان‌های Ansible و کنترل کردن  آن ها از طریق SSH استفاده می‌نماییم. گره کنترل شما می‌تواند کامپیوتر مستقر شما و یا سروری اختصاصی جهت اجرای Ansible باشد. البته در نظر داشته باشید که در این راهنما فرض بر این است که گره کنترل شما سیستم Ubuntu 18.04 است. همچنین مطمئن گردید که گره کنترل موارد زیر را داشته باشد:

1- اولین نکته یک کاربر غیر root  با دسترسی sudo است. برای راه‌اندازی آن می توانید به مراحل 2 و 3 راهنمای راه اندازی اولیه سرور برای Ubuntu 18.04 مراجعه کنید. البته توجه شود که اگر از یک سرور راه دور به عنوان گره کنترل Ansible استفاده می‌کنید باید تمام مراحل این راهنما را طی کنید. با این کار شما یک فایروال را با UFW روی سرور پیکربندی کرده و دسترسی خارجی به پروفایل کاربر غیر Root را فعال می‌نمایید. هر دو این موارد به افزایش امنیت سرور راه دور کمک می‌کنند.

2- نکته دوم وجود یک SSH keypair مرتبط با این کاربر است.

یک یا چند میزبان Ansible:

میزبان Ansible هر ماشینی است که گره کنترل Ansible برای اتوماتیک کردن آن پیکربندی شده است. در این راهنما فرض بر این است که میزبان Ansible شما سرورهای  Ubuntu 18.04 راه دور هستند. مطمئن شوید که میزبان Ansible دارای مورد زیر است:

کلید عمومی SSH  گره کنترل Ansible به authorized_keys کاربر سیستم اضافه شده باشد. این کاربر می‌توانند root و یا کاربری معمولی با دسترسی sudo باشد.

چگونه Ansible را بر روی Ubuntu 18.04 نصب و پیکربندی کنیم؟

حال به صورت گام به گام مراحل را برای نصب و راه اندازی Ansible بر روی Ubuntu 18.04 پیش خواهیم برد.

مرحله ی اول: نصب Ansible

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

$   sudo apt-add-repository ppa:ansible/ansible

هنگامی که خواسته شد اضافه شدن PPA را تایید کنید، کلید ENTER را فشار دهید. حال فهرست بسته‌های سیستم را تازه‌سازی کنید تا از بسته های مشمول PPA  جدید مطلع شود.

$ sudo apt update   

با انجام این آپدیت می توانید Ansible را با فرمان زیر نصب کنید:

$   sudo apt install ansible

گره کنترل Ansible شما اکنون تمام نرم‌افزارهای مورد نیاز برای مدیریت میزبان‌ها را دارد. در مرحله ی بعد بررسی می‌کنیم که چگونه میزبان‌ها را به فایل فهرست داده گره کنترل اضافه کنیم تا بتوان آن‌ها را کنترل نمود.

مرحله ی 2: راه اندازی فایل موجودی

فایل موجودی (inventory file) شامل اطلاعات درباره میزبان هایی است که قرار است با Ansible مدیریت شوند. شما می توانید از یک تا صدها سرور را در فایل موجودی مشمول کنید و میزبانان می‌توانند در گروه‌ها و زیرگروه‌ها دسته‌بندی شوند. فایل موجودی همچنین اغلب برای تنظیم متغیرهایی استفاده می‌شود که برای میزبانان و یا گروه های خاص معتبرهستند، تا در playbook ها و یا template ها استفاده شوند.

همچنین برخی متغیرها می‌توانند بر روی نحوه‌ی اجرای playbook هم تاثیر بگذارند. مانند ansible_python_interpreter که اندکی دیگر با آن آشنا می شویم. برای ویرایش محتوای حالت پیش فرض فایل موجودی در Ansible، فایل /etc/ansible/hosts را با ویرایشگر انتخابی command-line خود روی ماشین مستقر یا گره کنترل Ansible باز کنید:

      $sudo nano /etc/ansible/hosts

توجه داشته باشید که گاهی اوقات در نصب Ansible فایل موجودی به طور پیش فرض به وجود نمی آید. اگر این فایل در سیستم شما وجود ندارد، می‌توانید فایل جدیدی در  /etc/ansible/hosts  ایجاد نموده و یا با استفاده از پارامتر  -i یک path custom هنگام اجرای دستورها و playbook  ها تهیه کنید.

فایل موجودی پیش فرض ارائه شده در نصب Ansible شامل تعدادی مثال است که می توانید به عنوان مرجعی برای راه اندازی فهرست داده خود استفاده کنید. مثال زیر گروهی را تعریف می کند با نام [servers] با سه سرور متفاوت که هر کدام با یک نام مستعار شناسایی شده اند: server1، server2 و server3. به یاد داشته باشید که بایستی IP سرورها را با IP آدرس سرورهای میزبانان Ansible  خود عوض کنید.

/etc/ansible/hosts

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[servers:vars]
ansible_python_interpreter=/usr/bin/python3

زیرگروه server:vars پارامتر ansible_python_interpreter میزبانان را تنظیم می‌کند، که برای تمام میزبانان مشمول گروه servers معتبر خواهد بود. این پارامتر اطمینان حاصل می‌کند که سرور راه دور از مسیر  /usr/bin/python3  برای اجرای پایتون 3 به جای مسیر  usr/bin/python  برای پایتون 2.7،که روی نسخه‌های جدیدUbuntu  موجود نیست، استفاده می‌کند.

وقتی کارتان به پایان رسید با فشردن CTRL+X و سپس Y تغییرات را تایید کرده و سپس ENTER را بزنید‌. هر وقت خواستید تا فایل موجودی خود را چک کنید، کافی است تا فرمان زیر را اجرا کنید:

        $ansible-inventory --list -y

با اجرای دستور فوق شما خروجی شبیه زیر، اما شامل زیرساخت سرورهای خود را به شکلی که در فهرست تعریف شده است خواهید دید:

Output
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

حال که فایل موجودی خود را پیکربندی کرده‌اید، هر چیزی که برای امتحان ارتباط با  میزبانان Ansible نیاز است را در اختیار دارید.

مرحله ی3: بررسی اتصال

بعد از اینکه فایل موجودی را تنظیم کردید تا شامل سرورهایتان شود، زمان این است که امتحان کنید که آیا Ansible می‌تواند با این سرورها ارتباط برقرار کرده و فرمان‌ها را از طریق SSH اجرا نماید. در این راهنما ما از اکانت root در اوبونتو استفاده می‌کنیم زیرا معمولا تنها اکانت موجود به صورت پیش فرض در سرورهای تازه ایجاد شده است. اگر میزبانان انسیبل شما از قبل یک کاربر sudo عادی ساخته شده دارند، پیشنهاد می‌شود تا از آن به جای root استفاده کنید.

شما می‌توانید از آرگومان -u برای مشخص کردن کاربر سیستم راه دوراستفاده کنید. در صورت عدم تعیین آن، Ansible از کاربر سیستم حاضر روی گره کنترل اقدام به ارتباط می‌کند. از ماشین مستقر خود و یا گره کنترل Ansible دستور زیر را اجرا کنید:

$   ansible all -m ping -u root

این فرمان ازماژول ping تعریف شده در Ansible استفاده می‌کند تا تست اتصال را روی تمام گره‌های فایل موجودی پیش فرض شما از طریق کاربر root اجرا کند. ماژول ping موارد زیر را چک می‌کند:

– در دسترس بودن میزبان‌ها
– معتبر بودن اعتبارنامه‌ی SSH شما
– توانایی میزبان‌ها در اجرای ماژول‌هایAnsible  با استفاده از پایتون

شما باید خروجی شبیه زیر مشاهده نمایید:

Output
server1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

اگر اولین بار است که به این سرورها از طریق SSH متصل می‌شوید، از شما پرسیده خواهد شد که authenticity میزبان‌هایی که در حال اتصال به آن ها با Ansible هستید را تایید کنید. عبارت yes را تایپ کرده و سپس برای تایید ENTER را بزنید.

زمانی که پاسخ “pong” از یک میزبان دریافت شد به این معنا است که شما برای اجرای فرمان‌های Ansible و playbook ها روی آن سرور آماده هستید.

مرحله ی 4: اجرای فرمان‌های Ad-Hoc (اختیاری)

پس از تایید اینکه گره کنترل Ansible توانایی برقراری با میزبانان را دارد، می‌توانید فرمان های ad-hoc و playbook ها را روی سرورتان اجرا کنید.

هر فرمانی که به طور معمول روی یک سرور راه دور از طریق SSH اجرا می‌کنید را می‌توانید با Ansible روی سرورهای تعیین شده در فایل موجودی اجرا کنید. به عنوان مثال می‌توانید میزان استفاده از دیسک را در تمام سرورها به صورت زیر چک کنید:

 $ansible all -a "df -h" -u root

دستور مشخص شده‌ی df –h می‌تواند با هر فرمان دلخواه جایگزین شود.

همچنین می‌توانید ماژول‌های Ansible  را با فرمان‌های Ad-hoc اجرا کنید، همانند کاری که با ماژول ping برای تست برقراری اتصال انجام داده شد. برای مثال به صورت زیر می‌توانیم از ماژول apt برای نصب آخرین نسخه vimروی تمام سرورهای فهرست شده استفاده کنیم:

$ ansible all -m apt -a "name=vim state=latest" -u root

همچنین می‌توانید هنگام اجرای فرمان‌هایAnsible  یک میزبان، یک گروه و حتی یک زیرگروه را هدف قرار دهید. برای نمونه به شکل زیر می‌توانید uptime هر سرور در گروه  servers را بررسی کنید:

$  ansible servers -a "uptime" -u root

برای انتخاب چند میزبان به طور همزمان، می‌توان این کار را با جدا کردن آن ها با دو نقطه مشخص کنیم:

$  ansible server1:server2 -m ping -u root

برای اطلاعات بیشتر درباره چگونگی استفاده از Ansible، ازجمله چگونگی اجرایplaybook  ها برای خودکار کردن تنظیم سرورها، می‌توانید راهنمای مرجع Ansible را بررسی نمایید.

نتیجه گیری

در این راهنما شما Ansible را نصب کرده و یک فایل موجودی را برای اجرای فرمان‌های ad-hoc از یک گره کنترل Ansible تنظیم نمودید. زمانی که توانایی اتصال و کنترل زیرساخت ها از یک ماشین کنترلگر مرکزی Ansible تایید گردید، شما می‌توانید هر فرمان یا playbook دیگری را که مدنظر دارید بر روی میزبان‌ها اجرا کنید.

حال می‌توانید با خیال راحت Ansible را برای مدیریت سرورهای خود راه‌اندازی نمایید. همچنین می‌توانید این کار را بر روی سرورهای ابری کلادینو انجام دهید و از سایر نرم‌افزارها و قابلیت‌های این سیستم به آسانی چند کلیک بهره‌مند شوید.