سیستمهای مدیریت کانفیگ برای ساده شدن فرآیند کنترل تعداد زیاد سرورها طراحی شدهاند تا به مدیران و تیمهای فنی کمک کنند آنها را به روشی خودکار کنترل کنند.
ابزارهای بسیاری مانند Chef و Puppet برای مدیریت پیکربندی وجود دارند که معمولن پیچیدگیهای فنی زیادی دارند. Ansible یک جایگزین مناسب برای این سیستمهاست زیرا معماری که ارایه میدهد نیازی به نرمافزار خاصی ندارد و از 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 به
کاربر اضافه شده باشد. این کاربر میتواند کاربر root یا معمولی با دسترسیهای sudo باشد.authorized_keys
-
تنظیمات کلید 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./~
ssh/authorized_keys./~
شما باید این کار را برای همهی سرورهای هاست انجام دهید.
گام نخست: نصب 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/
sudo nano /etc/ansible/hosts
اگرچه Ansible معمولاً یک فایل Inventory پیشفرض را در etc/ansible/hosts
i-
فایل Inventory پیشفرض ارایهشده بهوسیلهی Ansible شامل تعدادی نمونه است که میتوانید از آنها برای تنظیم Inventory خود استفاده کنید.
در نمونهی زیر گروهی از سه سرور مختلف با نام [servers]
شما باید 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
این دستور از ماژول Ping داخلی 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"
اجرای دستورهای 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
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 را بررسی کنید .