Лень – двигатель прогресса. Изобретение лифта, пульта дистанционного управления – яркие тому примеры. Стремление к автоматизации рутинных задач привело к появлению Ansible – инструмента, упрощающего жизнь IT-специалистам.
Проблема рутинных задач в администрировании серверов
Множество серверов требуют одновременного выполнения различных действий: обновление конфигураций, создание пользователей, резервное копирование, перезапуск сервисов. Все это необходимо делать регулярно. Подключение по SSH к каждому серверу и ввод одних и тех же команд – утомительное и подверженное ошибкам занятие.
Ansible: решение для автоматизации
Ansible – опенсорсный инструмент для автоматизации IT-задач. Он позволяет запускать рутинные операции из одного места, без необходимости подключения к каждому серверу. Все действия описываются в YAML-файле (Yet Another Markup Language). Это избавляет от длинных, склеенных команд и подверженных ошибкам shell-скриптов. Ansible выполняет задачи независимо от их количества.
Начало работы
Для начала работы установите Ansible на компьютер, с которого будет осуществляться управление серверами (например, ноутбук). Необходим SSH-доступ (или WinRM для Windows-серверов) к управляемым серверам. Главное преимущество Ansible – отсутствие агентов, в отличие от Chef или Puppet. Агент – приложение, устанавливаемое на каждый сервер. В Ansible эта необходимость отсутствует.
Модули Ansible
Ansible использует модули – небольшие программы, выполняющие определенные задачи. Модули отправляются на серверы, выполняют свою работу и удаляются. Существует множество модулей: создание файлов, копирование, установка Nginx, запуск контейнеров Docker и многое другое. Ansible предоставляет модули для работы с базами данных, облачными провайдерами и CI/CD инструментами. Сетевые инженеры могут использовать Ansible для настройки маршрутизации и списков доступа на оборудовании Cisco, Juniper, MikroTik и других производителей. При необходимости можно написать собственный модуль.
Playbook и декларативный подход
Конфигурация в Ansible описывается в YAML-файле, называемом Playbook. Используется декларативный подход: описывается желаемый результат, а не последовательность действий.
Примеры:
Создание Docker-образа:
- name: Create Docker image
docker_image:
name: my-image
path: ./my-image
Запуск Docker-контейнера:
- name: Run Docker container
docker_container:
name: my-container
image: my-image
Работа с PostgreSQL:
- name: Manage PostgreSQL tables
postgresql_db:
dbname: mydb
state: present # or absent
user: myuser
password: mypassword
tables:
- name: mytable
owner: myuser
Tasks
Для выполнения нескольких действий в определенной последовательности модули объединяются в задачи (Tasks). Каждой задаче присваивается имя, указывается модуль и его аргументы:
- name: Create directory
file:
path: /my/dir
state: directory
- name: Install Nginx
apt:
name: nginx
state: present
- name: Start Nginx
service:
name: nginx
state: started
Hosts и Inventory File
Для указания серверов используется директива hosts. Список серверов указывается в файле инвентаризации (Inventory File):
[webservers]
192.168.1.100
192.168.1.101
В Playbook серверы указываются по имени группы:
- hosts: webservers
remote_user: myuser
tasks:
# ... tasks ...
Переменные объявляются в блоке vars:
- hosts: webservers
vars:
my_variable: "some value"
tasks:
- debug:
msg: "My variable: {{ my_variable }}"
Блок, содержащий информацию о том, кто и что должен выполнить, называется Play. В одном Playbook может быть несколько Play для разных групп серверов.
Ansible – мощный инструмент для автоматизации IT-задач, упрощающий администрирование серверов и повышающий эффективность работы. Использование декларативного подхода, модулей и Playbook делает процесс автоматизации удобным и понятным.