سیستمهای مدیریت کانفیگ برای ساده شدن فرآیند کنترل تعداد زیاد سرورها طراحی شدهاند تا به مدیران و تیمهای فنی کمک کنند آنها را به روشی خودکار کنترل کنند.
ابزارهای بسیاری مانند و برای مدیریت پیکربندی وجود دارند که معمولن پیچیدگیهای فنی زیادی دارند. یک جایگزین مناسب برای این سیستمهاست زیرا معماری که ارایه میدهد نیازی به نرمافزار خاصی ندارد و از SSH و فایلهای YAML برای اجرای فرآیندها استفاده میکند.
در این راهنما، شیوهی نصب و اصول اولیه در استفاده از Ansible را روی سرور اوبونتو 20.04 بررسی میکنیم.
-
یک Node کنترل Ansible : نُد کنترل Ansible سروری است که از آن برای اتصال و کنترل سرورهای دیگر یا هاستهای Ansible استفاده میکنیم. در این راهنما Node کنترل یک ابرک با سیستمعامل Ubuntu 20.04 است. Node کنترل باید دارای موارد زیر باشد:
-
یک کاربر غیر root با دسترسی sudo
-
یک جفت کلید SSH برای این کاربر
-
-
یک یا چند Node میزبان یا هاست Ansible : میزبان Ansible هر سروری است که Node کنترل Ansible برای خودکار کردن فرآیندهای آن پیکربندی شده است. در این راهنما هاستهای Ansible سرورهای Ubuntu 20.04 هستند. در هر هاست Ansible باید:
-
کلید عمومی SSH نُد کنترل Ansible به authorized_keys کاربر اضافه شده باشد. این کاربر میتواند کاربر root یا معمولی با دسترسیهای sudo باشد.
-
تنظیمات کلید SSH روی Nodeها
پیش از نصب و استفاده از Ansible لازم است یک جفت کلید SSH روی Node کنترل بسازید و کلید عمومی آن را در هاستها کپی کنید.
ساخت کلید SSH روی Node کنترل
برای ایجاد یک کلید SSH برای کاربر فعلیتان (که باید غیر root باشد) از دستور زیر استفاده کنید:
ssh-keygen
سپس از شما خواسته میشود مسیر کلید را تایید کنید. برای این کار Enter بزنید و در مرحلهی بعد که یک Passphrase برای کلید از خواسته میشود مجدد Enter بزنید تا Passphraseای برای آن انتخاب نشود.
در آخر باید خروجیای مشابه تصویر زیر مشاهده کنید:
کپی کردن کلید عمومی SSH در Nodeهای میزبان
اکنون لازم است کلید عمومی را در نُدهای هاست نیز قرار دهید. برای این کار دستور زیر را وارد کنید:
ssh-copy-id username@IP
از شما خواسته میشود، اتصال به این سرور را تایید کنید. با نوشتن yes و سپس فشردن Enter، آن را بپذیرید. سپس پسورد سروری که میخواهید کلید در آن کپی شود را وارد کرده و Enter بزنید.
با این کار محتویات مسیر ssh/id_rsa.pub./~ در Node کنترل در مسیر ssh/authorized_keys./~ در Node میزبان کپی میشود.
شما باید این کار را برای همهی سرورهای هاست انجام دهید.
گام نخست: نصب Ansible
برای شروع استفاده از Ansible و مدیریت زیرساخت سرور خود با آن، باید آن را روی سروری که به عنوان Node کنترل Ansible انتخاب کردهاید، نصب کنید.
در Node کنترل خود، دستور زیر را اجرا کنید تا PPA پروژه رسمی را در لیست منابع سیستم قرار دهید:
sudo apt-add-repository ppa:ansible/ansible
وقتی از شما خواسته شد تا PPA را بپذیرید ENTER را بزنید.
در مرحلهی بعد، apt را بهروزرسانی کنید تا از بستههای موجود در PPA جدید آگاه شود:
sudo apt update
پس از این بهروزرسانی، میتوانید Ansible را نصب کنید:
sudo apt install ansible
Node کنترل Ansible شما اکنون تمام نرمافزارهای مورد نیاز برای مدیریت هاستها را دارد. در گام بعد، شیوهی اضافه کردن هاستها به Node کنترل را بررسی میکنیم.
گام دوم: تنظیم فایل Inventory
فایل Inventory دارای اطلاعاتی دربارهی سرورهایی است که با Ansible مدیریت خواهید کرد و به آنها هاست میگوییم. شما میتوانید از یک تا چند سرور را در فایل Inventory خود قرار داده و آنها را در گروهها و زیرگروهها دستهبندی کنید.
برای ویرایش Inventory پیشفرض انسیبل، فایل etc/ansible/hosts/ را با استفاده از ویرایشگر متن دلخواهتان در Node کنترل Ansible باز کنید:
sudo nano /etc/ansible/hosts
اگرچه Ansible معمولاً یک فایل Inventory پیشفرض را در etc/ansible/hosts ایجاد میکند، اما شما میتوانید فایلهای Inventory را در هر مسیری که نیاز دارید بسازید. برای این کار، باید مسیر فایل Inventory سفارشی خود را هنگام اجرای دستورهای Ansible و Playbook با پارامتر i- ارایه دهید.
فایل Inventory پیشفرض ارایهشده بهوسیلهی Ansible شامل تعدادی نمونه است که میتوانید از آنها برای تنظیم Inventory خود استفاده کنید.
در نمونهی زیر گروهی از سه سرور مختلف با نام [servers] تعریف شده است که هر کدام با aliasهای: server2 ،server1 و server3 شناسایی میشوند.
شما باید IPهای نمونه را با آدرسهای IP هاستهای Ansible خود جایگزین کنید.
[servers] server1 ansible_host=1.2.3.4 server2 ansible_host=8.8.8.8 server3 ansible_host=4.2.2.4 [all:vars] ansible_python_interpreter=/usr/bin/python3
در آخر با فشار دادن CTRL+Xسپس Yو ENTER فایل را ذخیره کرده و ببندید.
برای بررسی Inventory خود میتوانید کامند زیر را اجرا کنید:
ansible-inventory --list -y
خروجی را بهشکل زیر اما با اطلاعات زیرساخت سرورهای خودتان مشاهده خواهید کرد:
all: children: servers: hosts: server1: ansible_host: 1.2.3.4 ansible_python_interpreter: /usr/bin/python3 server2: ansible_host: 8.8.8.8 ansible_python_interpreter: /usr/bin/python3 server3: ansible_host: 4.2.2.2 ansible_python_interpreter: /usr/bin/python3 ungrouped: {}
گام سوم: تست اتصال
پس از تنظیم فایل Inventory بررسی کنید آیا Ansible امکان اتصال به این سرورها و اجرای دستورها از طریق SSH را دارد یا خیر.
از Node کنترل Ansible، این دستور را اجرا کنید:
ansible all -m ping -u root
این دستور از داخلی Ansible برای اجرای تست اتصال روی تمام Nodeهای Inventory پیشفرض استفاده میکند. این ماژول بررسی میکند که:
-
میزبانها در دسترس باشند
-
دارای کلیدهای SSH معتبر باشند
-
هاستها بتوانند ماژولهای Ansible را با استفاده از پایتون اجرا کنند.
باید خروجی را به این شکل دریافت کنید:
server1 | SUCCESS => { "changed": false, "ping": "pong" } server2 | SUCCESS => { "changed": false, "ping": "pong" } server3 | SUCCESS => { "changed": false, "ping": "pong" }
اگر این اولین باری است که از طریق SSH به این سرورها متصل میشوید، از شما خواسته میشود که صحت هاستها را تایید کنید. yes را تایپ کنید و سپس ENTER بزنید.
هنگامی که پاسخ “pong” را از از یک میزبان دریافت میکنید، یعنی شما امکان اجرای دستورهای Ansible و Playbook را در آن سرور دارد.
اجرای دستورهای Ad-Hoc
پس از تایید اینکه Node کنترل Ansible شما قادر به برقراری ارتباط با هاستهاست، میتوانید اجرای دستورهای Ad-hoc و Playbookها را در سرورهای خود شروع کنید.
هر دستوری که روی یک سرور از طریق SSH اجرا میکنید، میتواند با Ansible در سرورهای مشخصشده در فایل Inventory شما اجرا شود. برای نمونه، میتوانید میزان استفاده از دیسک در همهی سرورها را با موارد زیر بررسی کنید:
ansible all -a "df -h" -u root
خروجی:
server1 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 624K 798M 1% /run /dev/vda1 155G 2.3G 153G 2% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 798M 0 798M 0% /run/user/0 server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 2.0G 0 2.0G 0% /dev tmpfs 395M 608K 394M 1% /run /dev/vda1 78G 2.2G 76G 3% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda15 105M 3.6M 101M 4% /boot/efi tmpfs 395M 0 395M 0% /run/user/0 ...
دستور df -h را میتوان با هر دستوری جایگزین کرد.
علاوهبر این میتوانید ماژولهای Ansible را از طریق دستورهای ad-hoc اجرا کنید. به عنوان مثال، با دستور زیر میتوانید با استفاده از ماژول apt آخرین نسخهی vim را روی تمام سرورهای Inventory خود نصب کنید:
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ها برای خودکارسازی تنظیمات سرور میتوانید را بررسی کنید .